Rust part24at TECH
Rust part24 - 暇つぶし2ch1001:デフォルトの名無しさん
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:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch