公式
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 part27
https://mevius.5ch.net/test/read.cgi/tech/1733146370/
ワッチョイスレ
プログラミング言語 Rust 4【ワッチョイ】
https://mevius.5ch.net/test/read.cgi/tech/1514107621/
探検
Rust part28
レス数が950を超えています。1000を超えると書き込みができなくなります。
1デフォルトの名無しさん
2025/03/24(月) 17:37:00.15ID:NJwebgj2879デフォルトの名無しさん
2025/04/30(水) 11:52:30.40ID:MOUA/jrw 簡単に言えば、virtualを使ってないデザインパターンは追放されない
880デフォルトの名無しさん
2025/04/30(水) 12:05:47.96ID:yPZIq5F0 ム板全体が限界過疎集落化してるのに
Rustスレだけ人が居るのはなぜ?
他に交流の場が無いのかな?
Rustスレだけ人が居るのはなぜ?
他に交流の場が無いのかな?
881デフォルトの名無しさん
2025/04/30(水) 12:11:54.22ID:VKtsx7kS 自作自演
882デフォルトの名無しさん
2025/04/30(水) 12:21:33.61ID:TMleEpRy 規模が大きくなるにつれてbestよりconsistentの重要性が高まるものだ
将来的な変更容易性がどうのと言って必要以上に凝ろうとする奴に限って、
革新的で最高にクールなニュースタイルのビルダーが出てきたらすぐにちゃぶ台返しをする
まあ初期化時のパラメータの与え方なんて壊滅的変更されたところで大した問題じゃないから、
そういう奴に自由にオナニーさせて発散させておくにはいいのかもね
将来的な変更容易性がどうのと言って必要以上に凝ろうとする奴に限って、
革新的で最高にクールなニュースタイルのビルダーが出てきたらすぐにちゃぶ台返しをする
まあ初期化時のパラメータの与え方なんて壊滅的変更されたところで大した問題じゃないから、
そういう奴に自由にオナニーさせて発散させておくにはいいのかもね
883デフォルトの名無しさん
2025/04/30(水) 12:21:42.88ID:THYm3xdc 単に書き方がちょっと面倒というのを解決したいならマクロを使えばよいということだと思う。
実際にそういう使われかたをしてるし。
実際にそういう使われかたをしてるし。
884デフォルトの名無しさん
2025/04/30(水) 12:44:48.88ID:s47+7HVZ 自演
885デフォルトの名無しさん
2025/04/30(水) 13:00:34.55ID:uCqRd3Sw886デフォルトの名無しさん
2025/04/30(水) 14:42:30.43ID:UhuBHLAw >>878
Builderパターンは設定(引数渡し)とオブジェクト生成を分離するのが本質的な特徴。
デフォルトの省略とか渡す順番の自由化とかあるけど、それも設定と生成の分離から派生した特徴でしか無い。また分離した結果として複数個所からの同時アクセスに弱いけど、そういうのを理解して使えばいい。
Builderパターンは設定(引数渡し)とオブジェクト生成を分離するのが本質的な特徴。
デフォルトの省略とか渡す順番の自由化とかあるけど、それも設定と生成の分離から派生した特徴でしか無い。また分離した結果として複数個所からの同時アクセスに弱いけど、そういうのを理解して使えばいい。
887デフォルトの名無しさん
2025/04/30(水) 15:49:41.55ID:AZF3og04 あちこちがガンガン破壊的変更されていくRust界で、
初期化のとこだけBuilderパターンで互換性ありますよーってあんまり意味ない気がする
初期化のとこだけBuilderパターンで互換性ありますよーってあんまり意味ない気がする
888デフォルトの名無しさん
2025/04/30(水) 16:17:15.30ID:JQkc0XME >>880
約一名必死なやつがいるから
約一名必死なやつがいるから
889デフォルトの名無しさん
2025/04/30(水) 17:44:14.52ID:y1rgmJae >>887
Rustは他の言語と比べても破壊的変更は少ない方じゃないかな
しかもRustにはEditionという概念があって必ずCargo.tomlに指定したうえでソースコードを書く
そのため破壊的変更より前の古いソースコードも影響を受けずにコンパイルできて実行できたりする
第三者が作ったライブラリ(crate)についてはCargo.tomlにバージョン番号を指定して使っていれば
そのまま当時のソースコードを使うためコンパイルできて実行できたりする
もちろん古いものセキュリティホールなどが発見されれば対応せざるをえないのは当然だけどね
いずれも全てのケース100%で今後も永遠に大丈夫というわけではないかもしれないけど
バージョンの違いなどで苦しんでるプログラミング言語などと比べたらRustは恵まれてると思うよ
Rustは他の言語と比べても破壊的変更は少ない方じゃないかな
しかもRustにはEditionという概念があって必ずCargo.tomlに指定したうえでソースコードを書く
そのため破壊的変更より前の古いソースコードも影響を受けずにコンパイルできて実行できたりする
第三者が作ったライブラリ(crate)についてはCargo.tomlにバージョン番号を指定して使っていれば
そのまま当時のソースコードを使うためコンパイルできて実行できたりする
もちろん古いものセキュリティホールなどが発見されれば対応せざるをえないのは当然だけどね
いずれも全てのケース100%で今後も永遠に大丈夫というわけではないかもしれないけど
バージョンの違いなどで苦しんでるプログラミング言語などと比べたらRustは恵まれてると思うよ
890デフォルトの名無しさん
2025/04/30(水) 18:21:50.73ID:JJ8dHA07 ワシらの作るサービスがヒットするわけ無いだろ。打率0割0分5厘
スーパーなプロデューサに仕えねば
スーパーなプロデューサに仕えねば
891デフォルトの名無しさん
2025/04/30(水) 18:50:26.71ID:61w1rbBX892デフォルトの名無しさん
2025/04/30(水) 19:04:33.02ID:v8y83nww893デフォルトの名無しさん
2025/04/30(水) 19:17:57.26ID:JJ8dHA07 エディションの機能あるのRustだけじゃね。
Cなんかもコンパイラオプションでゴニョゴニョ出来るけど
Cなんかもコンパイラオプションでゴニョゴニョ出来るけど
894デフォルトの名無しさん
2025/04/30(水) 19:18:18.80ID:y1rgmJae895デフォルトの名無しさん
2025/04/30(水) 19:52:49.23ID:v8y83nww そんなNPTがあるから核兵器は安全だ!みたいなこと言われてもな
896デフォルトの名無しさん
2025/04/30(水) 19:53:45.22ID:THYm3xdc ひとつのプロジェクトに異なるエディションが混在することもできるけど、そうなると ABI の互換性は切れないし、エディションという仕組みがどれくらい長期的に機能するかちょっと読めない。
旧エディションを際限なくサポートするわけにもいかんし、ある程度古くなったエディションはそのうちサポートは切られるんじゃないかな?
新エディションに書き換えるツールは提供されてるので定期的に書き換えてメンテナンスするくらいは必要じゃない? もちろんプログラマも新エディションの機能を把握するのは要る。
旧エディションを際限なくサポートするわけにもいかんし、ある程度古くなったエディションはそのうちサポートは切られるんじゃないかな?
新エディションに書き換えるツールは提供されてるので定期的に書き換えてメンテナンスするくらいは必要じゃない? もちろんプログラマも新エディションの機能を把握するのは要る。
897デフォルトの名無しさん
2025/04/30(水) 19:56:05.44ID:JJ8dHA07 それは、仕方なし
898デフォルトの名無しさん
2025/04/30(水) 20:02:14.30ID:y1rgmJae899デフォルトの名無しさん
2025/04/30(水) 20:02:41.40ID:JQkc0XME Rust ABIは一度も安定化したことがないから保つべき互換性なんてものはないので安心してください
900デフォルトの名無しさん
2025/04/30(水) 20:03:10.33ID:etHuYXUz 他でも同じ
python2 python3
python2 python3
901デフォルトの名無しさん
2025/04/30(水) 20:04:46.85ID:v8y83nww 塩漬けにするなら普通は処理系のバージョンも含めて塩漬けにするもんだし、
>>896の指摘するように古いエディションのサポートが切られたら否が応でもそうするしかなくなる
>>896の指摘するように古いエディションのサポートが切られたら否が応でもそうするしかなくなる
902デフォルトの名無しさん
2025/04/30(水) 20:05:30.86ID:etHuYXUz この件でrustが優れていると言うのは違うかと
903デフォルトの名無しさん
2025/04/30(水) 20:09:05.80ID:JQkc0XME C/C++だってコンパイラオプションで規格明示すればいいだけだしねえ
904デフォルトの名無しさん
2025/04/30(水) 20:30:24.75ID:y1rgmJae 3年毎のエディションの仕組みが明確にあって
ソースコードのCargo.tomlにエディションが必ず指定されてるから
コンパイルオプション指定も含めてソースコードを全く変更せずに動く
という点が他とは異なるね
あと将来は古いのは切るかもしれないけど
今のところ最新コンパイラもエディション2015,2018,2021,2024を全てサポートしていてコンパイルして動くね
その時コンパイラが警告してくれるし移行ツールもあるのでエディション移行もしやすい
ソースコードのCargo.tomlにエディションが必ず指定されてるから
コンパイルオプション指定も含めてソースコードを全く変更せずに動く
という点が他とは異なるね
あと将来は古いのは切るかもしれないけど
今のところ最新コンパイラもエディション2015,2018,2021,2024を全てサポートしていてコンパイルして動くね
その時コンパイラが警告してくれるし移行ツールもあるのでエディション移行もしやすい
905デフォルトの名無しさん
2025/04/30(水) 20:53:46.40ID:THYm3xdc >>903
C/C++ には欠陥報告という制度があって、規格の過去の版に遡って修正されることがある。
大半は文章の曖昧さの修正や緩和の方向だから深刻な互換性問題にはあまりならないんだけど、なにせ修正の件数自体が多いから割合として少なくても互換性を損なう修正もそこそこある。
つまり昔の C++11 と今の C++11 は別物と考える必要がある。
そんでコンパイラによって規格の修正の反映具合が違ったりして混沌としてるんだわ。
実際に昔のコードを今のコンパイラでコンパイルしようとしてもエラーがゼロなんて場合はほとんどない。
C/C++ には欠陥報告という制度があって、規格の過去の版に遡って修正されることがある。
大半は文章の曖昧さの修正や緩和の方向だから深刻な互換性問題にはあまりならないんだけど、なにせ修正の件数自体が多いから割合として少なくても互換性を損なう修正もそこそこある。
つまり昔の C++11 と今の C++11 は別物と考える必要がある。
そんでコンパイラによって規格の修正の反映具合が違ったりして混沌としてるんだわ。
実際に昔のコードを今のコンパイラでコンパイルしようとしてもエラーがゼロなんて場合はほとんどない。
906デフォルトの名無しさん
2025/04/30(水) 21:04:19.22ID:v8y83nww そりゃC++は時間のスケールが違うからな
C++を引き合いに出すなら、20年待たないとRustのエディションが主張通りに機能したかどうか結論は出ない
C++を引き合いに出すなら、20年待たないとRustのエディションが主張通りに機能したかどうか結論は出ない
907デフォルトの名無しさん
2025/04/30(水) 21:20:15.53ID:Jt3SshjK ここ覗いてるのってメーカー勤めの技術的リスク取れないチキンな皆さんなのかね
やっていこうぜ。不満があればイシューツリーかパッチ投げよう
やっていこうぜ。不満があればイシューツリーかパッチ投げよう
908デフォルトの名無しさん
2025/04/30(水) 21:30:45.31ID:y1rgmJae >>906
現に10年前のRust 2015 edition指定のコードが動いているから大丈夫だと思うよ
最新コンパイラが2015 editionをサポートする間はそのままコンパイルできて動作するね
その話と関係なくcargo fix -editionで半自動でedition移行ができるから自分のソースコードなら手直ししてすぐ解決
現に10年前のRust 2015 edition指定のコードが動いているから大丈夫だと思うよ
最新コンパイラが2015 editionをサポートする間はそのままコンパイルできて動作するね
その話と関係なくcargo fix -editionで半自動でedition移行ができるから自分のソースコードなら手直ししてすぐ解決
909デフォルトの名無しさん
2025/04/30(水) 21:47:40.41ID:MOUA/jrw 自分のソースコードしか手直しできないってなんでだろう
もっと他人のソースコードを批評したり手直ししたりすれば楽しいのに
もっと他人のソースコードを批評したり手直ししたりすれば楽しいのに
910デフォルトの名無しさん
2025/04/30(水) 22:24:04.29ID:OzkHKJVN 人のもやればいいけど技術以外の問題があるだけでしょ
コミット権限がないとか
コミット権限がないとか
911デフォルトの名無しさん
2025/04/30(水) 23:07:35.68ID:aRycYPw9 >>878
今回の構造体初期化のビルダーパターンと比べて
名前なしオプション引数やオーバーロードは以下の点で劣っている
・コードを書くときに間違いを起こしやすい
・コードを読む時にもわかりにくい
・同じ型が区別できない (同じ型のheightとwidthの片方だけ指定したい時)
・多数あると組み合わせ爆発が起こる
したがって利用可能な方法は名前指定オプション引数となる
例えば
f(name1=value1, name2=value2, ...)
一方でビルダーパターンでは例えば
f().name1(value1).name2(value2) ...
コードを書く側としてはどちらも大して変わらない
慣れだけの問題であり一瞬で適応できる
利用側としては上記のように大した差はないが
提供する側のコードが面倒で冗長になることがビルダーパターンの欠点であった
しかしこの問題をRustではderive_builderが解決してしまった
初期化したい構造体への簡単な修飾でそのビルダー構造体と実装を自動生成してくれる
他に改善すべき点や案などあるだろうか
今回の構造体初期化のビルダーパターンと比べて
名前なしオプション引数やオーバーロードは以下の点で劣っている
・コードを書くときに間違いを起こしやすい
・コードを読む時にもわかりにくい
・同じ型が区別できない (同じ型のheightとwidthの片方だけ指定したい時)
・多数あると組み合わせ爆発が起こる
したがって利用可能な方法は名前指定オプション引数となる
例えば
f(name1=value1, name2=value2, ...)
一方でビルダーパターンでは例えば
f().name1(value1).name2(value2) ...
コードを書く側としてはどちらも大して変わらない
慣れだけの問題であり一瞬で適応できる
利用側としては上記のように大した差はないが
提供する側のコードが面倒で冗長になることがビルダーパターンの欠点であった
しかしこの問題をRustではderive_builderが解決してしまった
初期化したい構造体への簡単な修飾でそのビルダー構造体と実装を自動生成してくれる
他に改善すべき点や案などあるだろうか
912デフォルトの名無しさん
2025/04/30(水) 23:46:19.22ID:HBKx6hEm 一面しか見ないバカ
相変わらずだな
相変わらずだな
913デフォルトの名無しさん
2025/05/01(木) 00:06:22.35ID:wMrbWiVF rustは関数オーバーロードがないからビルダーパターンに頼らざるを得ない
914デフォルトの名無しさん
2025/05/01(木) 00:23:28.70ID:KmLg46A3 Builderと大して変わらないと思うけど
内部非公開のstruct Fooに対して内部公開のstruct FooDraftを用意して
let foo: Foo = FooDraft {
i: 123,
s: "abc",
..Default::default(),
}.try_into()?;
みたいな形は考えたことある
まじめにやるならFooDraftはnon_exhaustiveを付けた方がいい
内部非公開のstruct Fooに対して内部公開のstruct FooDraftを用意して
let foo: Foo = FooDraft {
i: 123,
s: "abc",
..Default::default(),
}.try_into()?;
みたいな形は考えたことある
まじめにやるならFooDraftはnon_exhaustiveを付けた方がいい
915デフォルトの名無しさん
2025/05/01(木) 00:34:22.74ID:wMrbWiVF どちらにしてもコンストラクタがライトウェイトじゃなくなるし利便性も低下する
916デフォルトの名無しさん
2025/05/01(木) 01:16:01.59ID:MWOwr0re お前らしょうもない言い争いしてる暇あったらRustでプログラミングしようぜ
楽しいぞ😎
楽しいぞ😎
917デフォルトの名無しさん
2025/05/01(木) 01:28:23.84ID:f3hi8cvW f(a,b,c);
g(a,b,c);
h(a,b,c);
ももっと短くするべきで、引数をstructにすればこの問題も解決する
が、キーワード引数はこのコードを更に長くしてしまう
g(a,b,c);
h(a,b,c);
ももっと短くするべきで、引数をstructにすればこの問題も解決する
が、キーワード引数はこのコードを更に長くしてしまう
918デフォルトの名無しさん
2025/05/01(木) 01:50:56.00ID:cAYi0wMW919デフォルトの名無しさん
2025/05/01(木) 01:53:34.42ID:cAYi0wMW920デフォルトの名無しさん
2025/05/01(木) 01:58:46.40ID:cAYi0wMW >>907
ダブスタ意見はやめとけ
ダブスタ意見はやめとけ
921デフォルトの名無しさん
2025/05/01(木) 02:00:23.14ID:N2U44pfA ワイはメーカーじゃないので暇つぶし
922デフォルトの名無しさん
2025/05/01(木) 10:03:23.98ID:nTiKCI2R 完全無欠ωのRustにリスクがあることを認めるのですねわかります
923デフォルトの名無しさん
2025/05/01(木) 10:37:30.35ID:TCz7x/v2 何にでもリスクはある
924デフォルトの名無しさん
2025/05/01(木) 10:38:10.43ID:TCz7x/v2 成功する宝くじだけ買いたいなんて文科省だけだぞ
925デフォルトの名無しさん
2025/05/01(木) 10:49:46.51ID:1Pg0gBiY コロンブスがリスクを取らなければいまだにアメリカ大陸は無人の動物王国だった
アムンゼンしかり、いつの時代も最初にリスク取る人間は周りに理解されない
アムンゼンしかり、いつの時代も最初にリスク取る人間は周りに理解されない
926デフォルトの名無しさん
2025/05/01(木) 10:58:47.12ID:/KCrsMZn ガチでリスクを取れる人間は今はバイブコーディング&動いてるっぽいからリリースしようぜ!に夢中なはず
Rustはコントロールできないリスクは取りたくないくせに俺スゲーしたい中途半端な人間向け
Rustはコントロールできないリスクは取りたくないくせに俺スゲーしたい中途半端な人間向け
927デフォルトの名無しさん
2025/05/01(木) 11:49:06.01ID:nTiKCI2R インディアンと呼ばれた先住民が動物とはこれいかに
928デフォルトの名無しさん
2025/05/01(木) 12:04:15.65ID:TCz7x/v2 >>926
リスクだけ取りたいなら登山でもしてて
リスクだけ取りたいなら登山でもしてて
929デフォルトの名無しさん
2025/05/01(木) 12:07:18.57ID:f3hi8cvW 射程距離が長い武器は接近戦から逃げているだけだな
当たると豪語するが結局当たらない
当たると豪語するが結局当たらない
930デフォルトの名無しさん
2025/05/01(木) 13:11:13.65ID:VlXKY8Xt MSが今ビルダーパターン多用してる
過去の実績から言うとMSは99%技術選定を間違えるからそれが不安要素
MSは失敗のベンチマークとでも呼べる
過去の実績から言うとMSは99%技術選定を間違えるからそれが不安要素
MSは失敗のベンチマークとでも呼べる
931デフォルトの名無しさん
2025/05/01(木) 14:40:42.80ID:nTiKCI2R version3か3回目の名称変更でちょびっと安定してくるやつね
932デフォルトの名無しさん
2025/05/01(木) 14:48:48.72ID:JYSVmYdO 大手は何にでも手を出してるから失敗も多いだけ。
成功も多い。
成功も多い。
933デフォルトの名無しさん
2025/05/01(木) 15:32:50.49ID:/KCrsMZn 逆に大手が手を引けばその技術は失敗と見做される
MSがそれで抹殺してきたのは主に自社の技術だからともかく、GoogleなんかはコミュニティのOSSを殺すから悪質
MSがそれで抹殺してきたのは主に自社の技術だからともかく、GoogleなんかはコミュニティのOSSを殺すから悪質
934デフォルトの名無しさん
2025/05/01(木) 16:02:09.47ID:f3hi8cvW バカに見つかることの何が問題なの?
見つけてもいつか手を引くから問題だ
じつに論理的だ
見つけてもいつか手を引くから問題だ
じつに論理的だ
935デフォルトの名無しさん
2025/05/01(木) 23:47:13.30ID:CL+IXcrI >>913
構造体の初期化にオーバーロードは役に立たないよ
構造体の初期化にオーバーロードは役に立たないよ
936デフォルトの名無しさん
2025/05/02(金) 03:09:37.33ID:OL9VZPix Rustの欠点やRustに対する不満は数多存在するが
CやC++に対するそれらとの程度問題に過ぎない
それを殊更Rustを過剰に持ち上げるから話が可笑しくなる
そのせいで期待の裏返しで粗が目立つことにもなる
RustはRustと限界も理解した上で節度を持って付き合う距離感が大事
CやC++に対するそれらとの程度問題に過ぎない
それを殊更Rustを過剰に持ち上げるから話が可笑しくなる
そのせいで期待の裏返しで粗が目立つことにもなる
RustはRustと限界も理解した上で節度を持って付き合う距離感が大事
937デフォルトの名無しさん
2025/05/02(金) 08:31:39.96ID:yPmkkGew 過剰なのは期待ではないよ
期待などを過剰に可視化するのをやめればいいだけだ
期待などを過剰に可視化するのをやめればいいだけだ
938デフォルトの名無しさん
2025/05/02(金) 09:01:58.80ID:bAYfXEJ2 Rustを教訓にした次の言語に期待
939デフォルトの名無しさん
2025/05/02(金) 09:11:30.86ID:i8P7c2SF Rustの最大の教訓は、どんな言語でも有名になればバカ(必ずしも頭が悪いわけではなく、本来その言語が想定しない用途に使おうとする奴も含む)が使うってことだろう
Rustの仕様はそれほど効率が重要でない分野でテキトーに使おうとすると無駄なコピーが増えたりしてかえって非効率になりがちな面があるから、
そのあたりのバランスをうまく取れば非常に広く使われる言語になったかも
とはいえ次はAIの時代だからもう従来の意味での新しいプログラミング言語は必要なくなった
Rustの仕様はそれほど効率が重要でない分野でテキトーに使おうとすると無駄なコピーが増えたりしてかえって非効率になりがちな面があるから、
そのあたりのバランスをうまく取れば非常に広く使われる言語になったかも
とはいえ次はAIの時代だからもう従来の意味での新しいプログラミング言語は必要なくなった
940デフォルトの名無しさん
2025/05/02(金) 09:18:30.31ID:l65Gmtfc オプション引数やキーワード引数については他言語が内部的にやってることをRustの場合は開発者が自分でやらなきゃいけないことになっててバカらしい
しかも関数シグニチャに情報をまとめられないから書く方も読む方も煩雑になるだけで開発者的には何もメリットがない
しかも関数シグニチャに情報をまとめられないから書く方も読む方も煩雑になるだけで開発者的には何もメリットがない
941デフォルトの名無しさん
2025/05/02(金) 13:09:45.81ID:27eNBEi7 本来Rustに触るべきじゃない層にまで浸透しつつあるのはええの
942デフォルトの名無しさん
2025/05/02(金) 15:42:00.82ID:D7XvqJPq >>939
無駄なコピーが増えて非効率?
そんなのどの言語でも参照を使わずにコピーしていたら起きるだろ
さらに言語によってはコピーしてるつもりがなくても内部でコピーしてることもある
一方でRustならプリミティブな整数などを除いて、コピーは明示的にCopy実装するかclone()した時のみ起きる
そして参照を様々な形でサポートしていいるため、Rustで無駄なコピーが増えて非効率になることはない
無駄なコピーが増えて非効率?
そんなのどの言語でも参照を使わずにコピーしていたら起きるだろ
さらに言語によってはコピーしてるつもりがなくても内部でコピーしてることもある
一方でRustならプリミティブな整数などを除いて、コピーは明示的にCopy実装するかclone()した時のみ起きる
そして参照を様々な形でサポートしていいるため、Rustで無駄なコピーが増えて非効率になることはない
943デフォルトの名無しさん
2025/05/02(金) 15:48:12.35ID:5gJO9Aey Cで構造体を関数に引数渡しするとコピーが走るわけだが、Rustでは同様の問題はないのですかの
944デフォルトの名無しさん
2025/05/02(金) 16:14:46.67ID:LUc36ySD >>943
ムーブは機械語レベルではコピーと同じだとドキュメントにも書いてある。
つまり素朴な解釈ではコピーされるし、コピーのコストはある。
その上で最適化によってコピーが避けられることもある。
Rust の性質的にエイリアス解析が万全なので C よりは有利に最適化できる。
ムーブは機械語レベルではコピーと同じだとドキュメントにも書いてある。
つまり素朴な解釈ではコピーされるし、コピーのコストはある。
その上で最適化によってコピーが避けられることもある。
Rust の性質的にエイリアス解析が万全なので C よりは有利に最適化できる。
945デフォルトの名無しさん
2025/05/02(金) 16:16:32.01ID:5gJO9Aey 確実に引数のコピーを避けるなら参照渡しだよね。Cと同じかの
946デフォルトの名無しさん
2025/05/02(金) 16:28:29.66ID:LUc36ySD コストよりも所有権の事情で決めるもんだよ。
参照を渡すかどうかはコストの問題ではなく所有権を渡すのが妥当かどうかの話。
参照を渡すかどうかはコストの問題ではなく所有権を渡すのが妥当かどうかの話。
947デフォルトの名無しさん
2025/05/02(金) 16:39:23.11ID:5gJO9Aey スタックサイズに制限がある環境では、スタック使用量を見積もれないとマズいのです。
高速道路公団になっちゃうよ
高速道路公団になっちゃうよ
948デフォルトの名無しさん
2025/05/02(金) 17:10:01.59ID:PM49hp/O 今どきキーワード引数が無いのは普通に不便なんだけど
追加しないのはどういうこだわりなの?
追加しないのはどういうこだわりなの?
949デフォルトの名無しさん
2025/05/02(金) 17:25:37.72ID:9xoZUliT >>943
Rustの構造体は明示的にCopy実装した時のみコピー値渡しできるようになる
逆にコピー値渡しの必要がなければCopy実装しないのが通常
ちなみにヒープを所有するものを含むとそもそもCopy実装できない
Copy実装していなければムーブ渡しになる
生成コードでのムーブの実装はコピーして元を捨てる(=それ以降は使えない使われない)
元が使われないため、生成コードでは最適化によりコピーが消える場合が多い
他の関数へムーブしてしまうとそれ以降は使えないため、実際にムーブが使われるケースはいくつかのパターンとなり、それ以外はムーブではなく参照を渡す
ムーブが使われる例としては、初期化作成して渡すだけ、他の型へ変換、他の型の一部に組み込み、など
Rustの構造体は明示的にCopy実装した時のみコピー値渡しできるようになる
逆にコピー値渡しの必要がなければCopy実装しないのが通常
ちなみにヒープを所有するものを含むとそもそもCopy実装できない
Copy実装していなければムーブ渡しになる
生成コードでのムーブの実装はコピーして元を捨てる(=それ以降は使えない使われない)
元が使われないため、生成コードでは最適化によりコピーが消える場合が多い
他の関数へムーブしてしまうとそれ以降は使えないため、実際にムーブが使われるケースはいくつかのパターンとなり、それ以外はムーブではなく参照を渡す
ムーブが使われる例としては、初期化作成して渡すだけ、他の型へ変換、他の型の一部に組み込み、など
950デフォルトの名無しさん
2025/05/02(金) 17:48:28.97ID:5gJO9Aey >>949
ありがとう。慣れれば簡単そうね
ありがとう。慣れれば簡単そうね
951デフォルトの名無しさん
2025/05/02(金) 18:13:18.00ID:n0wyIh3y >>948
ABI を策定してみて。
ABI を策定してみて。
952デフォルトの名無しさん
2025/05/02(金) 18:30:03.50ID:06aFKDyR キーワード引数とABIは関係なくない?
例えば fn func(foo: i32, bar: i32) というシグニチャの関数について、
呼び出し側で func(bar: 10, foo: 20); のように記述したものが func(20, 10); に置き換えられるような仕組みだし、
コンパイル時に解決する問題な気がする
そもそもRustは (C互換のコードを除いて) 安定したABIを持ってないんじゃないっけ?
例えば fn func(foo: i32, bar: i32) というシグニチャの関数について、
呼び出し側で func(bar: 10, foo: 20); のように記述したものが func(20, 10); に置き換えられるような仕組みだし、
コンパイル時に解決する問題な気がする
そもそもRustは (C互換のコードを除いて) 安定したABIを持ってないんじゃないっけ?
953デフォルトの名無しさん
2025/05/02(金) 18:34:07.60ID:bAYfXEJ2 >>943
コピーしたくなければポインタで渡すだけでいいんだぞ
コピーしたくなければポインタで渡すだけでいいんだぞ
954デフォルトの名無しさん
2025/05/02(金) 18:53:01.38ID:d0ZtlBkd キーワード引数は関数の型との兼ね合いだろうな
fn foo(a: u32)
を
fn foo(a: u32, b: u32 = 0)
に変えたときに
F: Fn(u32)
に渡せるかみたいなややこしい話が出てくる
最初から
fn foo(a: u32, opt_args: FooOptArgs)
で頑張ってもらった方が分かりやすい
fn foo(a: u32)
を
fn foo(a: u32, b: u32 = 0)
に変えたときに
F: Fn(u32)
に渡せるかみたいなややこしい話が出てくる
最初から
fn foo(a: u32, opt_args: FooOptArgs)
で頑張ってもらった方が分かりやすい
955デフォルトの名無しさん
2025/05/02(金) 18:57:27.48ID:kIVCyVUc オプション引数はそのままOption<T>型の引数で使われていて困らないね
956デフォルトの名無しさん
2025/05/02(金) 19:34:53.93ID:PM49hp/O キーワード引数があれば、Builderパターンとか要らなくなるんだけど
957デフォルトの名無しさん
2025/05/02(金) 19:49:08.87ID:rPO248eK >>944
copyが発生しうるmoveのときは暗黙でcopy出来るかどうかderive(Clone, Copy)
暗黙にcopy出来ないけどcopyの必要なmoveが起こるときはコンパイル時にエラー
copyが発生しうるmoveのときは暗黙でcopy出来るかどうかderive(Clone, Copy)
暗黙にcopy出来ないけどcopyの必要なmoveが起こるときはコンパイル時にエラー
958デフォルトの名無しさん
2025/05/02(金) 19:49:28.92ID:i8P7c2SF959デフォルトの名無しさん
2025/05/02(金) 19:51:56.60ID:5gJO9Aey カリー化を覚えよう
960デフォルトの名無しさん
2025/05/02(金) 19:54:40.88ID:GN+wBpsy961デフォルトの名無しさん
2025/05/02(金) 19:55:06.57ID:rPO248eK >>955
doudt
doudt
962デフォルトの名無しさん
2025/05/02(金) 20:07:31.93ID:GN+wBpsy オプション引数は結局Option型などで渡すか、あるいは、省略時の値として長い引数の個数を渡すしかない
それを避けるには可変個引数にして引数の個数を持たせて処理していくが効率もよくない
それを避けるには可変個引数にして引数の個数を持たせて処理していくが効率もよくない
963デフォルトの名無しさん
2025/05/02(金) 20:10:27.21ID:tUdMCpmj 他の言語を知っているといろいろと勉強になるから使った方が良い
964デフォルトの名無しさん
2025/05/02(金) 20:14:10.43ID:i8P7c2SF >>960
それは952も示している通りコンパイル時に呼び出し元に展開するだけ
互換性の問題はあるが実用上問題になることは稀だ
Kotlinのようにランタイムのペナルティを許容して被呼び出し側で条件分岐する流派もあるが、Rustはそっちは選ばないだろう
それは952も示している通りコンパイル時に呼び出し元に展開するだけ
互換性の問題はあるが実用上問題になることは稀だ
Kotlinのようにランタイムのペナルティを許容して被呼び出し側で条件分岐する流派もあるが、Rustはそっちは選ばないだろう
965デフォルトの名無しさん
2025/05/02(金) 20:14:30.16ID:n0wyIh3y >>957
繰り返すがここで言うコピーは機械語レベルでのコピーの話、ビットパターンのコピーの話をしてる。
(実行コストについての文脈なので。)
ムーブのコンパイル結果はコピーのコンパイル結果と同一であることの説明であって言語仕様の話をしてないので言語仕様の説明は不要。
繰り返すがここで言うコピーは機械語レベルでのコピーの話、ビットパターンのコピーの話をしてる。
(実行コストについての文脈なので。)
ムーブのコンパイル結果はコピーのコンパイル結果と同一であることの説明であって言語仕様の話をしてないので言語仕様の説明は不要。
966デフォルトの名無しさん
2025/05/02(金) 20:16:15.41ID:wHxIFaHv 構造体の初期化をビルダー方式にするとメリットが多い
・長い引数がなく読みやすい
・必要な指定のみメソッドでチェーンで指定すればよく書きやすい
・Rustでは多くの場合inline化されて構造体の各フィールド指定と同じコードになり効率がよい
デメリットは初めて見る人は慣れていないこと
慣れたらデメリットは消える
・長い引数がなく読みやすい
・必要な指定のみメソッドでチェーンで指定すればよく書きやすい
・Rustでは多くの場合inline化されて構造体の各フィールド指定と同じコードになり効率がよい
デメリットは初めて見る人は慣れていないこと
慣れたらデメリットは消える
967デフォルトの名無しさん
2025/05/02(金) 20:19:38.05ID:tUdMCpmj カーニハンの時代のC言語は仕様上構造体は引数に値渡しできず戻せなかった
実際はある程度をすぎると可能だったらしいが
実際はある程度をすぎると可能だったらしいが
968デフォルトの名無しさん
2025/05/02(金) 20:26:25.98ID:n0wyIh3y >>967
K&R 第一版の時点でも将来的に出来るようになると明瞭に書かれていて、単に構想に実装が追い付いてなかっただけ。
K&R 第一版の時点でも将来的に出来るようになると明瞭に書かれていて、単に構想に実装が追い付いてなかっただけ。
969デフォルトの名無しさん
2025/05/02(金) 20:32:31.01ID:06aFKDyR 呼び出し側も定義する側にとっても冗長なのは普通にデメリットじゃない?
ビルダーは「Rustの制約を考慮すると現状これが最も妥当」くらいのものでしょ
このパターンが「便利だから」という理由で他の言語でも流行る、なんてことは想像しづらい
ビルダーは「Rustの制約を考慮すると現状これが最も妥当」くらいのものでしょ
このパターンが「便利だから」という理由で他の言語でも流行る、なんてことは想像しづらい
970デフォルトの名無しさん
2025/05/02(金) 20:36:36.68ID:tUdMCpmj ビルダパターンはオブジェクトなどの生成が複雑な場合に使われるべき
引数がやや多いと言うだけで使うのは論外
単純なものは他の仕組みファクトリーパターンでも十分では
本当に引数が多い場合もビルダーパターンは適さない
あくまでも生成が複雑なものに限定すべきである
今は過剰にビルダーパターンが使われているけど将来的には減っていくと思われる
引数がやや多いと言うだけで使うのは論外
単純なものは他の仕組みファクトリーパターンでも十分では
本当に引数が多い場合もビルダーパターンは適さない
あくまでも生成が複雑なものに限定すべきである
今は過剰にビルダーパターンが使われているけど将来的には減っていくと思われる
971デフォルトの名無しさん
2025/05/02(金) 20:43:33.27ID:z720W3rP972デフォルトの名無しさん
2025/05/02(金) 20:48:35.63ID:5gJO9Aey 筋肉ビルダーとして鍛えよう。AIには出来ない仕事だ
973デフォルトの名無しさん
2025/05/02(金) 20:49:38.85ID:tUdMCpmj シグネチャの範疇で済むものをキーワード名メソッドとして外に出して記述している
記述法にもよるが一覧性が低下する
記述法にもよるが一覧性が低下する
974デフォルトの名無しさん
2025/05/02(金) 20:50:39.57ID:tUdMCpmj そして記述漏れが出る恐れが出てくる
975デフォルトの名無しさん
2025/05/02(金) 20:54:15.01ID:bGn62aq8 Option型があると言っても
hoge(None, None, None, None, Some(1))
みたいなのはダサいよね
hoge(None, None, None, None, Some(1))
みたいなのはダサいよね
976デフォルトの名無しさん
2025/05/02(金) 20:56:32.63ID:tUdMCpmj structと整合性がない
977デフォルトの名無しさん
2025/05/02(金) 20:59:30.84ID:z720W3rP978デフォルトの名無しさん
2025/05/02(金) 21:00:36.60ID:z720W3rP >>976
嘘を付き出すのはよろしくないかと
嘘を付き出すのはよろしくないかと
レス数が950を超えています。1000を超えると書き込みができなくなります。
ニュース
- 高市首相、トランプ米大統領に「早期に会いたい」 日中関係悪化受け… ★4 [BFU★]
- テレビ朝日 本社から男性が転落し死亡。関連会社社員か 当たった通行人が左肩軽傷 [阿弥陀ヶ峰★]
- 【コメ】卸売業者「簡単に安売りできない」「大暴落起きれば大赤字に」 JA「新米の販売進度が近年になく遅い。コメの回転が悪い」 ★5 [Hitzeschleier★]
- テレビ朝日本社から20~30代の関連会社社員とみられる男性が転落し死亡 六本木けやき坂通りの通行人にはけが人なし [少考さん★]
- 「これいいじゃん!!!」 セブン-イレブンの1620円で買える“1人用クリスマスケーキ”🎂に注目殺到「天才すぎる」 [パンナ・コッタ★]
- 高市早苗首相が天理教系企業に“巨額発注” 総額5000万円 本人は「政治団体の活動に必要な支出」と回答 ★2 [Hitzeschleier★]
- 【高市速報】中国、最後通牒 [308389511]
- 渡邊渚さんなんで叩かれてんの?
- 好きなAV女優が倉本すみれ、柏木こなつ、松本いちかだが
- 旅行で行けるカッブル向けなおすすめの場所教えて
- 【速報】テレビ朝日本社から20代〜30代の男性が飛び降り自殺して死亡 東京・六本木 [597533159]
- お前らダウナー系だよな
