[過去ログ] Rust part24 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
973
(1): 2024/07/25(木)22:41 ID:zdgCFOr2(1/2) AAS
クレートではないけれど今日リリースのRust 1.80でLazyCell, LazyLockが安定版に入ったよ
グローバルな変数を外部クレート無しで書きやすくなる
974
(1): 2024/07/25(木)22:49 ID:9YYk7vP+(1) AAS
>>973
それ、OnceCell使ってたコードは全部置き換えた方がいい奴?
975: 2024/07/25(木)23:18 ID:zdgCFOr2(2/2) AAS
>>974
自分はそれを言えるほど詳しくないけど、必ずしも必要ではないと思う
依存クレートを減らせる点で嬉しいし、今から書くコードでは新しいものにして良いと思うけど、今使ってるものをすぐに置き換える必要があるとまでは思わない
特にライブラリを作ってる場合は、rustcを今日リリースされたばかりの最新バージョンに上げないとライブラリをビルドできなくなるということなので、もう少し待った方が良いかもしれない
976: 2024/07/26(金)00:25 ID:/65SSmn2(1/2) AAS
OnceLockからLazyLockへ移行すると
変数宣言と初期化関数が離れていた可読性の問題が解決するとともに
例えばget_or_initを一箇所にするために一つ関数を用意したりするなどしていた手間も省けるようになるね
そして何よりも最大のメリットはDerefによりアクセスできる利便性
977: 2024/07/26(金)23:32 ID:/65SSmn2(2/2) AAS
とりあえず定番のこのあたりを置き換えた
static RE: LazyLock<Regex> = LazyLock::new(|| Regex::new("...").unwrap());
static SE: LazyLock<Selector> = LazyLock::new(|| Selector::parse("...").unwrap());
978
(1): 2024/07/27(土)11:02 ID:WfV9QQMJ(1) AAS
LazyLockよさそうね
979
(3): 2024/07/27(土)18:38 ID:U5WpGSyZ(1/2) AAS
俺の今日のハマりポイントを紹介

bindgenにC++のコンストラクタを作らせると、データが壊れる
よく調べたら公式ドキュメントのConstructor semanticsに書いてあった
外部リンク[html]:rust-lang.github.io

コンストラクタを抜けたとき、C++とちがってRustは値をムーブしちゃうので
struct内部を参照したポインタが変なところを参照してバグる
980
(2): 2024/07/27(土)19:30 ID:s18eFGvS(1) AAS
C++も部分的に使えるとはいえ、FFIするならCのAPIにしておく方が無難な気はする
981: 2024/07/27(土)20:04 ID:U5WpGSyZ(2/2) AAS
>>980
bindgenはFirefoxがプロダクトでたくさん使ってるって聞いて、いけると思ったんだ
Firefoxは大半がC++だから
982: 2024/07/28(日)15:27 ID:v6kdbv5j(1/2) AAS
>>978
LazyLockさようなら
に観えた
983: 2024/07/28(日)15:29 ID:v6kdbv5j(2/2) AAS
>>979
RustとC++は相性最悪
RustとCは相性良いバッチリ
984
(1): 2024/07/30(火)01:24 ID:xgbf/AIH(1) AAS
>>979
この件って、RustはC++と比べて無駄にムーブするから遅いってこと?
985
(3): 2024/07/30(火)06:04 ID:RHAjweCG(1) AAS
無駄な移動は消える
cargo asmで生成コードを見ることでそれを確認できる
移動前と移動後のアドレスを表示させて最適化を阻害することで元は別々となる例も確認できる
986
(1): 2024/07/30(火)12:06 ID:tiWzrJ23(1) AAS
>>984

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

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

>>988
Rustならばそこでバグは起きようがない
990
(1): 2024/07/30(火)22:41 ID:GjQxUZ/0(1) AAS
>>989
本人じゃないのに出しゃばらせて頂きますが…。

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

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

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

「Rustを使えば」「Rustなら」。
そうでしょうけど、実際問題ライブラリがなければ既存のC/C++ライブラリ使う場面は多々あるでしょう。
(枯れたライブラリならなおさら)
省1
991: 2024/07/30(火)22:49 ID:MqLM+D1V(1/3) AAS
最適化じゃなくて単に移動の問題
Box::newで要素を直接ヒープに作れない (いちどスタックに作られてからコピーされる) のと同じで、コンストラクタを抜ける前に構造体が maybeuninit::assume_init で移動する
その上で構造体のアドレスがC++のメソッドにthisポインタとして渡される際に問題を引き起こす、というように思える
だとすると最適化の有無は関係なく起こる気がする

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

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

さっさと仕事しろおまいらってことですね判ります
999: 2024/07/31(水)12:10 ID:yHR2oE13(3/4) AAS
>>985
Pin
1000: 2024/07/31(水)12:10 ID:yHR2oE13(4/4) AAS
Pin<Arc<T>>
1001
(1): 1001 ID:Thread(1/2) AAS
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 65日 5時間 29分 33秒
1002
(1): 1002 ID:Thread(2/2) AAS
5ちゃんねるの運営はUPLIFT会員の皆さまに支えられています。
運営にご協力お願いいたします。

───────────────────
《UPLIFT会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
4 USD/mon. から匿名でご購入いただけます。
省4
1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.023s