24/07/28 15:27:45.35 v6kdbv5j.net
>>978
LazyLockさようなら
に観えた
1002:デフォルトの名無しさん
24/07/28 15:29:40.57 v6kdbv5j.net
>>979
RustとC++は相性最悪
RustとCは相性良いバッチリ
1003:デフォルトの名無しさん
24/07/30 01:24:35.90 xgbf/AIH.net
>>979
この件って、RustはC++と比べて無駄にムーブするから遅いってこと?
1004:デフォルトの名無しさん
24/07/30 06:04:09.29 RHAjweCG.net
無駄な移動は消える
cargo asmで生成コードを見ることでそれを確認できる
移動前と移動後のアドレスを表示させて最適化を阻害することで元は別々となる例も確認できる
1005:デフォルトの名無しさん
24/07/30 12:06:12.26 tiWzrJ23.net
>>984
>コンストラクタを抜けたとき、C++とちがってRustは値をムーブしちゃうので
>struct内部を参照したポインタが変なところを参照してバグる
って書いてるのに、読解力無い人?
1006:デフォルトの名無しさん
24/07/30 19:02:27.28 dzXOiSL/.net
>>985
移動じゃなくてムーブね
ここまでのレスで使われてる述語を踏襲すればいいよ
1007:デフォルトの名無しさん
24/07/30 20:13:33.28 VUdF4pDl.net
>>985
最適化のかかり具合でバグが消えたり現れたりする嫌なパターンだな
1008:デフォルトの名無しさん
24/07/30 20:41:43.84 +5mpqNgW.net
>>986
Rustを使えばそんなバグは起きない
参照のライフタイムは参照先より長くなることがコンパイル時点で保証される
>>988
Rustならばそこでバグは起きようがない
1009:デフォルトの名無しさん
24/07/30 22:41:22.15 GjQxUZ/0.net
>>989
本人じゃないのに出しゃばらせて頂きますが…。
Rust単体じゃなくて、C++との相性問題ですよ。相性最悪って書いてるんだから。
起きようがないじゃなくて、実際に起きてるらしいじゃないですか。
最適化で治るのなら大したことじゃなくても、デバッグ時にハマるの確実な類のバグ。
将来的に全部Rustで書けば起きないような問題も、過渡期の今は良く起きます。
「Rustを使えば」「Rustなら」。
そうでしょうけど、実際問題ライブラリがなければ既存のC/C++ライブラリ使う場面は多々あるでしょう。
(枯れたライブラリならなおさら)
これはRustに限らず、後続の言語全てが抱えている問題です。
1010:デフォルトの名無しさん
24/07/30 22:49:06.91 MqLM+D1V.net
最適化じゃなくて単に移動の問題
Box::newで要素を直接ヒープに作れない (いちどスタックに作られてからコピーされる) のと同じで、コンストラクタを抜ける前に構造体が maybeuninit::assume_init で移動する
その上で構造体のアドレスがC++のメソッドにthisポインタとして渡される際に問題を引き起こす、というように思える
だとすると最適化の有無は関係なく起こる気がする
ついでにいえば >>987 もあまり意味のない発言で、移動はムーブの訳語でもある (例えばC++の仕様の訳語に移動コンストラクタという表現がある) し、そもそもこの問題はムーブセマンティクスによるものでもない
これはStringやVecが持つリソースを所有権ごと移動することで効率的に別の変数に割り当てるもので、構造体のアドレスのようなローレベルなものとは違うかと
1011:デフォルトの名無しさん
24/07/30 22:59:00.85 MqLM+D1V.net
移動とムーブが仕様として別物だというなら、移動は英語でどう表現されてるんだ?
1012:デフォルトの名無しさん
24/07/30 23:00:06.83 L/ylOhaJ.net
>>990
それはRust単体では全く発生しない問題だね
C++とRustを併用する時にRustの知識を持たない人がハマるという話
FFI部分は両者の概念と挙動の違いの知識を持った人が作るべきだね
1013:デフォルトの名無しさん
24/07/30 23:13:56.95 EnloT7kO.net
>>979
>>値をムーブしちゃうのでstruct内部を参照したポインタが変なところを参照してバグる
Rustでそのような自己参照はムーブでライフタイム切れとなるためバグは発生しなくて
自己参照を保ちたいならば値がムーブしなければよくて
値がムーブしないためにはスタック上でそのまま使うかヒープ上に確保して使えばよくて
それを保証するためにRustではPinという枠組みがあって安全に取り扱えるようになってるよ
1014:デフォルトの名無しさん
24/07/30 23:19:18.00 MqLM+D1V.net
>>994
bindgenの作者に言ってあげればいいと思うよ
ついでに改善したコードをPRしてコントリビュートしてみてはどうだろう
使用者のミスを擦るよりもずっと有意義なはず
1015:デフォルトの名無しさん
24/07/30 23:48:00.88 dZ3/RfBM.net
同意
1016:デフォルトの名無しさん
24/07/31 11:32:49.64 yHR2oE13.net
結合が密過ぎないかこの言語
1017:デフォルトの名無しさん
24/07/31 11:35:31.65 yHR2oE13.net
>将来的に全部Rustで書けば起きないような問題
さっさと仕事しろおまいらってことですね判ります
1018:デフォルトの名無しさん
24/07/31 12:10:03.24 yHR2oE13.net
>>985
Pin
1019:デフォルトの名無しさん
24/07/31 12:10:59.00 yHR2oE13.net
Pin<Arc<T>>
1020:1001
Over 1000 Thread Thread.net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 65日 5時間 29分 33秒
1021:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています