公式
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/
Rust part38
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2026/07/24(金) 20:04:25.76ID:24e2kQId2026/07/24(金) 20:04:44.45ID:24e2kQId
2026/07/24(金) 20:06:03.12ID:24e2kQId
ここから複おじの時間かな
2026/07/24(金) 20:07:21.73ID:24e2kQId
978 デフォルトの名無しさん 2026/07/24(金) 19:55:44.17 ID:t7R+hAOc
複おじって荒らしたいマウント取りたいだけで責任は負いたくないタイプだから、どのスレでも980が近づいてくると静かになって、その後けたたましく喚き始めるよな
979 デフォルトの名無しさん 2026/07/24(金) 19:56:54.14 ID:24e2kQId
>978
それな
だから主張が対立してる時に980が近づいてくると、片方がピタッと止まって複オジだとバレることが多い
複おじって荒らしたいマウント取りたいだけで責任は負いたくないタイプだから、どのスレでも980が近づいてくると静かになって、その後けたたましく喚き始めるよな
979 デフォルトの名無しさん 2026/07/24(金) 19:56:54.14 ID:24e2kQId
>978
それな
だから主張が対立してる時に980が近づいてくると、片方がピタッと止まって複オジだとバレることが多い
5デフォルトの名無しさん
2026/07/24(金) 20:09:31.19ID:xViJwJQE ディープコピーの国際的な定義
https://en.wikipedia.org/wiki/Object_copying#Deep_copy
An alternative is a deep copy, meaning that fields are dereferenced: rather than references to objects being copied, new copy of objects are created for any referenced objects, and references to these are placed in B. Later modifications to the contents remain unique to A or B, as the contents are not shared.
もう一つの方法としてディープコピーがあり、これはフィールドを逆参照することを意味します。オブジェクトへの参照をコピーする代わりに、参照対象オブジェクトに対して新しいオブジェクトのコピーが作成され、それらの参照はBに配置されます。その後の内容の変更はAまたはBに固有のものであり、内容は共有されません。
https://en.wikipedia.org/wiki/Object_copying#Deep_copy
An alternative is a deep copy, meaning that fields are dereferenced: rather than references to objects being copied, new copy of objects are created for any referenced objects, and references to these are placed in B. Later modifications to the contents remain unique to A or B, as the contents are not shared.
もう一つの方法としてディープコピーがあり、これはフィールドを逆参照することを意味します。オブジェクトへの参照をコピーする代わりに、参照対象オブジェクトに対して新しいオブジェクトのコピーが作成され、それらの参照はBに配置されます。その後の内容の変更はAまたはBに固有のものであり、内容は共有されません。
2026/07/24(金) 20:10:17.17ID:Xlxk45B5
お、テンプレちょっとだけ変わってる
前スレで英語読めない奴がトンデモ誤読かましたThe Bookの日本語版リンクか
前スレで英語読めない奴がトンデモ誤読かましたThe Bookの日本語版リンクか
2026/07/24(金) 20:11:42.28ID:24e2kQId
2026/07/24(金) 20:13:06.02ID:24e2kQId
それにそもそも、参照がないとディープコピーじゃないと言ってるんじゃなくて、参照をコピーするだけならシャローコピーだと言ってるのが原文なので、やはり複おじは書いてある内容が読めていない
9sage
2026/07/24(金) 20:13:25.55ID:CNZtFYZY 米国防総省DARPA、C言語のコードからRustへの自動変換実現を目指す「TRACTOR」プログラム開始
https://www.publickey1.jp/blog/24/darpacrusttractor.html
>>1
NASAのSpaceWasm
github.com/nasa/spacewasm
宇宙船上でWasmバイナリを解釈・実行することを目的とした、Wasm 1.0仕様のインタープリタ
静的サイトジェネレータ「Astro 7.0」正式リリース、ビルドシステムがVite 8/Rolldownに、Rust製コンパイラ採用で高速化 - Publickey
https://www.publickey1.jp/blog/26/astro_70vite_8rolldownrust.html
AI「Claude」を使って開発ツールの「Bun」の53万行のZigコード全てをRustへ書き換え
https://gigazine.net/news/20260712-bun-zig-rust/
https://www.publickey1.jp/blog/24/darpacrusttractor.html
>>1
NASAのSpaceWasm
github.com/nasa/spacewasm
宇宙船上でWasmバイナリを解釈・実行することを目的とした、Wasm 1.0仕様のインタープリタ
静的サイトジェネレータ「Astro 7.0」正式リリース、ビルドシステムがVite 8/Rolldownに、Rust製コンパイラ採用で高速化 - Publickey
https://www.publickey1.jp/blog/26/astro_70vite_8rolldownrust.html
AI「Claude」を使って開発ツールの「Bun」の53万行のZigコード全てをRustへ書き換え
https://gigazine.net/news/20260712-bun-zig-rust/
2026/07/24(金) 20:14:16.28ID:24e2kQId
ディープコピー(深いコピー)とは - 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
> オブジェクトの ディープコピー とは、コピー先のオブジェクトのプロパティがコピー元のオブジェクトのプロパティと同一の参照(同じ値を指す)で共有しないコピー方法のことです。結果として、コピー元かコピー先のどちらかを変更しても、もう一方オブジェクトにも変更を及ぼしていないことを保証できます。すなわち、コピー元かコピー先に意図せずに予期しない変更が加えられるこはありません。この振る舞いはシャローコピーとは対照的です。シャローコピーでは、コピー元かコピー先のどちらかを変更するともう一方のオブジェクトも変更される可能性があります。
> プロパティがすべてプリミティブ値であるオブジェクトのコピーは、ディープコピーとシャローコピーの両方の定義に当てはまります。しかし、このようなコピーの深さについて話すのはやや無意味です。というのも、このコピーには入れ子プロパティがなく、ディープコピーについては通常、入れ子プロパティを変更するコンテキストで話すからです。
Wikipediaよりもずいぶん信ぴょう性の高い奴が既に貼られてるんだから、Wikipediaの誤読を全力で披露してもメリットないんだけどな
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
> オブジェクトの ディープコピー とは、コピー先のオブジェクトのプロパティがコピー元のオブジェクトのプロパティと同一の参照(同じ値を指す)で共有しないコピー方法のことです。結果として、コピー元かコピー先のどちらかを変更しても、もう一方オブジェクトにも変更を及ぼしていないことを保証できます。すなわち、コピー元かコピー先に意図せずに予期しない変更が加えられるこはありません。この振る舞いはシャローコピーとは対照的です。シャローコピーでは、コピー元かコピー先のどちらかを変更するともう一方のオブジェクトも変更される可能性があります。
> プロパティがすべてプリミティブ値であるオブジェクトのコピーは、ディープコピーとシャローコピーの両方の定義に当てはまります。しかし、このようなコピーの深さについて話すのはやや無意味です。というのも、このコピーには入れ子プロパティがなく、ディープコピーについては通常、入れ子プロパティを変更するコンテキストで話すからです。
Wikipediaよりもずいぶん信ぴょう性の高い奴が既に貼られてるんだから、Wikipediaの誤読を全力で披露してもメリットないんだけどな
11sage
2026/07/24(金) 20:14:29.23ID:f+SVyOsm2026/07/24(金) 20:16:25.12ID:LlXviQUD
MDNによるディープコピーの国際的定義
https://developer.mozilla.org/en-US/docs/Glossary/Deep_copy
A deep copy of an object is a copy whose properties do not share the same references (point to the same underlying values) as those of the source object from which the copy was made. As a result, when you change either the source or the copy, you can be assured you're not causing the other object to change too. That behavior contrasts with the behavior of a shallow copy, in which changes to nested properties in the source or the copy may cause the other object to change too.
オブジェクトのディープコピーとは、コピーが作成された元のオブジェクトのプロパティが同じ参照を共有しないコピーのことです。そのため、ソースやコピーのどちらかを変更しても、他のオブジェクトも変わってしまうことはないと安心できます。この挙動は、ソースやコピーのネストされたプロパティの変更が他のオブジェクトも変わらせるシャローコピーの挙動とは対照的です。
https://developer.mozilla.org/en-US/docs/Glossary/Deep_copy
A deep copy of an object is a copy whose properties do not share the same references (point to the same underlying values) as those of the source object from which the copy was made. As a result, when you change either the source or the copy, you can be assured you're not causing the other object to change too. That behavior contrasts with the behavior of a shallow copy, in which changes to nested properties in the source or the copy may cause the other object to change too.
オブジェクトのディープコピーとは、コピーが作成された元のオブジェクトのプロパティが同じ参照を共有しないコピーのことです。そのため、ソースやコピーのどちらかを変更しても、他のオブジェクトも変わってしまうことはないと安心できます。この挙動は、ソースやコピーのネストされたプロパティの変更が他のオブジェクトも変わらせるシャローコピーの挙動とは対照的です。
2026/07/24(金) 20:18:53.10ID:LlXviQUD
2026/07/24(金) 20:22:41.95ID:1OxC7FN6
Cowのcloneがシャローなのかディープなのか答えが出たら起こして
2026/07/24(金) 20:23:52.27ID:Wgnb45Q4
>>12-13
「国際的定義!(ドヤッ」ってやってるけど、ただ英語版コピーしてるだけでMDNの日本語版は英語版からの翻訳だから一緒のことしか書いてないというのがおもろい
「同じ参照を共有しないコピー」だから「参照を持たない値」は該当するって程度のことがわからないのか
文盲がイキるとこうなるんだな
「国際的定義!(ドヤッ」ってやってるけど、ただ英語版コピーしてるだけでMDNの日本語版は英語版からの翻訳だから一緒のことしか書いてないというのがおもろい
「同じ参照を共有しないコピー」だから「参照を持たない値」は該当するって程度のことがわからないのか
文盲がイキるとこうなるんだな
16デフォルトの名無しさん
2026/07/24(金) 20:25:06.01ID:K88Cv8Wt 参照を持つと二段(以上)になるため二種類のコピーが生じるから区別するための用語
一段目のみコピーがシャローコピー
二段目(以上)もコピーすることがディープコピー
一段目のみコピーがシャローコピー
二段目(以上)もコピーすることがディープコピー
2026/07/24(金) 20:25:25.04ID:Wgnb45Q4
>>10にも
> 同一の参照(同じ値を指す)で共有しないコピー方法のことです
って書いてあんだよな、しっかり
その上で
> すべてプリミティブ値であるオブジェクトのコピーは、ディープコピーとシャローコピーの両方の定義に当てはまります
だから、参照を持つなんて一言も言ってないし、むしろ持たない場合も当てはまると断言してる
> 同一の参照(同じ値を指す)で共有しないコピー方法のことです
って書いてあんだよな、しっかり
その上で
> すべてプリミティブ値であるオブジェクトのコピーは、ディープコピーとシャローコピーの両方の定義に当てはまります
だから、参照を持つなんて一言も言ってないし、むしろ持たない場合も当てはまると断言してる
2026/07/24(金) 20:26:15.14ID:Wgnb45Q4
19デフォルトの名無しさん
2026/07/24(金) 20:26:28.21ID:K88Cv8Wt2026/07/24(金) 20:26:53.48ID:rdpw7v0/
複おじって負けそうになると他の荒らしを呼び込みたいからか熱心に上げ始めるよな
2026/07/24(金) 20:27:11.48ID:rdpw7v0/
2026/07/24(金) 20:29:18.45ID:7VloRDER
> このコピーには入れ子プロパティがなく、ディープコピーについては通常、入れ子プロパティを変更するコンテキストで話すからです
これは明らかに配列や構造体のことであって、参照のことではない
わざわざ参照という言葉を排除して、入れ子プロパティと言い切っている
これは明らかに配列や構造体のことであって、参照のことではない
わざわざ参照という言葉を排除して、入れ子プロパティと言い切っている
2026/07/24(金) 20:32:20.07ID:tCfuinXR
>>12の続き
MDNによるディープコピーの国際的定義
https://developer.mozilla.org/en-US/docs/Glossary/Deep_copy
The copy of an object whose properties all have primitive values fits the definition of both a deep copy and a shallow copy. It is somewhat useless to talk about the depth of such a copy, though, because it has no nested properties and we usually talk about deep copying in the context of mutating nested properties.
すべてのプロパティがプリミティブ値を持つオブジェクトのコピーは、ディープコピーとシャローコピーの両方の定義に当てはまります。しかしそのようなコピーの深さについて語るのは無意味です。なぜなら入れ子状の性質がないからです。通常は入れ子状の性質の文脈でディープコピーについて語ります。
MDNによるディープコピーの国際的定義
https://developer.mozilla.org/en-US/docs/Glossary/Deep_copy
The copy of an object whose properties all have primitive values fits the definition of both a deep copy and a shallow copy. It is somewhat useless to talk about the depth of such a copy, though, because it has no nested properties and we usually talk about deep copying in the context of mutating nested properties.
すべてのプロパティがプリミティブ値を持つオブジェクトのコピーは、ディープコピーとシャローコピーの両方の定義に当てはまります。しかしそのようなコピーの深さについて語るのは無意味です。なぜなら入れ子状の性質がないからです。通常は入れ子状の性質の文脈でディープコピーについて語ります。
25sage
2026/07/24(金) 20:33:44.00ID:mq5FsCip >>14
ディープでしょ🤔
ディープでしょ🤔
2026/07/24(金) 20:34:46.85ID:I7AzWuQz
>>23
英語で書いてあったら何でも国際的定義だと思ってる複オジw
英語で書いてあったら何でも国際的定義だと思ってる複オジw
2026/07/24(金) 20:35:41.91ID:I7AzWuQz
しかも内容は>>10と完全に一致
2026/07/24(金) 20:41:42.94ID:9wp/NKTp
struct Fooがあるとして
fn foo() -> Foo {
...
}
この関数による構造体返しはmoveになるが
①Fooが入れ子状の時
シャローコピーになる
②Fooが入れ子状でない時
シャローでもディープでもあるが
>>23に示されてあるように
敢えてシャローやディープと言わない
どちらにしてもディープコピーと言わない
fn foo() -> Foo {
...
}
この関数による構造体返しはmoveになるが
①Fooが入れ子状の時
シャローコピーになる
②Fooが入れ子状でない時
シャローでもディープでもあるが
>>23に示されてあるように
敢えてシャローやディープと言わない
どちらにしてもディープコピーと言わない
2026/07/24(金) 20:48:28.73ID:9wp/NKTp
関数から返す場合だけでなく
Rustにおけるmoveは全て同様
moveに対してディープコピーと呼ぶことはない
Rustにおけるmoveは全て同様
moveに対してディープコピーと呼ぶことはない
2026/07/24(金) 20:49:08.87ID:iRaInXiA
>>28
1は構造体がスタックにあるかヒープにあるか言っていないのでシャローコピーとは確定できない
前スレで散々言われてたけど反論できない上に認められないから君がスルーしてたやつね
2は構造体なのに入れ子じゃない時って仮定がまずありえない
構造体って何か知らないのかなこいつw
1は構造体がスタックにあるかヒープにあるか言っていないのでシャローコピーとは確定できない
前スレで散々言われてたけど反論できない上に認められないから君がスルーしてたやつね
2は構造体なのに入れ子じゃない時って仮定がまずありえない
構造体って何か知らないのかなこいつw
2026/07/24(金) 20:50:43.71ID:JtKQuH3B
copyの場合は値、つまり実体が複製されることになるためMDNの定義によるとディープコピー
一方でmoveは通常(ここは重要)管理構造体しかコピーしないのでシャローコピーとなる
moveにおいて「通常」と強調したのは、スタック領域に実体が置かれている場合、戻り値に指定するとmoveでも実体のコピーが発生する(仕様上の話。最適化の話はまた別)ため、ディープコピーの条件を満たすため
ディープコピーというのはあくまで、実体を新たに作成して対応するデータを写し取る複製のことだから、スタックがpopされて実体の置き場所を変更する必要が生まれた時は、当然ディープコピーせざるを得ない
実際は先に、受け取る側のスタックに確保しておいてこのアドレスを使わせるという最適化が走るので、仕様上発生するはずのディープコピーは発生しないけど、これは最適化なのでできるパターンとできないパターンがある
一方でmoveは通常(ここは重要)管理構造体しかコピーしないのでシャローコピーとなる
moveにおいて「通常」と強調したのは、スタック領域に実体が置かれている場合、戻り値に指定するとmoveでも実体のコピーが発生する(仕様上の話。最適化の話はまた別)ため、ディープコピーの条件を満たすため
ディープコピーというのはあくまで、実体を新たに作成して対応するデータを写し取る複製のことだから、スタックがpopされて実体の置き場所を変更する必要が生まれた時は、当然ディープコピーせざるを得ない
実際は先に、受け取る側のスタックに確保しておいてこのアドレスを使わせるという最適化が走るので、仕様上発生するはずのディープコピーは発生しないけど、これは最適化なのでできるパターンとできないパターンがある
2026/07/24(金) 20:51:56.92ID:lTU+Eo0O
複おじは一度読み飛ばしたものは二度と振り返れないからコピペしておいてやったぞ
2026/07/24(金) 20:58:17.06ID:9wp/NKTp
2026/07/24(金) 21:00:10.05ID:WVcSNKWA
2026/07/24(金) 21:01:37.34ID:9wp/NKTp
2026/07/24(金) 21:02:09.97ID:B0iC6lo0
>>33 複オジにはわからないらしいが、わざわざプリミティブ値と対比して入れ子プロパティを持つ値について語ってるんだから、構造体や配列は入れ子プロパティを持つ値なんだよな
まあ、複オジは日本語わからなくてトンデモ誤読繰り返してきたから今更だけど
まあ、複オジは日本語わからなくてトンデモ誤読繰り返してきたから今更だけど
2026/07/24(金) 21:03:11.39ID:aP8wMpRV
2026/07/24(金) 21:03:36.97ID:t739HGtC
相変わらずの複おじ誤読芸
2026/07/24(金) 21:05:23.78ID:9wp/NKTp
2026/07/24(金) 21:09:14.37ID:2mIwVUu3
2026/07/24(金) 21:10:26.04ID:DpS8oXRR
な、なんだってー(棒)
真面目な話、ネストしないとか入れ子じゃないとかそんな構造体ないんだよな
メンバのない構造体って何に使うの
真面目な話、ネストしないとか入れ子じゃないとかそんな構造体ないんだよな
メンバのない構造体って何に使うの
42デフォルトの名無しさん
2026/07/24(金) 21:11:13.02ID:rpH54ETT43デフォルトの名無しさん
2026/07/24(金) 21:12:58.36ID:rpH54ETT2026/07/24(金) 21:13:51.34ID:kHPEnV+a
>>42
また不安になったから上げたな、複オジはこういう時荒らしを入れてごまかすのが好きね
あと、英語を読めないのはお前な
全てプリミティブ値であるオブジェクトというのは、オブジェクトがプリミティブ型の値によるということであって、プリミティブ値を複数組み合わせたものの話をしてるわけじゃない
プリミティブ値を複数組み合わせた場合には、入れ子プロパティを持つということになる
また不安になったから上げたな、複オジはこういう時荒らしを入れてごまかすのが好きね
あと、英語を読めないのはお前な
全てプリミティブ値であるオブジェクトというのは、オブジェクトがプリミティブ型の値によるということであって、プリミティブ値を複数組み合わせたものの話をしてるわけじゃない
プリミティブ値を複数組み合わせた場合には、入れ子プロパティを持つということになる
2026/07/24(金) 21:15:07.72ID:I/0Y9kPO
2026/07/24(金) 21:16:47.74ID:2eRGQl9j
複おじって相手を言い負かすことが目的だから主張が180°変わるんだよな
2026/07/24(金) 21:18:41.32ID:2eRGQl9j
「ディープコピーはプリミティブ値じゃないメンバを含む構造体をコピーすること」「ディープコピーは参照を含むものの本体をコピーすること」「ディープコピーはヒープ領域にある値をコピーすること」
全部一致してない
全部一致してない
2026/07/24(金) 21:19:25.98ID:WKAMhSVT
複オジにとっては自分の言ってることが正しいかどうかなんてどうでもよくて、ただ荒らしたいだけだから
2026/07/24(金) 21:21:02.60ID:YCkq/OUB
>>43
実は文章の中から都合のいい単語を抜き出して組み合わせると元の文章と違う意味になるんですよ
実は文章の中から都合のいい単語を抜き出して組み合わせると元の文章と違う意味になるんですよ
2026/07/24(金) 21:25:28.82ID:Yv0qy+ya
流石にプリミティブ値のメンバだけで構成されていたらどれだけ大きくても絶対にディープコピーにならないというのは意味不明すぎて笑う
51デフォルトの名無しさん
2026/07/24(金) 21:25:40.62ID:rpH54ETT52デフォルトの名無しさん
2026/07/24(金) 21:26:33.68ID:c1YiTQq7 >>46
最近はクローン複おじが現れてそれが起きても話が流れないから永続戦争状態になってて面白い
最近はクローン複おじが現れてそれが起きても話が流れないから永続戦争状態になってて面白い
53デフォルトの名無しさん
2026/07/24(金) 21:26:42.26ID:rpH54ETT >>50
じゃあサイズいくつから突然ディープコピーになると主張してるの?
じゃあサイズいくつから突然ディープコピーになると主張してるの?
2026/07/24(金) 21:30:32.79ID:/w/RcGUU
2026/07/24(金) 21:36:40.67ID:HNCV0mwh
2026/07/24(金) 21:41:58.76ID:vZeGyDIK
>>54
それは間違ってるんじゃない
let x = X(12, 34);
let y = x;
これはディープコピーではないよ
この定義からシャローコピー
Shallow copies are simple and typically cheap, as they can usually be implemented by simply copying the bits exactly.
それは間違ってるんじゃない
let x = X(12, 34);
let y = x;
これはディープコピーではないよ
この定義からシャローコピー
Shallow copies are simple and typically cheap, as they can usually be implemented by simply copying the bits exactly.
2026/07/24(金) 21:57:12.06ID:jneIAs+H
そりゃムーブしただけだからな
2026/07/24(金) 22:04:31.36ID:vZeGyDIK
>>57
ムーブしただけなのにディープコピーと言い張る人が前スレにいた
671 デフォルトの名無しさん sage 2026/07/21(火) 16:03:56.55 ID:8y3GD3Tf
スタック領域に大きなデータを置くと関数の壁を跨ぐ度にディープコピーになる
ムーブしただけなのにディープコピーと言い張る人が前スレにいた
671 デフォルトの名無しさん sage 2026/07/21(火) 16:03:56.55 ID:8y3GD3Tf
スタック領域に大きなデータを置くと関数の壁を跨ぐ度にディープコピーになる
59デフォルトの名無しさん
2026/07/24(金) 22:16:33.60ID:rpH54ETT ムーブはディープコピーにならない
入れ子先をコピーしないため
入れ子先をコピーしないため
2026/07/24(金) 22:47:24.20ID:vZeGyDIK
前スレ671さんが勘違いした理由はおそらく
オブジェクトを値として直接扱えずに常に参照で扱う他の言語の感覚だったからじゃないかな
Rustはオブジェクトをそのまま値として変数に入れたりムーブできる
だからオブジェクトの中に参照を持たない限りディープコピーにならない
もちろんRustでも参照を変数に持つことで以下述べる状況にもできる
一方でオブジェクトを常に参照で扱う言語は変数に格納する時にそのオブジェクトへの参照を格納する
この種の言語だと変数に格納されてる参照をコピーするだけならシャローコピーだけど
参照が指してるオブジェクトをコピーするとディープコピーになる
オブジェクトを値として直接扱えずに常に参照で扱う他の言語の感覚だったからじゃないかな
Rustはオブジェクトをそのまま値として変数に入れたりムーブできる
だからオブジェクトの中に参照を持たない限りディープコピーにならない
もちろんRustでも参照を変数に持つことで以下述べる状況にもできる
一方でオブジェクトを常に参照で扱う言語は変数に格納する時にそのオブジェクトへの参照を格納する
この種の言語だと変数に格納されてる参照をコピーするだけならシャローコピーだけど
参照が指してるオブジェクトをコピーするとディープコピーになる
2026/07/24(金) 23:53:14.86ID:/LVEjW8F
ディープコピーを勘違いしていて散々馬鹿にされたあの複おじがディープコピーを勘違いしている複おじ二世を諭す側になっているというのがなんとも感慨深いな
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は発生しないため例として不適切であることになる
そのため、前スレにおける議論よりもずいぶん低レベルで、とにかく相手が言っていることを間違っていると言えれば満足というものに変わってしまっている
間違いがあるな
ムーブ = ディープコピーだなんて言ってる奴はいない
その人はずっとスタックが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
65デフォルトの名無しさん
2026/07/25(土) 00:33:24.06ID:47WIMuh32026/07/25(土) 00:34:11.72ID:bstVFDuM
2026/07/25(土) 00:35:46.32ID:eZT8/Ty+
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
> オブジェクトの ディープコピー とは、コピー先のオブジェクトのプロパティがコピー元のオブジェクトのプロパティと同一の参照(同じ値を指す)で共有しないコピー方法のことです。結果として、コピー元かコピー先のどちらかを変更しても、もう一方オブジェクトにも変更を及ぼしていないことを保証できます。すなわち、コピー元かコピー先に意図せずに予期しない変更が加えられるこはありません。この振る舞いはシャローコピーとは対照的です。シャローコピーでは、コピー元かコピー先のどちらかを変更するともう一方のオブジェクトも変更される可能性があります。
> プロパティがすべてプリミティブ値であるオブジェクトのコピーは、ディープコピーとシャローコピーの両方の定義に当てはまります。しかし、このようなコピーの深さについて話すのはやや無意味です。というのも、このコピーには入れ子プロパティがなく、ディープコピーについては通常、入れ子プロパティを変更するコンテキストで話すからです。
ディープコピー(深いコピー)とは - 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
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前最適化を行うことで、それが変わるかどうかはわかりません。
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
2026/07/25(土) 00:42:53.41ID:m5hU/HdI
>>70
それはディープコピーとシャローコピーの違いと一切の関係がない
それはディープコピーとシャローコピーの違いと一切の関係がない
2026/07/25(土) 00:44:31.56ID:m5hU/HdI
2026/07/25(土) 00:45:27.39ID:YZc0yK18
2026/07/25(土) 00:47:09.32ID:m5hU/HdI
2026/07/25(土) 00:47:38.39ID:lWzgIol7
>>73
まだRVOがディープコピーしてると思ってるの日本語読解力が0どころかマイナスだろ
ディープコピーを防ぐための機能がRVOじゃマヌケ
値をレジスタ返しできないなんてことは関係ない
そもそもレジスタで返されたところでメモリに書き込む必要はあるんだから、レジスタで返せたらすっきり終わりだと思ってる時点で頭が回っていない
というかこの複おじの「レジスタを魔法のストレージだと思っている」現象何なんだ
まだRVOがディープコピーしてると思ってるの日本語読解力が0どころかマイナスだろ
ディープコピーを防ぐための機能がRVOじゃマヌケ
値をレジスタ返しできないなんてことは関係ない
そもそもレジスタで返されたところでメモリに書き込む必要はあるんだから、レジスタで返せたらすっきり終わりだと思ってる時点で頭が回っていない
というかこの複おじの「レジスタを魔法のストレージだと思っている」現象何なんだ
2026/07/25(土) 00:48:38.59ID:v9E5M8Mr
2026/07/25(土) 00:49:49.12ID:EHXKadgF
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
しかし、スタックが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の著者が勘違いをしているのか君が勘違いをしているのかどっちだろうね〜?
Rustは自動的にディープコピーを作ることは決してない、という設計選択をしている
The Bookの著者が勘違いをしているのか君が勘違いをしているのかどっちだろうね〜?
2026/07/25(土) 00:55:33.08ID:fqYQyOjc
2026/07/25(土) 00:55:34.81ID:GrgDaK5Z
そこは最適化の有無と関係ない
ムーブは最適化されても最適化されなくてもシャローコピー
ムーブは最適化されても最適化されなくてもシャローコピー
2026/07/25(土) 00:57:20.17ID:BPvLmugh
>>82
そうだとすれば、スタックに置かれたデータはRVOがないとムーブで戻り値として返却できないことになるな
あるかないかわからない最適化がないと返却できない、そんな言語仕様だと君は言いたいのかい?
そうだとすれば、スタックに置かれたデータはRVOがないとムーブで戻り値として返却できないことになるな
あるかないかわからない最適化がないと返却できない、そんな言語仕様だと君は言いたいのかい?
2026/07/25(土) 00:57:25.34ID:m5hU/HdI
2026/07/25(土) 00:59:12.53ID:GrgDaK5Z
2026/07/25(土) 00:59:42.58ID:BPvLmugh
2026/07/25(土) 01:00:42.64ID:m5hU/HdI
2026/07/25(土) 01:00:44.95ID:0WqDWpvy
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ではビットコピーという変わった言葉が使われることがあるらしい、複オジ情報だから怪しいが
しかし、スタックが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
2026/07/25(土) 01:02:57.64ID:BPvLmugh
2026/07/25(土) 01:03:59.21ID:IFke0mwN
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
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
※複オジ定義でディープコピーじゃないということで延々そこにばかり嚙みついて議論を回避しようとするので、複オジ定義の言葉に書き換えてあげました
しかし、スタックが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
お前がなー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
100デフォルトの名無しさん
2026/07/25(土) 01:09:11.69ID:yHwe+V9G >>96で複オジ定義準拠になったからこれで本題に入れるなw
101デフォルトの名無しさん
2026/07/25(土) 01:10:30.05ID:GrgDaK5Z なぜかMDNのJavaScriptのオブジェクトについてのディープコピーの話を見てるから誤解してるんだろうな
まず重要なことはJavaScriptのオブジェクトは値そのまま変数などへ格納することができない
オブジェクトの値を指す参照が変数はプロパティに格納される
だから深さが一つ異なる
まず重要なことはJavaScriptのオブジェクトは値そのまま変数などへ格納することができない
オブジェクトの値を指す参照が変数はプロパティに格納される
だから深さが一つ異なる
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【野球】ナ リーグ優勝決定戦 ドジャース泥沼3連敗…悪夢の3試合連続逆転負け 突破率 2・4% 「6番」大谷翔平 2打数1安打 [阿弥陀ヶ峰★]
- 【声優】遊佐浩二(58)&根本京里(29)結婚を発表 29歳差 [Ailuropoda melanoleuca★]
- デンソー期間工、3年間の軽作業で1460万円を貯めるが、1460万円を手にして気持ち揺れる [お断り★]
- 横浜・織田翔希が米球界挑戦表明「覚悟を決めて挑戦していきたい」ドラフト1位確実もNPB経ず米大学も視野 超異例の進路を決断 [征夷大将軍★]
- 武部新氏を農林水産大臣に起用へ 高市総理が意向固める 辞任 [少考さん★]
- 【東京】都が23区内に小規模火葬場の新設を検討 料金高騰や需給ひっ迫を受け [ぐれ★]
- 【画像】ネトウヨ、簗和生更迭で阿鼻叫喚WWWWWWWWWWW [841411289]
- 【高市悲報】日経マイナス3000wwwwwwwwwwwwwwwwwwwwwwww [773738893]
- 【悲報】「10時10分前」👈9:50派と10:05派で大論争にwwwwwwwwwwwwwwww [183671488]
- 【悲報】「時代はブルーカラー!!」信じて転職した男性、絶望 [237216734]
- 【悲報】斎藤元彦陣営のネット広報担当会社が投稿したnoteで騒然★1195 [216774352]
- 【画像】「あけろ!」や顔文字 文京区の督促状が物議 [567637504]