Rust part24

レス数が1000を超えています。これ以上書き込みはできません。
2024/05/27(月) 06:41:26.82ID:T4AFD1f4
公式
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 part23
https://mevius.5ch.net/test/read.cgi/tech/1708677472/
982デフォルトの名無しさん
垢版 |
2024/07/28(日) 15:27:45.35ID:v6kdbv5j
>>978
LazyLockさようなら
に観えた
2024/07/28(日) 15:29:40.57ID:v6kdbv5j
>>979
RustとC++は相性最悪
RustとCは相性良いバッチリ
2024/07/30(火) 01:24:35.90ID:xgbf/AIH
>>979
この件って、RustはC++と比べて無駄にムーブするから遅いってこと?
2024/07/30(火) 06:04:09.29ID:RHAjweCG
無駄な移動は消える
cargo asmで生成コードを見ることでそれを確認できる
移動前と移動後のアドレスを表示させて最適化を阻害することで元は別々となる例も確認できる
986デフォルトの名無しさん
垢版 |
2024/07/30(火) 12:06:12.26ID:tiWzrJ23
>>984

>コンストラクタを抜けたとき、C++とちがってRustは値をムーブしちゃうので
>struct内部を参照したポインタが変なところを参照してバグる

って書いてるのに、読解力無い人?
2024/07/30(火) 19:02:27.28ID:dzXOiSL/
>>985
移動じゃなくてムーブね
ここまでのレスで使われてる述語を踏襲すればいいよ
2024/07/30(火) 20:13:33.28ID:VUdF4pDl
>>985
最適化のかかり具合でバグが消えたり現れたりする嫌なパターンだな
2024/07/30(火) 20:41:43.84ID:+5mpqNgW
>>986
Rustを使えばそんなバグは起きない
参照のライフタイムは参照先より長くなることがコンパイル時点で保証される

>>988
Rustならばそこでバグは起きようがない
990デフォルトの名無しさん
垢版 |
2024/07/30(火) 22:41:22.15ID:GjQxUZ/0
>>989
本人じゃないのに出しゃばらせて頂きますが…。

Rust単体じゃなくて、C++との相性問題ですよ。相性最悪って書いてるんだから。
起きようがないじゃなくて、実際に起きてるらしいじゃないですか。

最適化で治るのなら大したことじゃなくても、デバッグ時にハマるの確実な類のバグ。

将来的に全部Rustで書けば起きないような問題も、過渡期の今は良く起きます。

「Rustを使えば」「Rustなら」。
そうでしょうけど、実際問題ライブラリがなければ既存のC/C++ライブラリ使う場面は多々あるでしょう。
(枯れたライブラリならなおさら)

これはRustに限らず、後続の言語全てが抱えている問題です。
991デフォルトの名無しさん
垢版 |
2024/07/30(火) 22:49:06.91ID:MqLM+D1V
最適化じゃなくて単に移動の問題
Box::newで要素を直接ヒープに作れない (いちどスタックに作られてからコピーされる) のと同じで、コンストラクタを抜ける前に構造体が maybeuninit::assume_init で移動する
その上で構造体のアドレスがC++のメソッドにthisポインタとして渡される際に問題を引き起こす、というように思える
だとすると最適化の有無は関係なく起こる気がする

ついでにいえば >>987 もあまり意味のない発言で、移動はムーブの訳語でもある (例えばC++の仕様の訳語に移動コンストラクタという表現がある) し、そもそもこの問題はムーブセマンティクスによるものでもない
これはStringやVecが持つリソースを所有権ごと移動することで効率的に別の変数に割り当てるもので、構造体のアドレスのようなローレベルなものとは違うかと
992デフォルトの名無しさん
垢版 |
2024/07/30(火) 22:59:00.85ID:MqLM+D1V
移動とムーブが仕様として別物だというなら、移動は英語でどう表現されてるんだ?
2024/07/30(火) 23:00:06.83ID:L/ylOhaJ
>>990
それはRust単体では全く発生しない問題だね
C++とRustを併用する時にRustの知識を持たない人がハマるという話
FFI部分は両者の概念と挙動の違いの知識を持った人が作るべきだね
2024/07/30(火) 23:13:56.95ID:EnloT7kO
>>979
>>値をムーブしちゃうのでstruct内部を参照したポインタが変なところを参照してバグる

Rustでそのような自己参照はムーブでライフタイム切れとなるためバグは発生しなくて
自己参照を保ちたいならば値がムーブしなければよくて
値がムーブしないためにはスタック上でそのまま使うかヒープ上に確保して使えばよくて
それを保証するためにRustではPinという枠組みがあって安全に取り扱えるようになってるよ
995デフォルトの名無しさん
垢版 |
2024/07/30(火) 23:19:18.00ID:MqLM+D1V
>>994
bindgenの作者に言ってあげればいいと思うよ
ついでに改善したコードをPRしてコントリビュートしてみてはどうだろう
使用者のミスを擦るよりもずっと有意義なはず
996デフォルトの名無しさん
垢版 |
2024/07/30(火) 23:48:00.88ID:dZ3/RfBM
同意
997デフォルトの名無しさん
垢版 |
2024/07/31(水) 11:32:49.64ID:yHR2oE13
結合が密過ぎないかこの言語
998デフォルトの名無しさん
垢版 |
2024/07/31(水) 11:35:31.65ID:yHR2oE13
>将来的に全部Rustで書けば起きないような問題

さっさと仕事しろおまいらってことですね判ります
999デフォルトの名無しさん
垢版 |
2024/07/31(水) 12:10:03.24ID:yHR2oE13
>>985
Pin
1000デフォルトの名無しさん
垢版 |
2024/07/31(水) 12:10:59.00ID:yHR2oE13
Pin<Arc<T>>
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 65日 5時間 29分 33秒
レス数が1000を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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