公式
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/
※Rustを学ぶ際に犯しがちな12の過ち
https://dystroy.org/blog/how-not-to-learn-rust
※Rustのasyncについて知りたければ「async-book」は必読
https://rust-lang.github.io/async-book/
※次スレは原則>>980が立てること
前スレ
Rust part36
https://mevius.5ch.io/test/read.cgi/tech/1779974768/
ワッチョイスレ
プログラミング言語 Rust 4【ワッチョイ】
https://mevius.5ch.io/test/read.cgi/tech/1514107621/
Rust part37
レス数が900を超えています。1000を超えると表示できなくなるよ。
1デフォルトの名無しさん
2026/07/17(金) 19:12:31.24ID:yl11920u809デフォルトの名無しさん
2026/07/22(水) 00:18:33.47ID:yr5TLezq >>806
ヒープ領域を持つ任意の型でclone()できるとそれがRustにおけるディープコピー
ヒープ領域を持つ任意の型でclone()できるとそれがRustにおけるディープコピー
810デフォルトの名無しさん
2026/07/22(水) 00:19:37.59ID:oj722HcK そもそもディープコピーはヒープだけとかどこのアホが言い出したんだろうな
Rustでは巨大なデータをスタックに置く文化がほとんどないから普段スタックでディープコピーを問題にすることはないけど、巨大なデータをスタックに置けばディープコピーは普通に問題になる
CやC++ではヒープの確保が重いのは知られてるけど、意外とスタック上の構造体のディープコピーが安易に使われてる、と定期的に話題にもなるし
Rustでは巨大なデータをスタックに置く文化がほとんどないから普段スタックでディープコピーを問題にすることはないけど、巨大なデータをスタックに置けばディープコピーは普通に問題になる
CやC++ではヒープの確保が重いのは知られてるけど、意外とスタック上の構造体のディープコピーが安易に使われてる、と定期的に話題にもなるし
811デフォルトの名無しさん
2026/07/22(水) 00:20:21.35ID:oj722HcK >>809
そんな定義はお前の頭の中にしかないけど勝手にそう思ってればw
そんな定義はお前の頭の中にしかないけど勝手にそう思ってればw
812デフォルトの名無しさん
2026/07/22(水) 00:21:21.41ID:yr5TLezq813デフォルトの名無しさん
2026/07/22(水) 00:22:43.54ID:yLaC1azO そもそもスタック領域の値を戻す時にコピーは発生し得ないと力説してた奴だからなあ
スタック上の構造体のディープコピーを安易に使う側なんだろ
スタック上の構造体のディープコピーを安易に使う側なんだろ
814デフォルトの名無しさん
2026/07/22(水) 00:23:15.66ID:4HblP/Gz >>812
そうだが……
そうだが……
815デフォルトの名無しさん
2026/07/22(水) 00:23:55.18ID:L1sn8Brj なんでこのスレの単発異様に殺気立ってるの?
816デフォルトの名無しさん
2026/07/22(水) 00:24:20.54ID:4HblP/Gz Deep copy (ディープコピー) - 用語集 | MDN
https://developer.mozilla.org/ja/docs/Glossary/Deep_copy
> プロパティがすべてプリミティブ値であるオブジェクトのコピーは、ディープコピーとシャローコピーの両方の定義に当てはまります。しかし、このようなコピーの深さについて話すのはやや無意味です。というのも、このコピーには入れ子プロパティがなく、ディープコピーについては通常、入れ子プロパティを変更するコンテキストで話すからです。
はっきり書いてますね
https://developer.mozilla.org/ja/docs/Glossary/Deep_copy
> プロパティがすべてプリミティブ値であるオブジェクトのコピーは、ディープコピーとシャローコピーの両方の定義に当てはまります。しかし、このようなコピーの深さについて話すのはやや無意味です。というのも、このコピーには入れ子プロパティがなく、ディープコピーについては通常、入れ子プロパティを変更するコンテキストで話すからです。
はっきり書いてますね
817デフォルトの名無しさん
2026/07/22(水) 00:25:03.62ID:4HblP/Gz >>815
そこの無茶苦茶な主張してる奴がもうこのスレで300以上は確実に書きこんでる荒らしだからだぞ
そこの無茶苦茶な主張してる奴がもうこのスレで300以上は確実に書きこんでる荒らしだからだぞ
818デフォルトの名無しさん
2026/07/22(水) 00:25:16.50ID:xdLXSwNC [i32; 2]がディープコピーではないのはわかるけど
[i32; 20]だとディープコピーなのかな?
サイズで変わるのはやっぱなんか変だよね
サイズが大きいとディープコピーは変
[i32; 20]だとディープコピーなのかな?
サイズで変わるのはやっぱなんか変だよね
サイズが大きいとディープコピーは変
819デフォルトの名無しさん
2026/07/22(水) 00:25:38.81ID:L1sn8Brj >>817
なんでそれで単発が殺気立つの?
なんでそれで単発が殺気立つの?
820デフォルトの名無しさん
2026/07/22(水) 00:26:17.20ID:LylUcC8d821デフォルトの名無しさん
2026/07/22(水) 00:26:54.66ID:PntR9YqK822デフォルトの名無しさん
2026/07/22(水) 00:28:20.94ID:xdLXSwNC i32とラッパー型X(i32)はどうなの
derive Copyしてもラッパー型はディープコピー??
derive Copyしてもラッパー型はディープコピー??
823デフォルトの名無しさん
2026/07/22(水) 00:28:46.52ID:PntR9YqK >>818
Deep copy (ディープコピー) - 用語集 | MDN
https://developer.mozilla.org/ja/docs/Glossary/Deep_copy
> プロパティがすべてプリミティブ値であるオブジェクトのコピーは、ディープコピーとシャローコピーの両方の定義に当てはまります。しかし、このようなコピーの深さについて話すのはやや無意味です。というのも、このコピーには入れ子プロパティがなく、ディープコピーについては通常、入れ子プロパティを変更するコンテキストで話すからです。
ここにも書いてるけど、どれだけ小さくてもデータごと丸ごとコピーして実体を複製する行いはディープコピー
ただ、それが問題になるのは大きなデータの時だけですよって話だ
Deep copy (ディープコピー) - 用語集 | MDN
https://developer.mozilla.org/ja/docs/Glossary/Deep_copy
> プロパティがすべてプリミティブ値であるオブジェクトのコピーは、ディープコピーとシャローコピーの両方の定義に当てはまります。しかし、このようなコピーの深さについて話すのはやや無意味です。というのも、このコピーには入れ子プロパティがなく、ディープコピーについては通常、入れ子プロパティを変更するコンテキストで話すからです。
ここにも書いてるけど、どれだけ小さくてもデータごと丸ごとコピーして実体を複製する行いはディープコピー
ただ、それが問題になるのは大きなデータの時だけですよって話だ
824デフォルトの名無しさん
2026/07/22(水) 00:29:33.48ID:PntR9YqK825デフォルトの名無しさん
2026/07/22(水) 00:31:06.33ID:xdLXSwNC スタックにあるi32をコピーするとディープコピーはちょっと違和感あるかな~
826デフォルトの名無しさん
2026/07/22(水) 00:31:45.29ID:PntR9YqK827sage
2026/07/22(水) 00:32:26.03ID:cmrJLzza ###まとめ
「ヒープ=ディープコピー、スタック=シャローコピー(または単なる代入)」という誤解は、「スタックにある変数はプリミティブか、ポインタサイズのものばかり」という暗黙の前提(あるいは特定の高水準言語の仕様)に囚われているからこそ生まれるものですね。メモリがスタックであろうとヒープであろうと、実体を伴う構造の複製を行えば、それは立派なディープコピーであり、コストの議論の対象になります。
「ヒープ=ディープコピー、スタック=シャローコピー(または単なる代入)」という誤解は、「スタックにある変数はプリミティブか、ポインタサイズのものばかり」という暗黙の前提(あるいは特定の高水準言語の仕様)に囚われているからこそ生まれるものですね。メモリがスタックであろうとヒープであろうと、実体を伴う構造の複製を行えば、それは立派なディープコピーであり、コストの議論の対象になります。
828デフォルトの名無しさん
2026/07/22(水) 00:32:43.32ID:xdLXSwNC ひっかけなぞなぞみたい
829デフォルトの名無しさん
2026/07/22(水) 00:32:52.81ID:L1sn8Brj #[derive(Clone, Copy)]
struct X<'a, T>(&'a T);
がスタックにあったとして、スタックにあるものをコピーすればディープコピーなんだ
へえ〜
struct X<'a, T>(&'a T);
がスタックにあったとして、スタックにあるものをコピーすればディープコピーなんだ
へえ〜
830デフォルトの名無しさん
2026/07/22(水) 00:33:02.34ID:PntR9YqK その上で大きなデータのディープコピーが問題になるのは、単純にそれを全部移し替えないといけないから遅いしメモリの無駄って話だね
RustはC/C++同様低レイヤの言語だから、一般にプログラマはそのあたりのことを考えることが多い
RustはC/C++同様低レイヤの言語だから、一般にプログラマはそのあたりのことを考えることが多い
831デフォルトの名無しさん
2026/07/22(水) 00:35:11.20ID:xdLXSwNC >>829
たしかにディープコピーとは言い難いかも
たしかにディープコピーとは言い難いかも
832デフォルトの名無しさん
2026/07/22(水) 00:35:22.70ID:d6JHHVBS スタック領域においてしまうと、戻り値でムーブする時にもこのディープコピーが発生してしまう(単純なケースであればコンパイラによる最適化で解消可能)
なぜなら、関数やスコープは開始時にスタックを積み上げて終了時にスタックを戻すからで、この中から外にムーブさせるとなるとアドレスを渡して済む問題ではなくなってしまう
これはスタックで実装されている場合に限った話だけど、基本的にはスタックで実装されているからね
なぜなら、関数やスコープは開始時にスタックを積み上げて終了時にスタックを戻すからで、この中から外にムーブさせるとなるとアドレスを渡して済む問題ではなくなってしまう
これはスタックで実装されている場合に限った話だけど、基本的にはスタックで実装されているからね
833デフォルトの名無しさん
2026/07/22(水) 00:36:20.23ID:d6JHHVBS834デフォルトの名無しさん
2026/07/22(水) 00:36:59.37ID:xdLXSwNC >>829
イメージとしてはTをコピーするとディープコピーかな
イメージとしてはTをコピーするとディープコピーかな
835デフォルトの名無しさん
2026/07/22(水) 00:37:32.30ID:d6JHHVBS >>832の続き
これに対して、ヒープ領域においておけばスタックに置かれているのはその領域の管理構造体だけなので、ムーブする時は無条件にこれだけコピーすればいい
これはシャローコピーではあるけどディープコピーではない
これに対して、ヒープ領域においておけばスタックに置かれているのはその領域の管理構造体だけなので、ムーブする時は無条件にこれだけコピーすればいい
これはシャローコピーではあるけどディープコピーではない
836デフォルトの名無しさん
2026/07/22(水) 00:38:56.38ID:d6JHHVBS なので同じ大きなデータをスタックとヒープに置いた時、ムーブで戻り値として返す場合はヒープに置く方がコピーするものが少なく、動作が高速になる
837デフォルトの名無しさん
2026/07/22(水) 00:42:33.61ID:blalnmjp838デフォルトの名無しさん
2026/07/22(水) 00:43:45.85ID:blalnmjp839デフォルトの名無しさん
2026/07/22(水) 00:48:25.38ID:iwo7j10o >>823-824, >>826-827,
>>830, >>832,
あとは>>835-836あたりに散ってしまっているからわかりにくいけど、要するに
* ディープコピーはデータ自体を含めて丸ごとコピーして実体を複製する行い
* どれだけ小さくてもスタック領域でも関係なくディープコピーになる
* ただし大きいデータの場合しか問題にはならないので、小さいデータに使うことはない
* 大きいデータの場合、借用(参照)やヒープ領域上のデータのムーブ、スタックを積み上げる時(スコープに入る時)のスタック領域上のデータのムーブは速いが、スタック領域上のデータの.clone()やスタックを戻す時のスタック領域上のデータのムーブはディープコピーになるので遅く(最適化で改善される場合アリ)、ヒープ領域上のデータの.clone()はシステムコールがあるのでそれよりはるかに遅い
こんな感じか
>>830, >>832,
あとは>>835-836あたりに散ってしまっているからわかりにくいけど、要するに
* ディープコピーはデータ自体を含めて丸ごとコピーして実体を複製する行い
* どれだけ小さくてもスタック領域でも関係なくディープコピーになる
* ただし大きいデータの場合しか問題にはならないので、小さいデータに使うことはない
* 大きいデータの場合、借用(参照)やヒープ領域上のデータのムーブ、スタックを積み上げる時(スコープに入る時)のスタック領域上のデータのムーブは速いが、スタック領域上のデータの.clone()やスタックを戻す時のスタック領域上のデータのムーブはディープコピーになるので遅く(最適化で改善される場合アリ)、ヒープ領域上のデータの.clone()はシステムコールがあるのでそれよりはるかに遅い
こんな感じか
840デフォルトの名無しさん
2026/07/22(水) 00:48:38.10ID:blalnmjp つまり、実体をヒープ領域に置いたほうが優れている、は間違いというか錯覚
841デフォルトの名無しさん
2026/07/22(水) 00:49:52.70ID:MXbcRWOz842デフォルトの名無しさん
2026/07/22(水) 00:50:38.19ID:OQXWNcQK843デフォルトの名無しさん
2026/07/22(水) 00:51:42.02ID:bjO+R+mh844デフォルトの名無しさん
2026/07/22(水) 00:52:32.07ID:blalnmjp845デフォルトの名無しさん
2026/07/22(水) 00:55:39.54ID:bjO+R+mh スタックはデータを後入れ先出しで保持するデータ構造で、スタック領域では通常これをスコープ(関数を含む)に入る時にプッシュし、スコープを抜ける時にポップする
つまりスコープに入る時にそのスタック領域で必要なメモリを確保して、スコープを抜ける時にそれをそのまま巻き戻すことで解放を行っている
なので、内側のスコープで生成したデータを外側のスコープに与える時にはコピーしなくてはならなくなる
つまりスコープに入る時にそのスタック領域で必要なメモリを確保して、スコープを抜ける時にそれをそのまま巻き戻すことで解放を行っている
なので、内側のスコープで生成したデータを外側のスコープに与える時にはコピーしなくてはならなくなる
846デフォルトの名無しさん
2026/07/22(水) 00:58:01.43ID:blalnmjp >>845
そこは静的に判っているからReturn Value Optimizationできそう
そこは静的に判っているからReturn Value Optimizationできそう
847デフォルトの名無しさん
2026/07/22(水) 00:59:07.03ID:DeO+WrPt >>844
まあ単純に戻す場合は最適化できるだろうけど、複雑なデータのやり取りがある場合は必ずしも既存のパターンだけで最適化できないことはある
最初からヒープ領域にデータを置いて管理構造体だけを移すムーブにすると、確実にシャロ―コピーとなることが保障されるので最適化頼みの賭けにならずに済む
まあ単純に戻す場合は最適化できるだろうけど、複雑なデータのやり取りがある場合は必ずしも既存のパターンだけで最適化できないことはある
最初からヒープ領域にデータを置いて管理構造体だけを移すムーブにすると、確実にシャロ―コピーとなることが保障されるので最適化頼みの賭けにならずに済む
848デフォルトの名無しさん
2026/07/22(水) 01:06:02.68ID:L1sn8Brj スタック巻き戻しってそういうことじゃないです
849デフォルトの名無しさん
2026/07/22(水) 01:08:33.80ID:iL1PKXjH また根拠のない否定か
もうみんな飽きてるよそれ
もうみんな飽きてるよそれ
850デフォルトの名無しさん
2026/07/22(水) 01:10:07.59ID:blalnmjp >>847
そこの最適化はRustなら大丈夫だと思う
戻値が16バイトまでならレジスタ2つで返すけど
それを超えると関数呼び出し元のスタックフレームに戻値の領域を確保してそのアドレスをレジスタリストの第一引数として渡すABIになってる
呼ばれた下の関数はその渡されたアドレスに戻値を書き込むRust ABI
そこの最適化はRustなら大丈夫だと思う
戻値が16バイトまでならレジスタ2つで返すけど
それを超えると関数呼び出し元のスタックフレームに戻値の領域を確保してそのアドレスをレジスタリストの第一引数として渡すABIになってる
呼ばれた下の関数はその渡されたアドレスに戻値を書き込むRust ABI
851デフォルトの名無しさん
2026/07/22(水) 01:15:29.52ID:o2cM4ZXa 必ずそうなるってわけではないからねえ
それだと不都合なこともあり得るし、アーキテクチャによっても最終的には変わってくるだろう
それだと不都合なこともあり得るし、アーキテクチャによっても最終的には変わってくるだろう
852デフォルトの名無しさん
2026/07/22(水) 01:19:39.84ID:blalnmjp853デフォルトの名無しさん
2026/07/22(水) 01:24:30.85ID:oB+DESr1 >>852
ライブラリは無駄があっても互換性優先だけど、全関数がそうかは別の問題
ライブラリは無駄があっても互換性優先だけど、全関数がそうかは別の問題
854デフォルトの名無しさん
2026/07/22(水) 01:27:55.98ID:blalnmjp >>853
動的リンクライブラリ以外の関数は静的にリンクだからもっと安心だと思うよ
動的リンクライブラリ以外の関数は静的にリンクだからもっと安心だと思うよ
855デフォルトの名無しさん
2026/07/22(水) 01:38:42.52ID:hheEkfdk >>854
また動くかどうかの話になってるけど、そんな話はしてないという
また動くかどうかの話になってるけど、そんな話はしてないという
856デフォルトの名無しさん
2026/07/22(水) 04:57:35.83ID:XaGJSnmH こんなにスレ伸ばしたって読まねぇぞ
857デフォルトの名無しさん
2026/07/22(水) 05:12:55.66ID:H8x9U9EL deep copyとshallow copyは2種類の異なるcopy方法が考えられる時にのみ
その使い分けに用いられる用語
1種類しかない時に用いたら失格
その使い分けに用いられる用語
1種類しかない時に用いたら失格
858デフォルトの名無しさん
2026/07/22(水) 07:28:52.11ID:bm8B9/Z+ 夏休みは海とか山とか友達なんかと遊びに行きなよ
人付き合いはできて困る事はないぞ多分
人付き合いはできて困る事はないぞ多分
859デフォルトの名無しさん
2026/07/22(水) 10:18:10.68ID:qLhff68A 仮に111レスしてるおじが本人の言う通り自演してないとしても
もう一人の無限湧きの単発のおじが自演ってだけだから、結局二人でずっとまったく成立してない会話してるんだよね
OpenClawでやってるにしろ人力にしろ、本当に海か山でも行ったほうがいいと思う
もう一人の無限湧きの単発のおじが自演ってだけだから、結局二人でずっとまったく成立してない会話してるんだよね
OpenClawでやってるにしろ人力にしろ、本当に海か山でも行ったほうがいいと思う
860デフォルトの名無しさん
2026/07/22(水) 12:08:53.98ID:d19KA9Tj 音大出身の女性がITディレクターやってたらしいんだが、あり得るの?
年収は600万
https://lavender.5ch.io/test/read.cgi/karaok/1784604629/625
年収は600万
https://lavender.5ch.io/test/read.cgi/karaok/1784604629/625
861デフォルトの名無しさん
2026/07/22(水) 12:10:09.72ID:d19KA9Tj 625 選曲してください sage 2026/07/22(水) 00:11:47.96 ID:5DADgvY5
>>608
その会社は入社1年目
そのままクライアント会社(上場)に新設されたWEB事業部に出向→移籍、社長プレゼン
我ながら特殊な経験をしてると思うよ
まだWEB専門卒の人とかも少ないし素人が現場で仕事を覚えていける時代だったから、今ではあり得ないやろね
紙媒体からWEBに移行した人も多くて、得体の知れない業界人がウヨウヨいた
>>608
その会社は入社1年目
そのままクライアント会社(上場)に新設されたWEB事業部に出向→移籍、社長プレゼン
我ながら特殊な経験をしてると思うよ
まだWEB専門卒の人とかも少ないし素人が現場で仕事を覚えていける時代だったから、今ではあり得ないやろね
紙媒体からWEBに移行した人も多くて、得体の知れない業界人がウヨウヨいた
862デフォルトの名無しさん
2026/07/22(水) 13:14:32.22ID:5C0qO59L 普通によくある構造体struct Xxx { ... }を生成する関数
impl Xxx {
fn new( ... ) -> Self {
...
}
}
fn foo {
let x = Xxx::new( ... );
}
これはもちろんこの関数new()の中で生成したXxx型の値が呼び出し元の関数foo()にある変数xへムーブされる
Rustの抽象概念としてはここまで
ムーブが現実にはどのように実現されているかを知ることなくRustのプログラミングができる
impl Xxx {
fn new( ... ) -> Self {
...
}
}
fn foo {
let x = Xxx::new( ... );
}
これはもちろんこの関数new()の中で生成したXxx型の値が呼び出し元の関数foo()にある変数xへムーブされる
Rustの抽象概念としてはここまで
ムーブが現実にはどのように実現されているかを知ることなくRustのプログラミングができる
863デフォルトの名無しさん
2026/07/22(水) 13:18:55.70ID:5C0qO59L Rustの抽象概念ムーブがどのように機械語で実装されるのか?
それがRustの高速性を決めている
普通によくあるx86-64bitのLinux環境で関数が値を返すときのムーブの実装について見てみよう
64bit二つ分までのサイズのデータを関数が返す時は64bitレジスタraxとrdxに入れて返す
しかし>>862の構造体Xxxのサイズがその128bit (=16byte)を超えていてレジスタ返しができない場合はどうなるだろう?
Rustでは関数f()でのデータ受け取り変数xのアドレスを隠れた引数として関数new()へレジスタ渡しする
new()ではそのアドレスへ直接データを書き込んでXxx構造体を作っていく
関数が多段で孫関数からXxxを返す場合でも子関数から孫関数へ隠れた引数としてアドレスが同様に渡される
孫関数は祖父関数のスタックフレームへ直接データを書き込むことになる
ムーブは抽象概念に過ぎないため実際にデータを移動(コピー)させる必要はない
最初から最終移動先へデータを書き込むことでRustは無駄なコピーを排除している
それがRustの高速性を決めている
普通によくあるx86-64bitのLinux環境で関数が値を返すときのムーブの実装について見てみよう
64bit二つ分までのサイズのデータを関数が返す時は64bitレジスタraxとrdxに入れて返す
しかし>>862の構造体Xxxのサイズがその128bit (=16byte)を超えていてレジスタ返しができない場合はどうなるだろう?
Rustでは関数f()でのデータ受け取り変数xのアドレスを隠れた引数として関数new()へレジスタ渡しする
new()ではそのアドレスへ直接データを書き込んでXxx構造体を作っていく
関数が多段で孫関数からXxxを返す場合でも子関数から孫関数へ隠れた引数としてアドレスが同様に渡される
孫関数は祖父関数のスタックフレームへ直接データを書き込むことになる
ムーブは抽象概念に過ぎないため実際にデータを移動(コピー)させる必要はない
最初から最終移動先へデータを書き込むことでRustは無駄なコピーを排除している
864デフォルトの名無しさん
2026/07/22(水) 13:20:20.48ID:IHEroBD/ 仮に額面通りmoveするんだったらコピーが入るから、効率重視のコードなら回避しないといけないでしょ
つまり最適化を理解する必要があるわけで、
> ムーブが現実にはどのように実現されているかを知ることなくRustのプログラミングができる
は誤りということになる
つまり最適化を理解する必要があるわけで、
> ムーブが現実にはどのように実現されているかを知ることなくRustのプログラミングができる
は誤りということになる
865デフォルトの名無しさん
2026/07/22(水) 14:07:07.48ID:P03AutQj ムーブという魔法でRustは上手いことやってくれるという抽象レベルの理解も重要
そのムーブ魔法がどう実現されているか知っておくことも重要
そのムーブ魔法がどう実現されているか知っておくことも重要
866デフォルトの名無しさん
2026/07/22(水) 14:35:10.94ID:YIjqgtY0 魔法を信じてプログラミングしても大丈夫だよ
もし遅いと感じたら測定する
ムーブの最適化が何らかの事情でできてなければ判明してそこで初めて対処すればいいんだよ
万が一に備えて最初からヒープ領域にデータを置くことは間違った早すぎる最適化であり愚かな行為
もし遅いと感じたら測定する
ムーブの最適化が何らかの事情でできてなければ判明してそこで初めて対処すればいいんだよ
万が一に備えて最初からヒープ領域にデータを置くことは間違った早すぎる最適化であり愚かな行為
867デフォルトの名無しさん
2026/07/22(水) 15:37:11.70ID:9kaHeq4d868デフォルトの名無しさん
2026/07/22(水) 15:38:48.11ID:6Gra50HL869デフォルトの名無しさん
2026/07/22(水) 15:41:08.01ID:8n0waISf >>863
値を返す時に必ずそうなるという主張はコンパイラを単純に考えすぎているし、そもそも出力されるアセンブリ言語や機械語はそのバージョンのコンパイラの解析能力で扱える範囲で最適化されるにすぎないことは知っておく必要がある
値を返す時に必ずそうなるという主張はコンパイラを単純に考えすぎているし、そもそも出力されるアセンブリ言語や機械語はそのバージョンのコンパイラの解析能力で扱える範囲で最適化されるにすぎないことは知っておく必要がある
870デフォルトの名無しさん
2026/07/22(水) 15:42:53.59ID:9kaHeq4d871デフォルトの名無しさん
2026/07/22(水) 15:44:31.94ID:JycBCTuD >>866
そもそもスタックに巨大データを置くことが誤った設計なんですけど
そもそもスタックに巨大データを置くことが誤った設計なんですけど
872デフォルトの名無しさん
2026/07/22(水) 15:49:37.99ID:n22ahHSU 旧来からの発想の転換で有利なスタック領域を活用することがRustの高速化に繋がった
873デフォルトの名無しさん
2026/07/22(水) 15:50:52.67ID:fqsfiDCR 流石に嘘すぎる
何のためにRustがヒープを安全に扱える仕組みを導入したのか完全に無視している
何のためにRustがヒープを安全に扱える仕組みを導入したのか完全に無視している
874デフォルトの名無しさん
2026/07/22(水) 15:53:09.53ID:fqsfiDCR スタック領域が有利なのは特定の条件下(確保/解放が多い、扱うデータが小さくコピーが起きても支障がない、決定論的な動作が必要でシステムコールが待てない)だけで、大きなデータを扱う場合には普通にヒープに置いた方が使い勝手はいい
875デフォルトの名無しさん
2026/07/22(水) 15:57:07.11ID:O01J+ZaE >>872
Rustが高速な理由は無駄な処理をしない、遅い処理を排除することに注力し、かつ言語仕様を厳格化することで最適化しやすいヒントを多く含むIRを生成して、LLVMに渡せるようにすることで実現されている
ヒープ領域はむしろ積極的に活用されている(たとえば、VecやStringはヒープの確保を伴う)し、スタックに大きなデータを置かないことを推奨してもいる
Rustが高速な理由は無駄な処理をしない、遅い処理を排除することに注力し、かつ言語仕様を厳格化することで最適化しやすいヒントを多く含むIRを生成して、LLVMに渡せるようにすることで実現されている
ヒープ領域はむしろ積極的に活用されている(たとえば、VecやStringはヒープの確保を伴う)し、スタックに大きなデータを置かないことを推奨してもいる
876デフォルトの名無しさん
2026/07/22(水) 16:01:13.48ID:nRzhKxoM Rc/Arcはヒープ領域を管轄するからこそ実現できる例のようにヒープ領域の利用は意味があるよ
基本はスタック領域を活用
必要に応じてヒープ領域
基本はスタック領域を活用
必要に応じてヒープ領域
877デフォルトの名無しさん
2026/07/22(水) 16:04:22.62ID:JKcxJ34H878デフォルトの名無しさん
2026/07/22(水) 16:10:10.68ID:Of/BcPgB879デフォルトの名無しさん
2026/07/22(水) 16:25:45.26ID:XYz54jbC880デフォルトの名無しさん
2026/07/22(水) 16:31:09.68ID:c7srhqru881デフォルトの名無しさん
2026/07/22(水) 16:59:58.86ID:Z37YkZf/ 言い争ってる内容のレベルが日々下がってくね
882デフォルトの名無しさん
2026/07/22(水) 17:15:11.12ID:XYz54jbC883デフォルトの名無しさん
2026/07/22(水) 17:16:51.37ID:XYz54jbC >>881
Rustろくに書いたことないのにゼロヒャクで断言したがる奴が多すぎるんだよな
Rustろくに書いたことないのにゼロヒャクで断言したがる奴が多すぎるんだよな
884デフォルトの名無しさん
2026/07/22(水) 17:22:27.60ID:XYz54jbC >>879の補足
CPUのキャッシュはヒープ領域のデータでも使用頻度が高ければキャッシュするので、スタック領域かヒープ領域かは関係がない
そのためにキャッシュラインに合わせてアラインメントしてヒープ領域を使うということも行われる
また、スタック領域に置かれていてもアラインメントがされていなければキャッシュ効率が悪くなることも普通にある
CPUのキャッシュはヒープ領域のデータでも使用頻度が高ければキャッシュするので、スタック領域かヒープ領域かは関係がない
そのためにキャッシュラインに合わせてアラインメントしてヒープ領域を使うということも行われる
また、スタック領域に置かれていてもアラインメントがされていなければキャッシュ効率が悪くなることも普通にある
885デフォルトの名無しさん
2026/07/22(水) 22:43:51.19ID:o2Jdm9L+ メモリ空間をOSが管理してると、ヒープ領域を使うのにいちいちシステムコールが必要になるから、欠点が目立つんだよな
でもスタック領域に欠点がないかと言えば、別にそんなこともないから使い分けが必要
でもスタック領域に欠点がないかと言えば、別にそんなこともないから使い分けが必要
886デフォルトの名無しさん
2026/07/22(水) 23:14:46.59ID:WzrqCFod >>879
スタック上で処理したほうが圧倒的に有利になっている理由は、他のローカル変数はスタック上にあり、関数呼び出し時もスタックを用いるため
メモリの使用範囲がスタック上のみに限定され、メモリキャッシュ効果が最大限に発揮されます
スタック上で処理したほうが圧倒的に有利になっている理由は、他のローカル変数はスタック上にあり、関数呼び出し時もスタックを用いるため
メモリの使用範囲がスタック上のみに限定され、メモリキャッシュ効果が最大限に発揮されます
887デフォルトの名無しさん
2026/07/23(木) 02:50:21.49ID:luqj8bdN >>886
そもそもスタック領域を大きくしたらスタック全体がキャッシュに乗らなくなるし、ヒープでも確保を工夫すればキャッシュに乗せられるので、ほとんど関係がない
そもそもスタック領域を大きくしたらスタック全体がキャッシュに乗らなくなるし、ヒープでも確保を工夫すればキャッシュに乗せられるので、ほとんど関係がない
888デフォルトの名無しさん
2026/07/23(木) 03:28:47.44ID:0/IAmlr6889デフォルトの名無しさん
2026/07/23(木) 07:58:46.98ID:rkdmRmzF 仮に (あくまでも仮に) スタックの多用が全面的にメリットばかりだとしてもたとえば Linux のデフォルトだとスタックの上限はたった 8MB だぞ。
上限を引き上げる設定をやったことなんてほとんどないだろ。みんなスタック 8MB でやりくりしてるんだよ。
上限を引き上げる設定をやったことなんてほとんどないだろ。みんなスタック 8MB でやりくりしてるんだよ。
890デフォルトの名無しさん
2026/07/23(木) 08:13:33.16ID:AUDDS2Ak > スタックの多用が全面的にメリットばかり
正にこれが間違い
ヒープ領域に確保する方が関係データを含めてアクセスローカリティを考慮したデータレイアウト設計が出来る
正にこれが間違い
ヒープ領域に確保する方が関係データを含めてアクセスローカリティを考慮したデータレイアウト設計が出来る
891デフォルトの名無しさん
2026/07/23(木) 08:19:49.70ID:z4+uszs5 組み込みだとスタックが浅いからって
関数呼び出しはするな
引数も使うな
全部グローバルでやりとりしろ
みたいな流儀があったらしいと聞くが
なんでそういう絶対的な制約があるわけでもないのに似たような縛りプレイやろうとしてるんだろう
関数呼び出しはするな
引数も使うな
全部グローバルでやりとりしろ
みたいな流儀があったらしいと聞くが
なんでそういう絶対的な制約があるわけでもないのに似たような縛りプレイやろうとしてるんだろう
892デフォルトの名無しさん
2026/07/23(木) 11:19:45.15ID:FxkCx1gi >>889
8MBはデフォルト値にすぎないから
起動プロセスのための環境変数を設定するタイミングと同じように
起動直前で例えばulimit -s 65536すれば子プロセスのみスタック領域を64MBに変えることができるよ
8MBはデフォルト値にすぎないから
起動プロセスのための環境変数を設定するタイミングと同じように
起動直前で例えばulimit -s 65536すれば子プロセスのみスタック領域を64MBに変えることができるよ
893デフォルトの名無しさん
2026/07/23(木) 11:33:58.96ID:rkdmRmzF894デフォルトの名無しさん
2026/07/23(木) 11:43:37.14ID:ZelaGfP0 スタック領域サイズだけに限らず諸々のリソースのパラメータは各用途に応じて設定して運用が行われている
895デフォルトの名無しさん
2026/07/23(木) 11:46:07.77ID:1wG4VbX9 Rustってすごい言語なんですね
896デフォルトの名無しさん
2026/07/23(木) 11:47:21.36ID:SaQIv/sp >各用途に応じて設定して運用が行われている
(つまり、各用途に応じた設定をして運用を行ったことはない)
(つまり、各用途に応じた設定をして運用を行ったことはない)
897デフォルトの名無しさん
2026/07/23(木) 11:55:01.09ID:RmZ5xdy6 >>895
リソースパラメタ変更して運用はRust登場以前から普通に行われている
リソースパラメタ変更して運用はRust登場以前から普通に行われている
898デフォルトの名無しさん
2026/07/23(木) 13:12:35.86ID:cxrYFfJU >>890
そもそもスタックが全てキャッシュに乗るわけでも、データが全てキャッシュに乗るわけでもなく、使ったものがキャッシュに乗る
なのでスタックにあるかどうかは関係ないし、そこに固執してるのは知識がないから
そもそもスタックが全てキャッシュに乗るわけでも、データが全てキャッシュに乗るわけでもなく、使ったものがキャッシュに乗る
なのでスタックにあるかどうかは関係ないし、そこに固執してるのは知識がないから
899デフォルトの名無しさん
2026/07/23(木) 13:13:10.18ID:cxrYFfJU ごめん、>>888だった
900デフォルトの名無しさん
2026/07/23(木) 13:13:53.08ID:cxrYFfJU 複おじの妄想は相手しなくていいよ
901デフォルトの名無しさん
2026/07/23(木) 13:16:21.80ID:VXCn4TUk >>898
スタックは必ず使われるからキャッシュに必ず乗り必ず有利になることは常識
スタックは必ず使われるからキャッシュに必ず乗り必ず有利になることは常識
902デフォルトの名無しさん
2026/07/23(木) 13:22:40.15ID:cxrYFfJU >>901
キャッシュはキャッシュラインの単位ごとにしか乗らないので、巨大データをスタックに置いたところで他の変数と一緒にキャッシュに乗ることは保証されない
一方でヒープに置いた場合でも、一度使えばキャッシュに乗るため繰り返し使う時に高速で扱える
キャッシュはキャッシュラインの単位ごとにしか乗らないので、巨大データをスタックに置いたところで他の変数と一緒にキャッシュに乗ることは保証されない
一方でヒープに置いた場合でも、一度使えばキャッシュに乗るため繰り返し使う時に高速で扱える
903デフォルトの名無しさん
2026/07/23(木) 13:23:01.90ID:m8CXPFD8 > 必ず乗り
そんなわけない
そんなわけない
904デフォルトの名無しさん
2026/07/23(木) 13:25:12.89ID:cxrYFfJU キャッシュが無限に容量があって無限に高速なメモリだとでも仮定しないと、必ず乗るなんて主張は成立させられないはずなのだが
それにヒープ領域はキャッシュに乗らないと頑なに信じているらしいが、CPU設計者をそこまでバカにする理由もよくわからない
わざわざ大量の計算をしてスタック領域だけを見分けてキャッシュに乗せる、そんな無意味なことをするとなぜ信じられるのだろうか
それにヒープ領域はキャッシュに乗らないと頑なに信じているらしいが、CPU設計者をそこまでバカにする理由もよくわからない
わざわざ大量の計算をしてスタック領域だけを見分けてキャッシュに乗せる、そんな無意味なことをするとなぜ信じられるのだろうか
905デフォルトの名無しさん
2026/07/23(木) 13:29:30.30ID:neKzl6rg レジスタ退避でいつもL1に乗るからスタック上にあるローカル変数は速いよね
906デフォルトの名無しさん
2026/07/23(木) 13:30:40.71ID:cxrYFfJU907デフォルトの名無しさん
2026/07/23(木) 13:57:52.08ID:qk0tjYWL >>905
レジスタ退避について勘違いしてるよ
レジスタ退避について勘違いしてるよ
908デフォルトの名無しさん
2026/07/23(木) 19:14:51.69ID:OLcLF/i1 >>905
シンプルに教えてほしいんだけど、レジスタやL1が8MiBもあるCPUってどこにあるんだい?
シンプルに教えてほしいんだけど、レジスタやL1が8MiBもあるCPUってどこにあるんだい?
レス数が900を超えています。1000を超えると表示できなくなるよ。
ニュース
- 「タトゥーを入れてモテなくなった」タトゥーで後悔、HカップYouTuber [ヴァイヴァー★]
- 【しまむら】「モデルの顔がすべて同じに見える」バースデイの広告が波紋 本社に聞いた生成AI活用の狙い [少考さん★]
- 「本業声優かと思ったら」文句なく上手くて”炎上しなかった”芸能人起用のアニメ映画 [muffin★]
- 国歌取り違えから宿泊施設への不満まで…アジア大会で運営面のトラブル頻発 海外から「“日本は完璧”の評判問われる」 [煮卵★]
- 【Z世代】「食事キャンセル界隈」は本当に大丈夫なのか? 若者が「食べられない」ことを正当化する“危険性”も [ぐれ★]
- 【速報】千葉・君津市の小糸川が氾濫か 警戒レベル5「緊急安全確保」 浸水想定区域299世帯668人に [ちょこ★]
- 高市首相、ニューヨーク国連総会でレアアース規制の中国追求へ。 「法の支配に基づく自由で開かれた秩序への挑戦」 [668024367]
- えびそばえび助閉店まで1週間を切ったお🏡
- 筋トレ続けてるんだけどなんか血管がしまってきた感覚があるんだが寿命か?
- jcだよ質問ある??
- 【速報】隣の部屋の中年がシルバーウィーク始まってから一度も部屋からでてない、そろそろ通報した方がいいか? [398059782]
- 「何千万もローンをかけて戸建てを買ったら床上浸水…さらに利上げでローン金利が高騰… ヘルジャップという地獄に産まれてしまった…」 [667744927]