探検


Rust part38

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2026/07/24(金) 20:04:25.76ID:24e2kQId
公式
https://www.rust-lang.org/
https://blog.rust-lang.org/
https://github.com/rust-lang/rust

公式ドキュメント
https://www.rust-lang.org/learn

Web上の実行環境
https://play.rust-lang.org

※Rustを学びたい人はまず最初に公式のThe Bookを読むこと
https://doc.rust-lang.org/book/
(コミュニティによる日本語翻訳版もあります: https://doc.rust-jp.rs/book-ja/)

※Rustを学ぶ際に犯しがちな12の過ち
https://dystroy.org/blog/how-not-to-learn-rust

※Rustのasyncについて知りたければ「async-book」は必読
https://rust-lang.github.io/async-book/

※次スレは原則>>980が立てること

前スレ
Rust part37
https://mevius.5ch.io/test/read.cgi/tech/1784283151/

ワッチョイスレ
プログラミング言語 Rust 4【ワッチョイ】
https://mevius.5ch.io/test/read.cgi/tech/1514107621/
2026/07/25(土) 00:10:54.83ID:yA1FjEyp
ついに正解に辿り着いたのか
2026/07/25(土) 00:30:20.59ID:jRf3NZQv
>>58-62
間違いがあるな
ムーブ = ディープコピーだなんて言ってる奴はいない
その人はずっとスタックがpopされる時に移動する値があるという話をしている
なので>>60が言ってることはむしろ>>60自身に当てはまってて、

> Rustはオブジェクトをそのまま値として変数に入れたりムーブできる
> だからオブジェクトの中に参照を持たない限りディープコピーにならない

これには1つ重大な見落としがある
Rustではムーブは所有権を移す行いであるため、メモリの寿命はムーブされた後のスコープによって管理される

しかし、スタックがpopされる場合そのメモリ領域は解放されてしまうため、そのままではムーブしたはずなのにUse-after-freeが発生する
これを防ぐためにはpopされる領域から事前にメモリを書き写す必要があり、これは実体を丸ごと移動させるディープコピーとならざるを得ない
これがずっと言われてることであって、Rustの仕様としては完全に正しい

これについて、前スレではReturn Value Optimizationで防がれるという、いい主張があったがこれはコンパイラの最適化によるものであって、仕様として確定したものはないという話だった

逆に、今>>58-62が言ってるのはヒープ領域に限ったムーブの説明にしかなっていないし、>>56の例はスコープが変わっていないのでスタックのpopは発生しないため例として不適切であることになる
そのため、前スレにおける議論よりもずいぶん低レベルで、とにかく相手が言っていることを間違っていると言えれば満足というものに変わってしまっている
2026/07/25(土) 00:33:03.68ID:m5hU/HdI
>>63
>>これは実体を丸ごと移動させるディープコピーとならざるを得ない

そこが貴方の間違い
単なる値のムーブなのでディープコピーではない
Rustのムーブがディープコピーになることはない
65デフォルトの名無しさん
垢版 |
2026/07/25(土) 00:33:24.06ID:47WIMuh3
それな
というか、そうじゃなかったらRVOなんて存在しないんだよな
>>58-62の主張だとRustにはRVOは存在しないことになるが、本当にそうかどうかは調べた方がいい
2026/07/25(土) 00:34:11.72ID:bstVFDuM
>>64
また勘違い解釈が出たな

> 単なる値のムーブなのでディープコピーではない
それたぶんこのスレに入ってからも何回か否定されてるぞ
2026/07/25(土) 00:35:46.32ID:eZT8/Ty+
>>65
たぶん>>63に同意してるんだと思うが、まあそりゃそうなるんだよな
スタックがpopされるときに実体のコピーが発生しないと仮定すると、RVOという言葉はおかしくなる
それは最適化じゃなくて言語仕様としての義務になるからな
2026/07/25(土) 00:36:28.79ID:eZT8/Ty+
>>64
ディープコピー(深いコピー)とは - IT用語辞典 e-Words
https://e-words.jp/w/%E3%83%87%E3%82%A3%E3%83%BC%E3%83%97%E3%82%B3%E3%83%94%E3%83%BC.html

> ディープコピーとは、配列やオブジェクトなどのデータ構造を複製する際、同じ構造の実体を新たに作成して対応するデータを写し取る方式。


Deep copy (ディープコピー) - 用語集 | MDN
https://developer.mozilla.org/ja/docs/Glossary/Deep_copy

> オブジェクトの ディープコピー とは、コピー先のオブジェクトのプロパティがコピー元のオブジェクトのプロパティと同一の参照(同じ値を指す)で共有しないコピー方法のことです。結果として、コピー元かコピー先のどちらかを変更しても、もう一方オブジェクトにも変更を及ぼしていないことを保証できます。すなわち、コピー元かコピー先に意図せずに予期しない変更が加えられるこはありません。この振る舞いはシャローコピーとは対照的です。シャローコピーでは、コピー元かコピー先のどちらかを変更するともう一方のオブジェクトも変更される可能性があります。

> プロパティがすべてプリミティブ値であるオブジェクトのコピーは、ディープコピーとシャローコピーの両方の定義に当てはまります。しかし、このようなコピーの深さについて話すのはやや無意味です。というのも、このコピーには入れ子プロパティがなく、ディープコピーについては通常、入れ子プロパティを変更するコンテキストで話すからです。
2026/07/25(土) 00:39:26.43ID:m5hU/HdI
>>65
RVOはシャローコピーだぞ
例えばVecを返す時に連続体の部分はコピーしない
長さ二つとアドレスの3点のみコピーする
2026/07/25(土) 00:39:38.81ID:ggq/DgOO
>>63が言ってることと同じことが書いてあるな
https://users.rust-lang.org/t/does-rust-have-return-value-optimization/10389

> it's just like (current) C++ in this regard - it's an optimization, without any guarantees that it'll happen. Not sure if that will change with MIR maturing and rust doing its own pre-LLVM optimizations.
→ これは(現在の)C++とまったく同じで、それが実現するという保証がまったくない最適化です。MIRが成熟し、Rustが独自のLLVM前最適化を行うことで、それが変わるかどうかはわかりません。
2026/07/25(土) 00:40:48.47ID:+sd0sCI1
>>69
何言ってんだこいつ
RVOが最適化として存在するということは、大前提それで最適化されないとディープコピーされることを意味している、という話だぞ
2026/07/25(土) 00:42:53.41ID:m5hU/HdI
>>70
それはディープコピーとシャローコピーの違いと一切の関係がない
2026/07/25(土) 00:44:31.56ID:m5hU/HdI
>>71
貴方はRVOが何なのか理解できてないのか?
関数が値をレジスタ返しできない時に呼び出し元に直接書き込む最適化の話だぞ
どこにもディープコピーの要素がない
2026/07/25(土) 00:45:27.39ID:YZc0yK18
>>72
当たり前だろ
そんな低レベルな話はMDN見ろで済むこと
2026/07/25(土) 00:47:09.32ID:m5hU/HdI
>>74
MDNにディープコピーの説明がある
Rustのムーブがディープコピーになることはない
2026/07/25(土) 00:47:38.39ID:lWzgIol7
>>73
まだRVOがディープコピーしてると思ってるの日本語読解力が0どころかマイナスだろ
ディープコピーを防ぐための機能がRVOじゃマヌケ

値をレジスタ返しできないなんてことは関係ない
そもそもレジスタで返されたところでメモリに書き込む必要はあるんだから、レジスタで返せたらすっきり終わりだと思ってる時点で頭が回っていない
というかこの複おじの「レジスタを魔法のストレージだと思っている」現象何なんだ
2026/07/25(土) 00:48:38.59ID:v9E5M8Mr
>>75
はいはい、お前の中ではそうなんだねw
どう見ても>>63は完全に正しいことを言ってるけど、複オジにはわからないか
2026/07/25(土) 00:49:49.12ID:EHXKadgF
>>73
複オジは知らないことで威張るの好きだよな
RVOはオブジェクトのコピーを省略するための最適化じゃマヌケ
2026/07/25(土) 00:51:07.13ID:yZnT0yMD
Rustではムーブは所有権を移す行いであるため、メモリの寿命はムーブされた後のスコープによって管理される

しかし、スタックがpopされる場合そのメモリ領域は解放されてしまうため、そのままではムーブしたはずなのにUse-after-freeが発生する
これを防ぐためにはpopされる領域から事前にメモリを書き写す必要があり、これは実体を丸ごと移動させるディープコピーとならざるを得ない
これがずっと言われてることであって、Rustの仕様としては完全に正しい

これについて、前スレではReturn Value Optimizationで防がれるという、いい主張があったがこれはコンパイラの最適化によるものであって、仕様として確定したものはない

> it's just like (current) C++ in this regard - it's an optimization, without any guarantees that it'll happen. Not sure if that will change with MIR maturing and rust doing its own pre-LLVM optimizations.
→ これは(現在の)C++とまったく同じで、それが実現するという保証がまったくない最適化です。MIRが成熟し、Rustが独自のLLVM前最適化を行うことで、それが変わるかどうかはわかりません。
https://users.rust-lang.org/t/does-rust-have-return-value-optimization/10389
2026/07/25(土) 00:54:07.17ID:0WqDWpvy
The Bookには「there’s a design choices … : Rust will never automatically create “deep” copies of your data」と書いてる

Rustは自動的にディープコピーを作ることは決してない、という設計選択をしている

The Bookの著者が勘違いをしているのか君が勘違いをしているのかどっちだろうね〜?
2026/07/25(土) 00:55:33.08ID:fqYQyOjc
>>80
そりゃThe Bookにおいてはディープコピーという言葉はヒープのみに限定して使われてるからな
一般的な用法ではないが、そのように定義しているというだけの話
2026/07/25(土) 00:55:34.81ID:GrgDaK5Z
そこは最適化の有無と関係ない
ムーブは最適化されても最適化されなくてもシャローコピー
2026/07/25(土) 00:57:20.17ID:BPvLmugh
>>82
そうだとすれば、スタックに置かれたデータはRVOがないとムーブで戻り値として返却できないことになるな
あるかないかわからない最適化がないと返却できない、そんな言語仕様だと君は言いたいのかい?
2026/07/25(土) 00:57:25.34ID:m5hU/HdI
>>81
ヒープに限定されない
参照先がスタック上でも同じ
ムーブは参照先をコピーしない
2026/07/25(土) 00:59:12.53ID:GrgDaK5Z
>>83
ムーブは最適化の有無に関係なくシャローコピー
ディープコピーしない
2026/07/25(土) 00:59:42.58ID:BPvLmugh
>>84
じゃあどうやってスタック上の値が戻り値としてムーブされるのか説明してもらってもいい?
スタックだから当然関数の終わりでスコープが終わることで、このメモリ領域はpopされるぜ?
2026/07/25(土) 01:00:42.64ID:m5hU/HdI
>>83
ムーブは最適化がなければビットコピーだよ
RVOを切っても同じ
2026/07/25(土) 01:00:44.95ID:0WqDWpvy
>>81
ヒープのみに限定して使われてるってThe Bookのどこに書いてあるのかな〜?
おしえておしえて〜
2026/07/25(土) 01:01:40.71ID:BPvLmugh
Rustではムーブは所有権を移す行いであるため、メモリの寿命はムーブされた後のスコープによって管理される

しかし、スタックがpopされる場合そのメモリ領域は解放されてしまうため、そのままではムーブしたはずなのにUse-after-freeが発生する
これを防ぐためにはpopされる領域から事前にメモリを書き写す必要があり、これは実体を丸ごと移動させるディープコピー(※)とならざるを得ない
これがずっと言われてることであって、Rustの仕様としては完全に正しい

これについて、前スレではReturn Value Optimizationで防がれるという、いい主張があったがこれはコンパイラの最適化によるものであって、仕様として確定したものはない

> it's just like (current) C++ in this regard - it's an optimization, without any guarantees that it'll happen. Not sure if that will change with MIR maturing and rust doing its own pre-LLVM optimizations.
→ これは(現在の)C++とまったく同じで、それが実現するという保証がまったくない最適化です。MIRが成熟し、Rustが独自のLLVM前最適化を行うことで、それが変わるかどうかはわかりません。
https://users.rust-lang.org/t/does-rust-have-return-value-optimization/10389

※MDNの定義であり、一般的
The Bookではビットコピーという変わった言葉が使われることがあるらしい、複オジ情報だから怪しいが
2026/07/25(土) 01:02:45.59ID:GrgDaK5Z
>>86
ムーブが何かを正しく覚えよう
trait Copyのところに書かれてるよ
最適化されないとコピーされる
もちろんディープじゃない
2026/07/25(土) 01:02:57.64ID:BPvLmugh
>>84-85
>>87-88
こいつら>>86の

>>じゃあどうやってスタック上の値が戻り値としてムーブされるのか説明してもらってもいい?
>>スタックだから当然関数の終わりでスコープが終わることで、このメモリ領域はpopされるぜ?

には答えられなさそうだな
2026/07/25(土) 01:03:59.21ID:IFke0mwN
>>90
お前の中ではディープじゃないのはわかったって
MDN定義ではディープ、お前定義では違うってのはわかったから、そこはもういいから質問に答えようぜ
2026/07/25(土) 01:04:10.58ID:m5hU/HdI
>>89
君だけディープコピーを勘違いしてる
2026/07/25(土) 01:04:52.50ID:IFke0mwN
>>93
原文出されて否定されてるのに、まだそれ言ってるの流石に飽きたからもういいよ
2026/07/25(土) 01:05:50.94ID:m5hU/HdI
>>92
なるほど
MDNの定義を誤読してるのか
まずはちゃんと読め
2026/07/25(土) 01:06:06.22ID:IFke0mwN
Rustではムーブは所有権を移す行いであるため、メモリの寿命はムーブされた後のスコープによって管理される

しかし、スタックがpopされる場合そのメモリ領域は解放されてしまうため、そのままではムーブしたはずなのにUse-after-freeが発生する
これを防ぐためにはpopされる領域から事前にメモリを書き写す必要があり、これは実体を丸ごと移動させる実体ごとのコピー(※)とならざるを得ない
これがずっと言われてることであって、Rustの仕様としては完全に正しい

これについて、前スレではReturn Value Optimizationで防がれるという、いい主張があったがこれはコンパイラの最適化によるものであって、仕様として確定したものはない

> it's just like (current) C++ in this regard - it's an optimization, without any guarantees that it'll happen. Not sure if that will change with MIR maturing and rust doing its own pre-LLVM optimizations.
→ これは(現在の)C++とまったく同じで、それが実現するという保証がまったくない最適化です。MIRが成熟し、Rustが独自のLLVM前最適化を行うことで、それが変わるかどうかはわかりません。
https://users.rust-lang.org/t/does-rust-have-return-value-optimization/10389

※複オジ定義でディープコピーじゃないということで延々そこにばかり嚙みついて議論を回避しようとするので、複オジ定義の言葉に書き換えてあげました
2026/07/25(土) 01:07:11.67ID:N92SZQwm
>>95
お前がなーw


Deep copy (ディープコピー) - 用語集 | MDN
https://developer.mozilla.org/ja/docs/Glossary/Deep_copy

> オブジェクトの ディープコピー とは、コピー先のオブジェクトのプロパティがコピー元のオブジェクトのプロパティと同一の参照(同じ値を指す)で共有しないコピー方法のことです。結果として、コピー元かコピー先のどちらかを変更しても、もう一方オブジェクトにも変更を及ぼしていないことを保証できます。すなわち、コピー元かコピー先に意図せずに予期しない変更が加えられるこはありません。この振る舞いはシャローコピーとは対照的です。シャローコピーでは、コピー元かコピー先のどちらかを変更するともう一方のオブジェクトも変更される可能性があります。

> プロパティがすべてプリミティブ値であるオブジェクトのコピーは、ディープコピーとシャローコピーの両方の定義に当てはまります。しかし、このようなコピーの深さについて話すのはやや無意味です。というのも、このコピーには入れ子プロパティがなく、ディープコピーについては通常、入れ子プロパティを変更するコンテキストで話すからです。


どう見ても実体のコピーはディープコピーだぞw
2026/07/25(土) 01:07:46.10ID:N92SZQwm
>>95
反論されないようにあえて何がディープコピーになるのか言わないようになってて草
2026/07/25(土) 01:08:34.16ID:Nxs+SX3U
>>93
>>95
やっぱりこいつら>>86の

>>じゃあどうやってスタック上の値が戻り値としてムーブされるのか説明してもらってもいい?
>>スタックだから当然関数の終わりでスコープが終わることで、このメモリ領域はpopされるぜ?

には答えられないみたいだな
2026/07/25(土) 01:09:11.69ID:yHwe+V9G
>>96で複オジ定義準拠になったからこれで本題に入れるなw
2026/07/25(土) 01:10:30.05ID:GrgDaK5Z
なぜかMDNのJavaScriptのオブジェクトについてのディープコピーの話を見てるから誤解してるんだろうな
まず重要なことはJavaScriptのオブジェクトは値そのまま変数などへ格納することができない
オブジェクトの値を指す参照が変数はプロパティに格納される
だから深さが一つ異なる
2026/07/25(土) 01:13:27.60ID:GrgDaK5Z
>>97
キミの勘違いがこれで理解できただろう
2026/07/25(土) 01:14:04.92ID:btBddaoz
>>101
顔真っ赤で草
まともな文章も書けなくなってるじゃんw
2026/07/25(土) 01:15:17.59ID:m5hU/HdI
>>99
ムーブはRust公式に書かれてるように最適化がなければ単なるビットコピー
つまりディープコピーではなくシャローコピーになる
2026/07/25(土) 01:15:36.67ID:1hCXIcGr
>>101-102
別にそのページJavaScriptのページじゃねえぞ
確認してみればわかることだが
2026/07/25(土) 01:16:23.23ID:1hCXIcGr
>>104
シャローコピーの定義が壊れてますよw
2026/07/25(土) 01:16:54.92ID:1hCXIcGr
>>101-102
>>104
やっぱりこいつら>>86の

>>じゃあどうやってスタック上の値が戻り値としてムーブされるのか説明してもらってもいい?
>>スタックだから当然関数の終わりでスコープが終わることで、このメモリ領域はpopされるぜ?

には答えられないみたいだな
2026/07/25(土) 01:19:44.97ID:Q3r5TZlV
Rustではムーブは所有権を移す行いであるため、メモリの寿命はムーブされた後のスコープによって管理される

しかし、スタックがpopされる場合そのメモリ領域は解放されてしまうため、そのままではムーブしたはずなのにUse-after-freeが発生する
これを防ぐためにはpopされる領域から事前にメモリを書き写す必要があり、これは実体を丸ごとメモリ上で移動させる、全体のコピー(※)とならざるを得ない
これがずっと言われてることであって、Rustの仕様としては完全に正しい

これについて、前スレではReturn Value Optimizationで防がれるという、いい主張があったがこれはコンパイラの最適化によるものであって、仕様として確定したものはない

> it's just like (current) C++ in this regard - it's an optimization, without any guarantees that it'll happen. Not sure if that will change with MIR maturing and rust doing its own pre-LLVM optimizations.
→ これは(現在の)C++とまったく同じで、それが実現するという保証がまったくない最適化です。MIRが成熟し、Rustが独自のLLVM前最適化を行うことで、それが変わるかどうかはわかりません。
https://users.rust-lang.org/t/does-rust-have-return-value-optimization/10389

※複オジ定義でディープコピーじゃないということで延々そこにばかり嚙みついて議論を回避しようとするので、複オジ定義の言葉に書き換えてあげました
※複オジ定義のビットコピー? しかし最初はプリミティブ値のことだと言っていたので怪しめ
2026/07/25(土) 01:22:02.47ID:2pGX8yaS
>>107
そりゃそうよ
複おじは「スタックに巨大データを置いても欠点はない、ムーブすれば実体がコピーされることはない」と言い続けてきた手前、それに答えたらどうやっても自滅するしかない
2026/07/25(土) 01:23:35.15ID:GrgDaK5Z
>>105
MDN確認したがJavaScriptの話しか書かれていない

https://developer.mozilla.org/en-US/docs/Glossary/Deep_copy
Two objects o1 and o2 are structurally equivalent if their observed behaviors are the same. These behaviors include:

1. The properties of o1 and o2 have the same names in the same order.
2. The values of their properties are structurally equivalent.
3. Their prototype chains are structurally equivalent (although when we deal with structural equivalence, these objects are usually plain objects, meaning they both inherit from Object.prototype).
2026/07/25(土) 01:26:03.82ID:2pGX8yaS
>>110
お前が勝手にそう思ったって感想文はいいからw
そのページの中にJavaScriptのことだという記載がどこにもないし、その親の
https://developer.mozilla.org/en-US/docs/Glossary/
にもそんなことは一言も書かれていない
全部複おじの妄想
2026/07/25(土) 01:27:32.17ID:hH2Iz9/v
>>107-108が話題を本題に移したから、複おじは雑な定義論争で引っ掻き回せる古い話を続けたくて仕方がない
2026/07/25(土) 01:33:12.21ID:GrgDaK5Z
>>111
Object.prototypeなど全てJavaScriptだけに出てくる用語だぞ
そこはJavaScriptのためのページだ
2026/07/25(土) 01:35:27.30ID:VVrGpXow
>>110
>>113
やっぱりこいつら>>86の

>>じゃあどうやってスタック上の値が戻り値としてムーブされるのか説明してもらってもいい?
>>スタックだから当然関数の終わりでスコープが終わることで、このメモリ領域はpopされるぜ?

には答えられないみたいだな
2026/07/25(土) 01:35:56.51ID:VVrGpXow
Rustではムーブは所有権を移す行いであるため、メモリの寿命はムーブされた後のスコープによって管理される

しかし、スタックがpopされる場合そのメモリ領域は解放されてしまうため、そのままではムーブしたはずなのにUse-after-freeが発生する
これを防ぐためにはpopされる領域から事前にメモリを書き写す必要があり、これは実体を丸ごとメモリ上で移動させる、全体のコピーとならざるを得ない
これがずっと言われてることであって、Rustの仕様としては完全に正しい

これについて、前スレではReturn Value Optimizationで防がれるという、いい主張があったがこれはコンパイラの最適化によるものであって、仕様として確定したものはない

> it's just like (current) C++ in this regard - it's an optimization, without any guarantees that it'll happen. Not sure if that will change with MIR maturing and rust doing its own pre-LLVM optimizations.
→ これは(現在の)C++とまったく同じで、それが実現するという保証がまったくない最適化です。MIRが成熟し、Rustが独自のLLVM前最適化を行うことで、それが変わるかどうかはわかりません。
https://users.rust-lang.org/t/does-rust-have-return-value-optimization/10389
2026/07/25(土) 01:36:26.67ID:hAmad9Un
コピーされることはないって言い続けてた複おじさん、急に黙ったけど反論マダー?
117デフォルトの名無しさん
垢版 |
2026/07/25(土) 01:37:10.84ID:8wQlg2KP
>>107
ムーブとは最適化が行われない限り単なるビットコピーのこと、という基本は理解できてる?
あとシャローコピーは入れ子構造を追わずに単なるビットコピーというのも理解できてる?
118デフォルトの名無しさん
垢版 |
2026/07/25(土) 01:38:31.06ID:8wQlg2KP
>>115
そのRVOは2度のコピーを1度のコピーにする最適化
2026/07/25(土) 01:38:43.81ID:8N1fuvKw
>>117
答える気がないってことは理解できたぞ
話を逸らすことにだけは熱心だな
2026/07/25(土) 01:39:31.05ID:ZPpanMWX
>>118
二度のコピーって何だよw
コピーは一度、全体をコピーするだけだぞ
2026/07/25(土) 01:40:26.25ID:8isXHKT8
複おじは反論が厳しいと気づいたら上げ始めるからわかりやすい
2026/07/25(土) 01:41:34.80ID:GrgDaK5Z
>>114
関数の戻り値は常にムーブ
レジスタで戻すか戻せなければRVO
RVOを禁じても単なるコピー
ディープコピーは絶対に起きない
2026/07/25(土) 01:46:03.63ID:HYCujxnB
>>122
複オジは知らないことで威張るの好きだよな
RVOはオブジェクトのコピーを省略するための最適化じゃマヌケ
あと、お前定義のディープコピーはもうどうでもいいから書かなくていいよw
2026/07/25(土) 01:48:06.15ID:3pKy/hT/
>>122
複おじさんはずっと勘違いしてるけど、レジスタはメモリじゃないよ
レジスタで返したところで、直後で捨てるんじゃなかったらメモリに書き込むことは確定だからメモリに書くのは前提
RVOはそのメモリに書き込むことを防ぐ最適化
2026/07/25(土) 01:49:46.59ID:GrgDaK5Z
>>123
同じ意見を言ってるだけじゃないか
同じだから異論はない
2026/07/25(土) 01:49:49.86ID:3pKy/hT/
戻り値の場合、あらかじめ受け取る側にメモリを用意させておけば、そのメモリに書き込ませてやると戻り値を返す時にコピーしなくていい
2026/07/25(土) 01:52:26.97ID:wrAT5CQI
>>125
レジスタで戻すというのが勘違いを含んでる
それも最適化の一部であって、元々はRVOがない時の挙動は単純な全体のコピー
2026/07/25(土) 01:52:45.06ID:GrgDaK5Z
>>124
> RVOはそのメモリに書き込むことを防ぐ最適化

違うよ
RVOはそのメモリに直接書き込む最適化
2026/07/25(土) 01:54:51.35ID:+kxruos2
>>128
スコープ外のメモリには書き込めないので、そこに書き込ませるという最適化をすることで、元々戻り値をコピーしてメモリに書き込まなければならないという問題をスキップしている、という話をしてるんだぞ
2026/07/25(土) 01:55:14.41ID:GrgDaK5Z
>>127
サイズ内ならレジスタで戻すことは各アーキテクチャのABIで決められている
これは守ることは必須
最適化を全くしない設定にしても必ずレジスタで戻す
2026/07/25(土) 01:58:00.23ID:oIMG+RhI
>>122
メモリに書き込むべきものをレジスタ上で済ませられるなら済ませる、というのはそれはそれで別の最適化なんだよな
元々メモリに書き込む必要がなければRVOが必要ないのはその通りだが、戻り値をレジスタで返すというのはRVOと同様に不自然な挙動であると言える
本来のスタックとスコープの仕様を考えれば、そこはコピーされることになるからね
2026/07/25(土) 02:00:19.42ID:GrgDaK5Z
>>129
それは正しい
RVOはそのメモリに直接書き込む最適化
2026/07/25(土) 02:02:54.60ID:GrgDaK5Z
>>131
それは間違っている
各CPUアーキテクチャのABIによって規定レジスタで返せる時はレジスタ返しが定められている
これは最適化ではない
最適化オプションを無効にしても行なわれる
2026/07/25(土) 07:11:21.68ID:tifPz07H
まだシャベリ場やってたんだ
暑いですね
2026/07/25(土) 08:25:42.17ID:23WeE0Dk
今日もC++の話で盛り上がっているようですね
136デフォルトの名無しさん
垢版 |
2026/07/25(土) 09:35:59.48ID:MuPBIHa2
Rustも同じだよ
LinuxならSystem V ABI
例えばx86-64なら関数の戻り値は16バイトまでならレジスタ返しraxとrdxで返す
それを超えるとメモリ返し
隠れた第一引数にそのアドレスが渡されて来るのでそこに書き込む
第一引数はレジスタrdiで渡って来る
ここまでは最適化と関係なくABIで決まってる

RVOがないと
一旦ローカル変数用のメモリに書き込んで戻り値を生成
その後に先ほどのrdiが示す場所へコピー

RVOがあると
いきなりrdiが示す場所で戻り値を生成

いずれの場合でもディープコピーは起きない
137sage
垢版 |
2026/07/25(土) 11:06:55.32ID:gduj764k
GPTでRust関連ニュースを予約しとけば良さそう🤔
2026/07/25(土) 11:49:40.97ID:OE8xb2j5
初代複オジは過去の自分の生き写しかのような二代目複オジを見ていまどういう気持ちなんだろう
139sage
垢版 |
2026/07/25(土) 12:10:30.10ID:gduj764k
クソどうでもいいガイジ😂
関わってる奴らもガイジ😂
2026/07/25(土) 13:02:34.53ID:haFYpz07
Rustの話ができないくせに煽り書き込みには熱心な奴が一番のガイジ
2026/07/25(土) 13:03:33.41ID:haFYpz07
>>136
複オジ定義の、と付けとかないと初心者さんが混乱するだろw

>>135
どこにC++の話があるんだよw
Rust使ったことないんだろうなww
2026/07/25(土) 13:19:10.32ID:23WeE0Dk
Rustは使ってみたいのですが、使い道がないのです
ここを見れば、Rustでなければ作れない素晴らしいソフトウェアや、生産性の劇的な向上の話があると思いました
どうやら、そんなものはないようですね
2026/07/25(土) 13:25:03.84ID:lGvZBwSY
>>142
そりゃそうだろ
Rustは優秀だけどただのプログラミング言語
どう使うかはプログラマが考えること
2026/07/25(土) 13:25:38.77ID:lGvZBwSY
まあ、まずはThe Book開きなよ
いくつか実例やってる間に思いつくかもよ
145デフォルトの名無しさん
垢版 |
2026/07/25(土) 13:35:09.27ID:z3bnVdWi
初心者は軽量なコマンドラインツール作ってみるのが良いと思う
muslとか使えばシングルバイナリで配布できるし
2026/07/25(土) 16:55:41.54ID:Ck2vRTsZ
まさにThe Bookに簡易grepがある
147sage
垢版 |
2026/07/25(土) 16:58:32.69ID:TtQEMppw
初心者はThe bookを10周しなさい
2026/07/25(土) 17:24:51.54ID:23WeE0Dk
使い道がないものに投資するのはムリというものです
娯楽なら、Rustより圏論の方が楽しそうな気がしています
149sage
垢版 |
2026/07/25(土) 17:57:58.22ID:TEemhTBN
ほのかに漂う障害者臭
150デフォルトの名無しさん
垢版 |
2026/07/25(土) 19:22:36.53ID:brc+ZI8q
AIに聞けばここ1週間の議論は1分で終わる
業務効率化しろよお前ら
2026/07/25(土) 19:54:48.81ID:lGpf3alA
まとめ
1. Rustのムーブはディープコピーを行わず、所有権だけを移動する。
2. Copyトレイトを持つ型はムーブ時に値がコピーされるが、これは浅いコピー。
3. 明示的にディープコピーが必要な場合は .clone() を使う。
この設計により、Rustはパフォーマンスと安全性のバランスを保ちつつ、ヒープデータの不必要なコピーを避けます。
2026/07/25(土) 20:04:37.90ID:lvMSu3cI
このスレ、何割が生成AIの書き込み?
2026/07/25(土) 20:17:10.43ID:Y9wzz45h
ディープコピーが何かを誤解してるアホが一匹
ムーブでディープコピーが起きると暴れてた
154sage
垢版 |
2026/07/25(土) 20:23:07.65ID:ubZb3IZ/
前スレの9割がRustアンチ障害者の書き込み
155デフォルトの名無しさん
垢版 |
2026/07/26(日) 12:34:52.69ID:qnd+P8+f
なんかポインタ(Cの)のことをわかっていないもしくは分かる必要がないと思ってる人が多数まじって議論が続いているような気がするのは気のせいか?
156sage
垢版 |
2026/07/26(日) 12:39:03.95ID:vb4kuh8u
AIに聞けばわかることをレスバしてる
精神障害者の自作自演
157デフォルトの名無しさん
垢版 |
2026/07/27(月) 03:25:54.02ID:kl2EwqW+
道具だからねぇプログラミング言語なんて

ハサミだろうがカッターだろうが紙を切ることは出来る

安全装置が付いた栽断機をRustとして
Rustなら安全にまっすぐ切れるよって道具であり
別にカッターナイフと定規でもまっすぐ切れるから出来ることは変わらん

excel開きながら電卓叩く奴も世の中多いように
好きな道具で好きにやればいい
2026/07/27(月) 13:01:03.90ID:7knMc1dl
安全装置がついた裁断機は
安全装置を正しく使っている限り
安全装置がついていない裁断機よりは安全

ただし安全装置によって防げる事故というのは
裁断機の利用によって発生しうる事故の一部分でしかなく
裁断作業に危険が伴うことは避けられない

至極当たり前のことだが
これを理解していないRust開発者がなんと多いことか
2026/07/27(月) 13:07:49.81ID:dac6ESzs
そこから得られる結論は
安全装置がないものを使う人は愚か
Rustを使おう
160sage
垢版 |
2026/07/27(月) 13:09:02.48ID:jzehDHuZ
safe and unsafe
161デフォルトの名無しさん
垢版 |
2026/07/27(月) 13:16:21.16ID:Vsp0IUpf
unsafeは意図的に安全センサーとかを覆い隠したりして
無理矢理動作させる事だね

どうしてもそうしないと出来ないから仕方がなく
だけど、その分危険だから使用者は細心の注意を払うようだと


カーナビの移動時の操作制限を解除してるのとかも
安全のための装置を外すなら使用者がその分安全に注意を払うようなんだよね
2026/07/27(月) 13:21:40.55ID:CWPYRpIU
unsafeは使われない
unsafeを使う場合は稟議書を通したりもしくは全員の合意を取ったりするなどいずれにせよ皆の監視対象になる
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況