公式
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 part32
https://mevius.5ch.net/test/read.cgi/tech/1755057787/
Rust part31 https://mevius.5ch.net/test/read.cgi/tech/1751545806/
Rust part30 https://mevius.5ch.net/test/read.cgi/tech/1748392296/
ワッチョイスレ
プログラミング言語 Rust 4【ワッチョイ】
https://mevius.5ch.net/test/read.cgi/tech/1514107621/
Rust part33
1デフォルトの名無しさん
2025/08/15(金) 17:49:30.70ID:N8TIzbWg470デフォルトの名無しさん
2025/10/30(木) 10:48:00.79ID:JG/b/82+ なのでそれを常識としてOnceXxxxとLazyXxxxの性質の違いの話かと
471デフォルトの名無しさん
2025/10/30(木) 10:52:57.20ID:zpGcc97R >>458
共有前にmainで必ず初期化するのであれば
共有後に毎回初期化済みかチェックする必要ない
逆に共有後の初回アクセス時に初期化するという形をとるなら
初期化済みかどうか毎回チェックするようなコードがどこかに必要
毎回チェックするコードを自分で書きたくなければ
LazyLock等に肩代わりしてもらえという話
共有前にmainで必ず初期化するのであれば
共有後に毎回初期化済みかチェックする必要ない
逆に共有後の初回アクセス時に初期化するという形をとるなら
初期化済みかどうか毎回チェックするようなコードがどこかに必要
毎回チェックするコードを自分で書きたくなければ
LazyLock等に肩代わりしてもらえという話
472デフォルトの名無しさん
2025/10/30(木) 11:04:47.24ID:zpGcc97R >>466,470
LazyCell/LazyLockのget/get_mutがもうすぐstabilizeされるから
初期化以前はNoneを返すというのはどちらでも同じようにできるようになる
初期化関数で引数を受け取る必要もなく常に固定の初期化関数を実行すればいいだけならLazyCell/LazyLock
引数を受け取ったり条件によって違う初期化関数を実行したい場合はOnceCell/OnceLock
これが基本的な使い分け
LazyCell/LazyLockのget/get_mutがもうすぐstabilizeされるから
初期化以前はNoneを返すというのはどちらでも同じようにできるようになる
初期化関数で引数を受け取る必要もなく常に固定の初期化関数を実行すればいいだけならLazyCell/LazyLock
引数を受け取ったり条件によって違う初期化関数を実行したい場合はOnceCell/OnceLock
これが基本的な使い分け
473デフォルトの名無しさん
2025/10/30(木) 11:23:27.81ID:JG/b/82+ 使い勝手が天と地の差
Lazy~はderefできるから*Xでアクセスできてコードも見やすい
Once~は返値Option処理かget_or_init(|| ...)が必要
Lazy~はderefできるから*Xでアクセスできてコードも見やすい
Once~は返値Option処理かget_or_init(|| ...)が必要
474デフォルトの名無しさん
2025/10/30(木) 11:31:00.93ID:Nj0jrilV シングルスレッド+遅延評価ではタイミングが不明
別スレッドのスタックに置けば遅延しないのでかえって違和感が少ない
別スレッドのスタックに置けば遅延しないのでかえって違和感が少ない
475デフォルトの名無しさん
2025/10/30(木) 12:35:20.68ID:zpGcc97R >>473
それは使い分けの結果であって原因ではないからな
LazyCell/LazyLockでもinterior mutabilityを使えば
初期化時に引数を受け取るのと同じようなことができるが
get_or_init以上に使い勝手が悪化するから
derefしたいかどうかで選ぶものではない
それは使い分けの結果であって原因ではないからな
LazyCell/LazyLockでもinterior mutabilityを使えば
初期化時に引数を受け取るのと同じようなことができるが
get_or_init以上に使い勝手が悪化するから
derefしたいかどうかで選ぶものではない
476デフォルトの名無しさん
2025/10/30(木) 13:04:12.82ID:Nj0jrilV Option処理をしたくないとき
JavaにたとえるとNullPointerExceptionをcatchしたくないとき
必要なのは「catchされませんでした」みたいなパニックを容認すること
これがスタンダード
unsafeが必要だという考えはスタンダードではない
JavaにたとえるとNullPointerExceptionをcatchしたくないとき
必要なのは「catchされませんでした」みたいなパニックを容認すること
これがスタンダード
unsafeが必要だという考えはスタンダードではない
477デフォルトの名無しさん
2025/10/30(木) 13:10:40.17ID:Nj0jrilV unsafeもpanicもどっちも自由に使えばいい
panicを禁止するためにunsafeを使いたいのだとしたら自由とは言えない
panicを禁止するためにunsafeを使いたいのだとしたら自由とは言えない
478デフォルトの名無しさん
2025/10/30(木) 21:08:57.21ID:8A2yOaqe479デフォルトの名無しさん
2025/10/30(木) 21:45:45.78ID:pM7Xv5YE 例外処理でも条件分岐でも、わざわざ明記することはあっても、いつもそんな起きないことを書いていたら、他人には起きる例外だと認識されてしまう。
480デフォルトの名無しさん
2025/10/30(木) 21:53:26.04ID:Nj0jrilV Optionは長さに制限があるキューと考えられる
キューが空なら読む側はブロックすればいいのにブロックしないから無駄に複雑になる
キューが空なら読む側はブロックすればいいのにブロックしないから無駄に複雑になる
481デフォルトの名無しさん
2025/10/30(木) 21:56:50.09ID:i4jbq83k ?
482デフォルトの名無しさん
2025/10/30(木) 21:59:43.38ID:JG/b/82+ >>475
そこは併用することで解決できる
まずOnceLockで変数FOOの場合
初期化は例えばこうなる
static FOO: OnceLock<String> = OnceLock::new();
let foo = std::env::var("FOO").expect("no 環境変数FOO");
FOO.set(foo).expect("FOO: 初期化済");
このOnceLockのFOOの利用はこうなり可読性の悪い欠点がある
println!("FOO: {}", FOO.get().expect("FOO: 未初期化"));
一方でLazeLockで変数BARの場合
初期化で引数を渡せない欠点を先程のFOO活用で補える
static BAR: LazyLock<String> = LazyLock::new(|| BAR初期化関数(FOO.get().expect("FOO: not initialized")));
fn BAR初期化関数(foo: &str) -> String {
format!("適当に{foo}を変換")
}
このLazyLockのBARの利用はderefでこうなり可読性が向上する
println!("BAR: {}", *BAR);
そこは併用することで解決できる
まずOnceLockで変数FOOの場合
初期化は例えばこうなる
static FOO: OnceLock<String> = OnceLock::new();
let foo = std::env::var("FOO").expect("no 環境変数FOO");
FOO.set(foo).expect("FOO: 初期化済");
このOnceLockのFOOの利用はこうなり可読性の悪い欠点がある
println!("FOO: {}", FOO.get().expect("FOO: 未初期化"));
一方でLazeLockで変数BARの場合
初期化で引数を渡せない欠点を先程のFOO活用で補える
static BAR: LazyLock<String> = LazyLock::new(|| BAR初期化関数(FOO.get().expect("FOO: not initialized")));
fn BAR初期化関数(foo: &str) -> String {
format!("適当に{foo}を変換")
}
このLazyLockのBARの利用はderefでこうなり可読性が向上する
println!("BAR: {}", *BAR);
483デフォルトの名無しさん
2025/10/30(木) 22:01:59.88ID:dCoHjFig そういうのは一番嫌われる
484デフォルトの名無しさん
2025/10/30(木) 22:02:57.95ID:dCoHjFig 意味のない値に意味を持たせるのは最悪
485デフォルトの名無しさん
2025/10/30(木) 22:17:52.20ID:JG/b/82+ FOOやBARは例示で用いる昔からの慣習だよ
Rustの標準ライブラリのdocでも使われてるよ
Rustの標準ライブラリのdocでも使われてるよ
486デフォルトの名無しさん
2025/10/30(木) 23:31:49.22ID:Nj0jrilV 2進数に集合の意味をもたせるとか、方程式に図形の意味をもたせるとかね
487デフォルトの名無しさん
2025/10/31(金) 00:39:35.14ID:Z56C2bCz488デフォルトの名無しさん
2025/10/31(金) 01:23:46.44ID:UvKtMOZk #defineが嫌われていなければexpect云々を#defineするだけで解決するが
嫌われているのが現実?
いや、好感度など無視して解決可能というのが現実じゃないか
嫌われているのが現実?
いや、好感度など無視して解決可能というのが現実じゃないか
489デフォルトの名無しさん
2025/10/31(金) 01:26:08.34ID:VeWziky5 C/C++のクセで毎回、何かを確認しないといけないと思い込んでいるのかな?
490デフォルトの名無しさん
2025/10/31(金) 01:36:15.69ID:bL01KoQp LazyLockは変数宣言を見れば初期化のための式や関数を追える点でも可読性いいよな
491デフォルトの名無しさん
2025/10/31(金) 02:15:05.64ID:IDNiCq6B Cellを激推ししてた時代の複オジを思い出した
成長しないね
成長しないね
492デフォルトの名無しさん
2025/10/31(金) 03:52:17.44ID:VeWziky5 C++のように使いたい人間がいるから面倒なんだよなあ
493デフォルトの名無しさん
2025/10/31(金) 04:51:55.42ID:FXqlUjZZ 久しぶりにC++いじったら、依存ライブラリ管理がめんどくさすぎてキレそうになった
cargoはえらい
cmake大嫌い
cargoはえらい
cmake大嫌い
494デフォルトの名無しさん
2025/10/31(金) 07:07:09.98ID:W/94wpUF OnceLockやLazyLockを嫌いな人は代わりに何を使っているの?
495デフォルトの名無しさん
2025/10/31(金) 08:13:57.15ID:UvKtMOZk Mutex<Option<T>>
496デフォルトの名無しさん
2025/10/31(金) 08:16:32.55ID:W/94wpUF >>495
デタラメな回答はダメ
デタラメな回答はダメ
497デフォルトの名無しさん
2025/10/31(金) 08:43:37.37ID:zOlX52p0 初心に帰ろう
static mut FOO: MaybeUninit<Foo> = MaybeUninit::zeroed();
static mut FOO: MaybeUninit<Foo> = MaybeUninit::zeroed();
498デフォルトの名無しさん
2025/10/31(金) 08:47:38.08ID:W/94wpUF unsafeは論外
499デフォルトの名無しさん
2025/10/31(金) 11:44:05.74ID:UvKtMOZk デタラメがダメならやはり
ウソでも本当でもないポストモダンみたいな言葉を話すのが一つの手段なんだよな
ウソでも本当でもないポストモダンみたいな言葉を話すのが一つの手段なんだよな
500デフォルトの名無しさん
2025/10/31(金) 14:32:08.02ID:6Y8XYqCD501デフォルトの名無しさん
2025/10/31(金) 14:41:51.16ID:UvKtMOZk まあいいじゃんそういうの
502デフォルトの名無しさん
2025/10/31(金) 14:48:40.46ID:23LwyDl2 >>500
exampleで本題ではないエラー処理を略すのは常識なんだがdoc.rust-lang.org見たことない人なんやろか
exampleで本題ではないエラー処理を略すのは常識なんだがdoc.rust-lang.org見たことない人なんやろか
503デフォルトの名無しさん
2025/10/31(金) 16:19:06.11ID:Q4NMZH5V 現実にはあり得ないコードで可読性を論じるおバカさん乙
504デフォルトの名無しさん
2025/10/31(金) 16:34:52.47ID:nOVciEeR 代案を出せばいいんじゃね
505デフォルトの名無しさん
2025/10/31(金) 18:21:19.45ID:UvKtMOZk 案が増える保証はどこにもない
コメのように減産も増産もありうる
コメのように減産も増産もありうる
506デフォルトの名無しさん
2025/10/31(金) 18:29:01.57ID:GZFK+llv 「批判するなら代案だせ」ww
度し難いクソコードに代案を求めるなよ
しかも既に代案出してもらってるというのにこのバカは
度し難いクソコードに代案を求めるなよ
しかも既に代案出してもらってるというのにこのバカは
507デフォルトの名無しさん
2025/10/31(金) 18:45:07.30ID:Gjt4wm2R OnceLockとLazyLockがクソコードってRustのスレッドセーフ初期化で辿り着いた最善案なのに
508デフォルトの名無しさん
2025/10/31(金) 18:47:08.71ID:FXqlUjZZ 代案はZigを使うこと
509デフォルトの名無しさん
2025/10/31(金) 19:49:57.01ID:MSFuZ4Ne 昔は初期化のためにlazy_static!が使われてた
そこへ改良されたonce_cell::sync::Lazyが登場した
それを標準ライブラリに取り込んだのがstd::sync::LazyLockで最終形
そこへ改良されたonce_cell::sync::Lazyが登場した
それを標準ライブラリに取り込んだのがstd::sync::LazyLockで最終形
510デフォルトの名無しさん
2025/10/31(金) 20:47:30.17ID:T+pQSrXv 質問者が消えて要件不明なのにいつまでも基礎的な部分を整理だけし続けるいつものやつ
511デフォルトの名無しさん
2025/10/31(金) 21:12:30.84ID:UvKtMOZk ギリギリセーフは最善ではない
細かいルールに依存してしまうので些細なルール変更でアウトになる
という基礎知識
細かいルールに依存してしまうので些細なルール変更でアウトになる
という基礎知識
512デフォルトの名無しさん
2025/10/31(金) 21:15:37.01ID:+FXrANIZ >>495
MutexとLazyLockは役割が全く異なる。
staticで使う場合にその目的に応じて以下の3つに使い分けられる。
LazyLock<T> 内部可変は不要で動的初期化をしたい場合
Mutex<T> 内部可変が必要で静的初期化をしたい場合
LazyLock<Mutex<T>> 内部可変が必要で動的初期化をしたい場合
MutexとLazyLockは役割が全く異なる。
staticで使う場合にその目的に応じて以下の3つに使い分けられる。
LazyLock<T> 内部可変は不要で動的初期化をしたい場合
Mutex<T> 内部可変が必要で静的初期化をしたい場合
LazyLock<Mutex<T>> 内部可変が必要で動的初期化をしたい場合
513デフォルトの名無しさん
2025/10/31(金) 21:45:15.58ID:T+pQSrXv 内部可変ってそういう意味じゃねえから
514デフォルトの名無しさん
2025/10/31(金) 21:48:39.11ID:nBW4bT0X このようにRustは非常に使いにくい言語です
515デフォルトの名無しさん
2025/10/31(金) 22:01:01.32ID:UvKtMOZk 初期化と代入の役割は全く異なるとも言えるし、ほとんど同じとも言える
これも逆転しやすい
些細な変化で善悪が逆転する
これも逆転しやすい
些細な変化で善悪が逆転する
516デフォルトの名無しさん
2025/10/31(金) 22:20:06.99ID:Bc1Z9Piy517デフォルトの名無しさん
2025/10/31(金) 22:21:19.33ID:Bc1Z9Piy 間違えた
クソコードは>>482だった
クソコードは>>482だった
518デフォルトの名無しさん
2025/10/31(金) 22:40:17.03ID:+FXrANIZ519デフォルトの名無しさん
2025/10/31(金) 23:01:52.93ID:UvKtMOZk 任意のTを実体化可能
内部可変を禁止できると思ってるなら事実誤認
内部可変を禁止できると思ってるなら事実誤認
520デフォルトの名無しさん
2025/10/31(金) 23:53:36.36ID:8btOyh6t >>516
コード見たけど何が問題なのか教えて
コード見たけど何が問題なのか教えて
521デフォルトの名無しさん
2025/11/01(土) 10:00:34.52ID:aFOqjWrP >>520
482みたいなAIやら人工知能に書かせたコードの善し悪しなんて語っても無駄
482みたいなAIやら人工知能に書かせたコードの善し悪しなんて語っても無駄
522デフォルトの名無しさん
2025/11/01(土) 10:21:55.29ID:uKbhU6EZ 生成AIのほうが>>482なんかよりはるかにまともなコード書くぞ
523デフォルトの名無しさん
2025/11/01(土) 10:29:48.54ID:uKbhU6EZ 試しにChatGPTになぜクソコードなのか聞いてみた
====
以下のコードがクソコードだと言われました。なぜクソコードなのでしょうか? どうすればクソコードじゃなくなりますか?
とても良い質問です。
このコード、**「動くけど設計として危険・臭い」**という典型的なクソコード(=悪い設計例)です。
なぜそう言われるか、そしてどう直せばいいか、順を追って説明します。
なぜ「クソコード」扱いされるのか
@ グローバル変数依存(隠れた順序依存)
BAR は FOO の値に依存しているのに、Rustの型システムではそれが表現されていません。
FOOをセットしてからBARを使うという順序前提が、コードの外にあります。
つまり:
…
A LazyLock と OnceLock の使い分けが不自然
FOO は「後でセットする」ための OnceLock
BAR は「自動で初期化する」ための LazyLock
しかし BAR の初期化に FOO が必要ということは、BAR の「自動初期化」が成立していません。
結局「FOOが先に初期化されていないと壊れる」=「LazyなのにLazyでいられない」状態です。
…
B 初期化エラーが実行時panic
expect("FOO: not initialized") は、
BARを最初に触ったタイミングでFOOが未初期化だったらpanic
という非常に脆い構造です。
初期化の安全性がコンパイル時に保証されず、実行時の偶然に依存しています。
…
====
以下のコードがクソコードだと言われました。なぜクソコードなのでしょうか? どうすればクソコードじゃなくなりますか?
とても良い質問です。
このコード、**「動くけど設計として危険・臭い」**という典型的なクソコード(=悪い設計例)です。
なぜそう言われるか、そしてどう直せばいいか、順を追って説明します。
なぜ「クソコード」扱いされるのか
@ グローバル変数依存(隠れた順序依存)
BAR は FOO の値に依存しているのに、Rustの型システムではそれが表現されていません。
FOOをセットしてからBARを使うという順序前提が、コードの外にあります。
つまり:
…
A LazyLock と OnceLock の使い分けが不自然
FOO は「後でセットする」ための OnceLock
BAR は「自動で初期化する」ための LazyLock
しかし BAR の初期化に FOO が必要ということは、BAR の「自動初期化」が成立していません。
結局「FOOが先に初期化されていないと壊れる」=「LazyなのにLazyでいられない」状態です。
…
B 初期化エラーが実行時panic
expect("FOO: not initialized") は、
BARを最初に触ったタイミングでFOOが未初期化だったらpanic
という非常に脆い構造です。
初期化の安全性がコンパイル時に保証されず、実行時の偶然に依存しています。
…
524デフォルトの名無しさん
2025/11/01(土) 10:30:45.08ID:uKbhU6EZ 「動くけど設計として危険・臭い」という典型的なクソコードです!
525デフォルトの名無しさん
2025/11/01(土) 10:55:39.21ID:/uJItwLS なぜAIはクソかを質問して
「AIの学習に人間が必要ということは自動初期化が成立していません」を生成できたら少しは信用できる
「AIの学習に人間が必要ということは自動初期化が成立していません」を生成できたら少しは信用できる
526デフォルトの名無しさん
2025/11/01(土) 10:58:56.69ID:g3WZAZrD >>518
たぶんRefCell/Mutex/RwLockあたりのロック付き型のことを内部可変性って呼んでるんだろうなって思ったけど
>不変参照しか持たない場合でも可変な借用を得られる仕組みが内部可変性。
この説明ならやっぱりそういう意味で書いてそうだね
Cell<T>もAtomic***も、さらに言えばLazyCell<T>も内部可変じゃないことになるが、まあそんなわけはないのでちゃんとドキュメント読んでね
たぶんRefCell/Mutex/RwLockあたりのロック付き型のことを内部可変性って呼んでるんだろうなって思ったけど
>不変参照しか持たない場合でも可変な借用を得られる仕組みが内部可変性。
この説明ならやっぱりそういう意味で書いてそうだね
Cell<T>もAtomic***も、さらに言えばLazyCell<T>も内部可変じゃないことになるが、まあそんなわけはないのでちゃんとドキュメント読んでね
527デフォルトの名無しさん
2025/11/01(土) 11:04:56.46ID:mdP806Ha 言語に関係なく初期化ルーチンで必ず初期化を行なうグローバル変数などについては依存関係があってもいいんだよ
今回の場合は万が一その依存関係が崩れていればpanicで落ちるから完璧に安全でしょう
まずいのは依存関係が崩れても検知ができずに間違った未初期化の値のままプログラムが進むこと
Rustのpanicはこの基本概念に基づいて安全性のために存在しています
今回の場合は万が一その依存関係が崩れていればpanicで落ちるから完璧に安全でしょう
まずいのは依存関係が崩れても検知ができずに間違った未初期化の値のままプログラムが進むこと
Rustのpanicはこの基本概念に基づいて安全性のために存在しています
528デフォルトの名無しさん
2025/11/01(土) 11:40:18.77ID:M9NY+bCI >>526
Rustでは内部可変を段階的に説明していてどちらも正しい。
一番の基本は、内部可変とは不変参照しか持たない時でも可変を許すパターン
https://doc.rust-lang.org/book/ch15-05-interior-mutability.html
Interior mutability is a design pattern in Rust that allows you to mutate data even when there are immutable references to that data
通常の説明ではこれで問題ない。
一方であなたの説明では一番大事な正確な定義が抜けているが、
Rustで内部可変とはUnsafeCellを用いていること、すなわちトレイトFreezeを実装していない!Freeze型を指す。
この!Freeze型とは内部可変をもたらすUnsafeCellを用いているか否かを示している。
AtomicもMutexもLazyLockも全て元を辿るとUnsafeCellが使われていて自動的に!Freeze型となる。
もちろん普段の説明ではこの厳密な定義を用いずに、内部可変とは不変参照しかない時でも可変を得られること、で構わないと思う。
Rustでは内部可変を段階的に説明していてどちらも正しい。
一番の基本は、内部可変とは不変参照しか持たない時でも可変を許すパターン
https://doc.rust-lang.org/book/ch15-05-interior-mutability.html
Interior mutability is a design pattern in Rust that allows you to mutate data even when there are immutable references to that data
通常の説明ではこれで問題ない。
一方であなたの説明では一番大事な正確な定義が抜けているが、
Rustで内部可変とはUnsafeCellを用いていること、すなわちトレイトFreezeを実装していない!Freeze型を指す。
この!Freeze型とは内部可変をもたらすUnsafeCellを用いているか否かを示している。
AtomicもMutexもLazyLockも全て元を辿るとUnsafeCellが使われていて自動的に!Freeze型となる。
もちろん普段の説明ではこの厳密な定義を用いずに、内部可変とは不変参照しかない時でも可変を得られること、で構わないと思う。
529デフォルトの名無しさん
2025/11/01(土) 13:01:38.93ID:s4kd72Pi コード書くときにこういった謎の禅問答みたいなことを延々と続けてるのか
大変だな
大変だな
530デフォルトの名無しさん
2025/11/01(土) 13:03:56.65ID:g3WZAZrD "allows you to mutate data"に対して「可変な借用を得られる」だと制限が強すぎて間違いだったのを理解したので
>>528では最初からそう言いたかったんですよってフリで「可変を許す」「可変を得られる」みたいな曖昧な表現にしれっと置き換える
これが所有権の複製話法です
>>528では最初からそう言いたかったんですよってフリで「可変を許す」「可変を得られる」みたいな曖昧な表現にしれっと置き換える
これが所有権の複製話法です
531デフォルトの名無しさん
2025/11/01(土) 13:08:31.28ID:c42kdQyz rustは外部のライブラリーに依存しないで書くのは難しいような気がするのだが
532デフォルトの名無しさん
2025/11/01(土) 13:08:31.85ID:TYBdxLbV533デフォルトの名無しさん
2025/11/01(土) 13:19:59.11ID:QjdiwYjo534デフォルトの名無しさん
2025/11/01(土) 13:26:36.27ID:am2mePEs535デフォルトの名無しさん
2025/11/01(土) 13:28:11.18ID:b0QDefmP rustは(知った被りアンチも多く嘘や不正確な情報が蔓延しているので)使いにくい
536デフォルトの名無しさん
2025/11/01(土) 13:35:00.58ID:c42kdQyz rustはeatherはresultがあるから要らないといってなくなったらしいが、
errorのところにerrorじゃないものを入れてokのところに、
okじゃないものを入れるのにみんな抵抗感は感じないのだろうか
errorのところにerrorじゃないものを入れてokのところに、
okじゃないものを入れるのにみんな抵抗感は感じないのだろうか
537デフォルトの名無しさん
2025/11/01(土) 13:37:12.17ID:s4kd72Pi GCに依存できる環境だとここまで考えなくてもいいんでしょ?
大変は大変でその代わりメリットがあると
大変は大変でその代わりメリットがあると
538デフォルトの名無しさん
2025/11/01(土) 13:39:02.26ID:QjdiwYjo >>537
GC言語にも抽象度の高い言語があるからそこは関係ないよ
GC言語にも抽象度の高い言語があるからそこは関係ないよ
539デフォルトの名無しさん
2025/11/01(土) 13:41:49.38ID:9L/RTK5n540デフォルトの名無しさん
2025/11/01(土) 13:51:01.37ID:w12b3puC >>536
Result型を本来の用途以外で使ったらコードレビューで絶対リジェクトされると思うよ
ResultとOptionは実用上での利用が多かったから標準ライブラリに入ったのであって、Eitherが使いたかったら外部ライブラリ使うか自作すればいい
Result型を本来の用途以外で使ったらコードレビューで絶対リジェクトされると思うよ
ResultとOptionは実用上での利用が多かったから標準ライブラリに入ったのであって、Eitherが使いたかったら外部ライブラリ使うか自作すればいい
541デフォルトの名無しさん
2025/11/01(土) 13:57:10.92ID:W6xNe0tO >>540
そんなことはない
標準ライブラリでもErrorを拡大解釈してエラー以外に用いている
特に多いのが値の返還にResultのErrorを利用
左右対称ならResultを使わずにeither crateを使うべき
そんなことはない
標準ライブラリでもErrorを拡大解釈してエラー以外に用いている
特に多いのが値の返還にResultのErrorを利用
左右対称ならResultを使わずにeither crateを使うべき
542デフォルトの名無しさん
2025/11/01(土) 14:22:52.12ID:t+20UcyI >>534
基本的な概念や仕組みを知らないままバイブコーディングしていたらコードレビューもできずに詰みそう
基本的な概念や仕組みを知らないままバイブコーディングしていたらコードレビューもできずに詰みそう
543デフォルトの名無しさん
2025/11/01(土) 14:52:04.69ID:/uJItwLS 謎の禅問答を学習したら知能は増え信者は減る?
いや信者が増える方が宗教だろ
科学を舐めるな
いや信者が増える方が宗教だろ
科学を舐めるな
544デフォルトの名無しさん
2025/11/01(土) 15:33:03.66ID:SAJJpDfX 複オジは嘘ばっかりだな
545デフォルトの名無しさん
2025/11/01(土) 15:37:15.60ID:8wHtIByR 抽象化を理解できずに謎の禅問答にみえる新たな科学かもしれぬ
546デフォルトの名無しさん
2025/11/01(土) 18:01:00.80ID:W1T4uP/l 複おじもはや一周回ってRustアンチまである
547デフォルトの名無しさん
2025/11/01(土) 19:00:08.27ID:V6yHUqHj548デフォルトの名無しさん
2025/11/01(土) 19:22:28.52ID:na8d22ha 両者が対等ならLeft、Right使うよりOwned、Borrowedみたいに名前つけてくれ
Leftが成功寄り、Rightが失敗寄りみたいな慣習を持ち出すならResultでいい
Leftが成功寄り、Rightが失敗寄りみたいな慣習を持ち出すならResultでいい
549デフォルトの名無しさん
2025/11/01(土) 19:58:52.73ID:8wHtIByR 成功失敗に使う言語もあるけどRustのEitherはLeftとRight完全に対等
Resultよりも高機能で強力
RustのEitherはもともとRayonのために作られてItertoolsもそのEitherを組み込んでいて事実上の標準
Resultよりも高機能で強力
RustのEitherはもともとRayonのために作られてItertoolsもそのEitherを組み込んでいて事実上の標準
550デフォルトの名無しさん
2025/11/01(土) 21:11:37.16ID:yJiGHW4c >>546
本人にそのつもりは一切ないだろうが結果的にはアンチ活動家以外の何者でもないわな
本人にそのつもりは一切ないだろうが結果的にはアンチ活動家以外の何者でもないわな
551デフォルトの名無しさん
2025/11/01(土) 21:21:09.81ID:cx7pH9ul Rust使いはアホというイメージを与えると同時に、
あんまりにも盲信的かつ程度が低いもんだから他の人が「さすがにそれは違う」とRustに対して批判的なトーンで諫めるものだから、
自然とスレの空気がアンチっぽくなるんだよね
あんまりにも盲信的かつ程度が低いもんだから他の人が「さすがにそれは違う」とRustに対して批判的なトーンで諫めるものだから、
自然とスレの空気がアンチっぽくなるんだよね
552デフォルトの名無しさん
2025/11/01(土) 21:22:50.18ID:8wHtIByR 困ったもんだよな
553デフォルトの名無しさん
2025/11/01(土) 21:30:17.22ID:gnnSc5/H servo、久しぶりに動かしてみたら、まあまあ出来てるな
ついでにversoプロジェクトが終了していたことを今さら知った
がわの部分、shellが機能不足過ぎて常用するブラウザーには到底ならないが
描画エンジンとしては現時点でも何かに使えそう
ついでにversoプロジェクトが終了していたことを今さら知った
がわの部分、shellが機能不足過ぎて常用するブラウザーには到底ならないが
描画エンジンとしては現時点でも何かに使えそう
554デフォルトの名無しさん
2025/11/01(土) 22:29:09.83ID:f7mQTVkH Rust使いはアホではないけど概念的に普通にコード書くのも大変なんだなと
555デフォルトの名無しさん
2025/11/01(土) 22:47:39.33ID:eIxSVUj6 抽象度の低い言語より書きやすい
556デフォルトの名無しさん
2025/11/01(土) 23:35:48.21ID:g3WZAZrD 所有権の複製おじさん
データ参照の競合おじさん
可変を得るおじさん
データ参照の競合おじさん
可変を得るおじさん
557デフォルトの名無しさん
2025/11/02(日) 15:05:38.09ID:CiqO+SUG >>555
Rustより抽象度の低い言語ってメジャー言語ではCとC++しかないじゃん
Rustより抽象度の低い言語ってメジャー言語ではCとC++しかないじゃん
558デフォルトの名無しさん
2025/11/02(日) 18:02:42.58ID:DEScUpRh 全部きれいなお姉さんに置き換えたら赦す心が芽生えた
559デフォルトの名無しさん
2025/11/02(日) 20:55:21.31ID:5I1cphwl 確かに船と同じでコードを女性に例えるともっと
大事に扱う気になるかも知れない
大事に扱う気になるかも知れない
560デフォルトの名無しさん
2025/11/02(日) 23:53:23.75ID:J6OkX1Eo >>557
Goも
Goも
561デフォルトの名無しさん
2025/11/03(月) 01:05:29.98ID:rQkJBpL5 メスガキのほうがイメージしやすいかもしれん
562デフォルトの名無しさん
2025/11/03(月) 11:14:52.63ID:nm4PTvZt そういえば女性エンジニアって能力的な下限が男性底辺よりも上な気がする
組織による違いや生存者バイアス的なのもあると思うが
組織による違いや生存者バイアス的なのもあると思うが
563デフォルトの名無しさん
2025/11/03(月) 11:27:28.99ID:7oO4iHcI 原初は職業プログラマは女性の仕事だったのに一気に男性が増えたのはなぜななのか
564デフォルトの名無しさん
2025/11/03(月) 11:55:28.00ID:0AHiueHW 男の1/100ぐらいしか女いないしな
数が多ければ多いほど無能と有能の差は広がる
数が多ければ多いほど無能と有能の差は広がる
565デフォルトの名無しさん
2025/11/03(月) 12:06:07.94ID:w8FLSUod プログラマの最底辺は技術云々じゃなく基本的な就労適正に問題があるレベルだからなあ
女性は自分の申告しているスキルの範囲ではそれなりに真面目にきっちりと仕事をする奴が多い気がする
ダメならすぐ病んで消えるから職場的にはあまり問題にならないし
女性は自分の申告しているスキルの範囲ではそれなりに真面目にきっちりと仕事をする奴が多い気がする
ダメならすぐ病んで消えるから職場的にはあまり問題にならないし
566デフォルトの名無しさん
2025/11/03(月) 12:14:09.94ID:b7J3p22l Recent Rust Changes
https://www.ncameron.org/blog/recent-rust-changes/
https://www.ncameron.org/blog/recent-rust-changes/
567デフォルトの名無しさん
2025/11/05(水) 17:38:13.88ID:e7JKMroS RustでESP32とオモたが、環境作りがムズイ。
Windows VSCodeでPlatformIOのようにサクっとできるようにならないもんかね?
Windows VSCodeでPlatformIOのようにサクっとできるようにならないもんかね?
568デフォルトの名無しさん
2025/11/05(水) 17:51:33.76ID:/BRKTToS まだ発展途上じゃけえ
ほとんどのクレートがまだバージョン0だし
ほとんどのクレートがまだバージョン0だし
569デフォルトの名無しさん
2025/11/05(水) 18:21:47.42ID:seaKh6U5 >>567
cargoでespupしてespflashでええやん
cargoでespupしてespflashでええやん
570デフォルトの名無しさん
2025/11/06(木) 06:35:00.47ID:GB9xAhoN anyhowみたいなライブラリが出てきたということは、Rustってやっぱり厳密すぎたんじゃないかな
次に流行る言語は妥協がありそう
次に流行る言語は妥協がありそう
レスを投稿する
ニュース
- 【速報】トランプ大統領、中国の習近平国家主席を「国賓」として招待することに [ニョキニョキ★]
- 米中電話会談、トランプ氏は「米国側は中国にとっての台湾問題の重要性を理解する」 [1ゲットロボ★]
- 【音楽】「なんでこんなバカが国のトップなの?」 若者に人気のバンド「GEZAN」のマヒトゥ・ザ・ピーポーが高市総理に苦言 [シャチ★]
- 【国際】トランプ氏「中国との関係は極めて強固だ!」…台湾や第2次大戦については一切触れず [ぐれ★]
- 中国人「『日本は危ないから行かないように』と言われたが、日本に来たらとても安全だった」 [お断り★]
- 石破前総理「どうすれば台湾有事にならないかを考えるべき」★2 [1ゲットロボ★]
