公式
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 part27
https://mevius.5ch.net/test/read.cgi/tech/1733146370/
ワッチョイスレ
プログラミング言語 Rust 4【ワッチョイ】
https://mevius.5ch.net/test/read.cgi/tech/1514107621/
Rust part28
レス数が900を超えています。1000を超えると表示できなくなるよ。
1デフォルトの名無しさん
2025/03/24(月) 17:37:00.15ID:NJwebgj2832デフォルトの名無しさん
2025/04/29(火) 10:31:19.04ID:6lSK2oCI833デフォルトの名無しさん
2025/04/29(火) 10:32:07.53ID:xTPXppS5 普通にストローマン論法だね
相手の主張を捻じ曲げてそれに対して批判するやり方
相手の主張を捻じ曲げてそれに対して批判するやり方
834デフォルトの名無しさん
2025/04/29(火) 10:33:11.40ID:xTPXppS5 > C++使えるならRustも使え
これは間違い
これは間違い
835デフォルトの名無しさん
2025/04/29(火) 10:36:53.75ID:6lSK2oCI スレを荒らしてる人は自覚ないのかな
ここはRustを使いたい人のためのRustスレ
Rustアンチスレがちゃんと別にあるのだから棲み分けしよう
ここはRustを使いたい人のためのRustスレ
Rustアンチスレがちゃんと別にあるのだから棲み分けしよう
836デフォルトの名無しさん
2025/04/29(火) 10:48:01.46ID:jqe5wR1K Rustは好きだけど、Rustを過剰に持ち上げるカルティストは嫌い
こういう輩のせいでRustは信者がうざいとか言われるし、まともな開発者にも迷惑がかかる
良い点も悪い点も含めて、言語の特性や現状を正しく認識しようというのがなぜできないのか
こういう輩のせいでRustは信者がうざいとか言われるし、まともな開発者にも迷惑がかかる
良い点も悪い点も含めて、言語の特性や現状を正しく認識しようというのがなぜできないのか
837デフォルトの名無しさん
2025/04/29(火) 10:54:37.77ID:MtXZxAjC838デフォルトの名無しさん
2025/04/29(火) 10:59:16.54ID:k6/eUMBS839デフォルトの名無しさん
2025/04/29(火) 11:00:35.07ID:xTPXppS5 狂信者がrustの地位や評判を落としてるのでその他の人間には迷惑
840デフォルトの名無しさん
2025/04/29(火) 11:03:29.06ID:nQBNOV6L 言語にアイデンティティを求めてる人の極論はともかく、他は別にRustを叩いているようにも荒らしているようにも見えないな
議論をするときには自己のポジションとアイデンティティを自分の中で区別しておいた方がいい
このスレは優しい方で、特にRustを採用できるような分野でやってきたいならそれができないと辛い思いするよ
議論をするときには自己のポジションとアイデンティティを自分の中で区別しておいた方がいい
このスレは優しい方で、特にRustを採用できるような分野でやってきたいならそれができないと辛い思いするよ
841デフォルトの名無しさん
2025/04/29(火) 11:07:36.96ID:k6/eUMBS842デフォルトの名無しさん
2025/04/29(火) 11:13:28.83ID:xTPXppS5 陰暴論でなんでもない
> C++使えるならRustも使える
これが間違いだと理解できないのは狂信者だろ
C++は型あり言語からやってきたらだいたいの人はコードを書ける
ただ危険なコードも容易に書ける
Rustはそれを阻止するために縛りがある 危険でない部分でもそれが必要になる
その概念を理解しないとコンパイルエラーから抜け出せないので実用的な成果物は作れない
> C++使えるならRustも使える
これが間違いだと理解できないのは狂信者だろ
C++は型あり言語からやってきたらだいたいの人はコードを書ける
ただ危険なコードも容易に書ける
Rustはそれを阻止するために縛りがある 危険でない部分でもそれが必要になる
その概念を理解しないとコンパイルエラーから抜け出せないので実用的な成果物は作れない
843デフォルトの名無しさん
2025/04/29(火) 11:21:05.72ID:Gj8Ry772 >>842
Rust初心者がコンパイル通らなくて困ってるのかな
どの言語でもその言語の決まりを守らないとコンパイルエラーだよ
C++に関して言えば弱い型付け言語で未定義動作もエラーにしないからコンパイルエラーは少なくなるけど
今は強い型付けで未定義動作を許さない言語のほうが主流になってるよ
Rust初心者がコンパイル通らなくて困ってるのかな
どの言語でもその言語の決まりを守らないとコンパイルエラーだよ
C++に関して言えば弱い型付け言語で未定義動作もエラーにしないからコンパイルエラーは少なくなるけど
今は強い型付けで未定義動作を許さない言語のほうが主流になってるよ
844デフォルトの名無しさん
2025/04/29(火) 11:35:49.34ID:MtXZxAjC >危険でない部分でもそれが必要になる
ギリギリ危険でないコードを不合格にするんだな
極めてなにか効率にたいする侮辱を感じます
ギリギリ危険でないコードを不合格にするんだな
極めてなにか効率にたいする侮辱を感じます
845デフォルトの名無しさん
2025/04/29(火) 11:50:27.89ID:85zQBF62 可変参照の排他性なんかは場合によっては効率性を犠牲にしても安全側に倒してる例だね。
846デフォルトの名無しさん
2025/04/29(火) 11:58:15.87ID:Gj8Ry772847デフォルトの名無しさん
2025/04/29(火) 12:02:19.93ID:Evjw1qeU C++ を使えている人なら Rust のチュートリアルを読めば簡単な実務を始められるくらいにはなれそうな感覚があるんだけどなぁ。
難易度の高さをしきりに主張する人がずっといるのがなんだかよくわからない。
いや、難しいと感じる人だっているというのを否定するつもりはないんだけどさ……
C++ はかなり面倒な部類だぞ。
その面倒な C++ を使いこなせるくらいの能力という前提を付けられるときに Rust がそこまで激烈にしんどいか?
難易度の高さをしきりに主張する人がずっといるのがなんだかよくわからない。
いや、難しいと感じる人だっているというのを否定するつもりはないんだけどさ……
C++ はかなり面倒な部類だぞ。
その面倒な C++ を使いこなせるくらいの能力という前提を付けられるときに Rust がそこまで激烈にしんどいか?
848デフォルトの名無しさん
2025/04/29(火) 12:13:51.06ID:85zQBF62 C++からの移行についてはそれほど議論の余地はなくて、周辺環境が許せば移行すればよい、で終わり
C++の開発というのは比較的ニッチかつ保守的なので、C++を使っていて、かつ周辺環境が移行を許す状況というのがそもそも稀
C++の開発というのは比較的ニッチかつ保守的なので、C++を使っていて、かつ周辺環境が移行を許す状況というのがそもそも稀
849デフォルトの名無しさん
2025/04/29(火) 12:50:13.98ID:qhqmYF5L C++が分かるならRustは学びやすい、というのはその通り
だけどそもそもC/C++をやらずに仕事できてる人も今はずっと多いわけで
> C++ はかなり面倒な部類だぞ。
> その面倒な C++ を使いこなせるくらいの能力という前提を付けられるときに
の「前提」というのが既に世間一般の感覚とズレてるのでないかと思う
だけどそもそもC/C++をやらずに仕事できてる人も今はずっと多いわけで
> C++ はかなり面倒な部類だぞ。
> その面倒な C++ を使いこなせるくらいの能力という前提を付けられるときに
の「前提」というのが既に世間一般の感覚とズレてるのでないかと思う
850デフォルトの名無しさん
2025/04/29(火) 13:27:22.82ID:uvfd+gUP C++は学んだことないけど
スタック領域とヒープ領域の違いは理解できていたからRustを学ぶうえで特に困ったことはなかったよ
ライフタイムも関数を抜けたら消えちゃうスタック領域とその変数に管理されて依存するヒープ領域
関数の呼び出し入れ子で祖先側のスタック領域は子孫側のスタック領域より長生きというだけの話だった
スタック領域とヒープ領域の違いは理解できていたからRustを学ぶうえで特に困ったことはなかったよ
ライフタイムも関数を抜けたら消えちゃうスタック領域とその変数に管理されて依存するヒープ領域
関数の呼び出し入れ子で祖先側のスタック領域は子孫側のスタック領域より長生きというだけの話だった
851デフォルトの名無しさん
2025/04/29(火) 13:56:05.54ID:Evjw1qeU852デフォルトの名無しさん
2025/04/29(火) 14:28:41.68ID:V0qLshIG Rustは脳死で使えるイディオムが豊富なので楽
C++は時代によって流儀が変わりすぎる
C++は時代によって流儀が変わりすぎる
853デフォルトの名無しさん
2025/04/29(火) 14:32:21.54ID:4awPUBx2 昔からム板は平均より遥かに上のひとしかおらんがな
平均的なプログラマーは3年目ぐらいからは勉強すらしてないし
平均的なプログラマーは3年目ぐらいからは勉強すらしてないし
854デフォルトの名無しさん
2025/04/29(火) 16:32:22.17ID:YYaK7+X4 >>852
C++ は設計理念のひとつとしてプログラマに選択の余地を与える (間違いの可能性があっても) というものを含んでいるので意図通りの結果ではある。
分野ごとの流儀や時代の要請が言語の流儀と噛み合わなくなると単にその言語が使われなくなるだけなので長く生き残るには (汚くても) 色々とできるように詰め込むしか仕方がないんだ。
C++ は設計理念のひとつとしてプログラマに選択の余地を与える (間違いの可能性があっても) というものを含んでいるので意図通りの結果ではある。
分野ごとの流儀や時代の要請が言語の流儀と噛み合わなくなると単にその言語が使われなくなるだけなので長く生き残るには (汚くても) 色々とできるように詰め込むしか仕方がないんだ。
855デフォルトの名無しさん
2025/04/29(火) 16:32:23.99ID:jZEw8P94 ム板が平均よりはるかに上?
856デフォルトの名無しさん
2025/04/29(火) 16:48:30.04ID:YYaK7+X4 大半の人は情報収集しないしコミュニティに属さないのは本当だ。
そういう意味では多少なりとも交流を持とうとしているのは平均以上の可能性が高い。
その一方で、ガチの上級者はガチの業務をしてるしガチなコミュニティに属しているからこんなとこにいない。
そういう意味では多少なりとも交流を持とうとしているのは平均以上の可能性が高い。
その一方で、ガチの上級者はガチの業務をしてるしガチなコミュニティに属しているからこんなとこにいない。
857デフォルトの名無しさん
2025/04/29(火) 17:51:47.71ID:uvfd+gUP >>854
Rustはどうしても必要不可欠ならばその汚いもの(unsafe)を関数やモジュールやクレートの中に閉じ込めて清らかな(safe)インターフェイスを公開する枠組みを持たせたね
そのように閉じ込めることでコンパイラによる自動保証の外の範囲も限定して管理できるようになり安全性と柔軟性や高速性の両立バランスをRustは手に入れた
Rustはどうしても必要不可欠ならばその汚いもの(unsafe)を関数やモジュールやクレートの中に閉じ込めて清らかな(safe)インターフェイスを公開する枠組みを持たせたね
そのように閉じ込めることでコンパイラによる自動保証の外の範囲も限定して管理できるようになり安全性と柔軟性や高速性の両立バランスをRustは手に入れた
858デフォルトの名無しさん
2025/04/29(火) 18:17:31.81ID:MtXZxAjC 交流しているのは評論家だけ
クリエイターの能力値はDS並に謎に包まれている
クリエイターの能力値はDS並に謎に包まれている
859デフォルトの名無しさん
2025/04/29(火) 18:25:25.23ID:1/cFi/QG いちいち訳語につっかかったり普及してるかどうかのレスバしかしてない奴らの集団が平均以上なわけないじゃん
860デフォルトの名無しさん
2025/04/29(火) 18:37:35.61ID:qhqmYF5L Rustでイディオムっぽく感じるのって個人的にはビルダーくらいな気がする
オプション引数やオーバーロードが無いから慣習的にビルダーを多様する、みたいなもので
他は割と言語デザインに沿って素直に書けるという感じ
オプション引数やオーバーロードが無いから慣習的にビルダーを多様する、みたいなもので
他は割と言語デザインに沿って素直に書けるという感じ
861デフォルトの名無しさん
2025/04/29(火) 18:45:02.43ID:Q2Q+JRXz どっかでビルダーパターンは良くないぞ、考え直せって記事を読んだ気がするが
内容を忘れてしまった
誰か教えて
内容を忘れてしまった
誰か教えて
862デフォルトの名無しさん
2025/04/29(火) 19:13:59.81ID:Evjw1qeU ウェブショッピンクサービス ViaWeb (後に Yahoo に買われた) の創設者であるポール・グレアムはイディオム (デザインパターン) が必要とされる言語は悪い言語だと述べてる。
頻繁に使われるパターンがあるならそのパターンは言語機能やライブラリになっているべきで、ユーザがパターンに沿って書くのはあほくさいという話。
頻繁に使われるパターンがあるならそのパターンは言語機能やライブラリになっているべきで、ユーザがパターンに沿って書くのはあほくさいという話。
863デフォルトの名無しさん
2025/04/29(火) 19:30:07.84ID:Evjw1qeU >>857
汚い部分を隠して残る綺麗な部分は Rust の流儀だ。
Rust では Rust 的ではない抽象化ができないようになっている。
C++ 的な混沌よりは Rust の流儀を強制されたほうが今のところはマシなんだが、そうはいっても未来がどうなるかはわからんからなぁ……という現実が理想的ではないという話。
汚い部分を隠して残る綺麗な部分は Rust の流儀だ。
Rust では Rust 的ではない抽象化ができないようになっている。
C++ 的な混沌よりは Rust の流儀を強制されたほうが今のところはマシなんだが、そうはいっても未来がどうなるかはわからんからなぁ……という現実が理想的ではないという話。
864デフォルトの名無しさん
2025/04/29(火) 19:30:23.61ID:o2zlgANI リスパーの言うことなんか聞くな
865デフォルトの名無しさん
2025/04/29(火) 19:40:07.38ID:XmZc7X21 BufWriterとかでnewにinnerを丸呑みさせて用が済んだらinto_innerで摘出するパターンもRust特有だと思う
他の言語だとinnerは参照で渡しそうだけどRustでそれやると可変参照のライフタイムでカオスになる
このパターンに慣れるまで何回かカオスを経験した
他の言語だとinnerは参照で渡しそうだけどRustでそれやると可変参照のライフタイムでカオスになる
このパターンに慣れるまで何回かカオスを経験した
866デフォルトの名無しさん
2025/04/29(火) 19:41:32.29ID:Evjw1qeU Common Lisp は有用な選択肢だと思うけどなあ。
ガッとラフに作れるというのと機械語レベルでのチューニングもできるという良いとこ取りだ。
ただ、ユーザが少ないと使えるライブラリも少なくて、だからユーザが伸びないというスパイラルがある。
物量が正義というのが現実なんだよね……。
ガッとラフに作れるというのと機械語レベルでのチューニングもできるという良いとこ取りだ。
ただ、ユーザが少ないと使えるライブラリも少なくて、だからユーザが伸びないというスパイラルがある。
物量が正義というのが現実なんだよね……。
867デフォルトの名無しさん
2025/04/29(火) 19:45:09.79ID:85zQBF62 builder嫌い
たかが構造体にパラメータ詰めるだけのことにいちいちオリジナリティを出すな
たかが構造体にパラメータ詰めるだけのことにいちいちオリジナリティを出すな
868デフォルトの名無しさん
2025/04/29(火) 19:52:58.08ID:Zs9DBDpd >>848
RustとC++の相性は最悪
RustとC++の相性は最悪
869デフォルトの名無しさん
2025/04/29(火) 20:05:56.08ID:Q2Q+JRXz870デフォルトの名無しさん
2025/04/29(火) 21:09:44.91ID:FS6BNYIE >>861
これかな?
ビルダーの代わりにinit struct pattern というのを提案してる
https://xaeroxe.github.io/init-struct-pattern/
ボイラープレートが少なくて簡単だけど、初期化用の構造体のフィールドがpublicなのは好みが分かれる
現状はビルダーの方が主流
外部に公開するライブラリのAPIとして使うのは微妙だけど、自分たちのコードの内部で使う分にはアリかもしれない
これかな?
ビルダーの代わりにinit struct pattern というのを提案してる
https://xaeroxe.github.io/init-struct-pattern/
ボイラープレートが少なくて簡単だけど、初期化用の構造体のフィールドがpublicなのは好みが分かれる
現状はビルダーの方が主流
外部に公開するライブラリのAPIとして使うのは微妙だけど、自分たちのコードの内部で使う分にはアリかもしれない
871デフォルトの名無しさん
2025/04/29(火) 21:30:51.12ID:Q2Q+JRXz872デフォルトの名無しさん
2025/04/29(火) 22:02:39.41ID:MtXZxAjC 車オブジェクトに高度を変えるメソッドがあったらおかしい
空飛ぶ車オブジェクトは一時的にメソッドの存在自体を消すシステムをもつべき
空飛ぶ車オブジェクトは一時的にメソッドの存在自体を消すシステムをもつべき
873デフォルトの名無しさん
2025/04/30(水) 01:02:26.08ID:RVMp5la+ こっち見といたほうがいいと思う
https://kerkour.com/rust-abolish-the-builder-pattern
YakShaverInitをinitしてYakShaver返すとかいろんな意味で微妙
YakShaverBuilderをbuildしてYakShaver返す癖が抜けてない
https://kerkour.com/rust-abolish-the-builder-pattern
YakShaverInitをinitしてYakShaver返すとかいろんな意味で微妙
YakShaverBuilderをbuildしてYakShaver返す癖が抜けてない
874デフォルトの名無しさん
2025/04/30(水) 01:03:45.45ID:RVMp5la+ どっちかが絶対いいというものではなくて使い分けるもの
875デフォルトの名無しさん
2025/04/30(水) 01:38:53.14ID:AZF3og04 >>873
the best code is no code at all か、なるほどね
構造体更新記法を使ってもらわないと、メンバー追加したときにコンパイル通らなくなるけど
それを問題視する人としない人がいるって感じ?
個人的には、今のRustはその程度の軽い互換性破壊は日常茶飯事だから別にいいのでは?って気がするけど
the best code is no code at all か、なるほどね
構造体更新記法を使ってもらわないと、メンバー追加したときにコンパイル通らなくなるけど
それを問題視する人としない人がいるって感じ?
個人的には、今のRustはその程度の軽い互換性破壊は日常茶飯事だから別にいいのでは?って気がするけど
876デフォルトの名無しさん
2025/04/30(水) 06:24:04.68ID:aRycYPw9 内部用は自由だが
少なくとも公開ライブラリの構造体の初期化の結論は出ている
まず各フィールド個別のpub化は以下の点で良くない
・構造体の値個別や全体の制約による無矛盾性を保証できない
・内部実装の改善による構造の変化に対応できない
・今後の機能拡張によるフィールド増加に弱い
したがってどうしてもビルダーパターンを使いたくないのならば
Foo初期化指定用の構造体FooConfigを更に用意してそれはpubを許して
Foo::init(FooConfig { FooConfig:: default(), i: 123, s: "abc" })?
またはこうする
FooConfig { FooConfig:: default(), i: 123, s: "abc" }.init()?
そしてinit()内で指定値チェックと本当の内部構造への変換をする形になる
同じことはビルダーパターンだとderive_builderを用いると提供側は簡単
使う側はおなじみの以下の形になる
FooBuilder::default().i(123).s("abc").build()?
どちらの方式も指定の構文が異なるだけで同じような形になってることがわかる
個人的にはビルダーパターンの方がよりシンプルだと思う
そしてRustでの主流となっている
少なくとも公開ライブラリの構造体の初期化の結論は出ている
まず各フィールド個別のpub化は以下の点で良くない
・構造体の値個別や全体の制約による無矛盾性を保証できない
・内部実装の改善による構造の変化に対応できない
・今後の機能拡張によるフィールド増加に弱い
したがってどうしてもビルダーパターンを使いたくないのならば
Foo初期化指定用の構造体FooConfigを更に用意してそれはpubを許して
Foo::init(FooConfig { FooConfig:: default(), i: 123, s: "abc" })?
またはこうする
FooConfig { FooConfig:: default(), i: 123, s: "abc" }.init()?
そしてinit()内で指定値チェックと本当の内部構造への変換をする形になる
同じことはビルダーパターンだとderive_builderを用いると提供側は簡単
使う側はおなじみの以下の形になる
FooBuilder::default().i(123).s("abc").build()?
どちらの方式も指定の構文が異なるだけで同じような形になってることがわかる
個人的にはビルダーパターンの方がよりシンプルだと思う
そしてRustでの主流となっている
877デフォルトの名無しさん
2025/04/30(水) 10:08:02.30ID:uCqRd3Sw 強制すれば良いのに
878デフォルトの名無しさん
2025/04/30(水) 11:07:06.59ID:8LRHZRl/ ビルダー自体が便利だとは思えないんだよな
オプション引数やオーバーロードが無いのを解決するためのもので、他の言語から来ると戸惑うと思う
(型で遷移を表現するなど、パターン自体は Rust らしいし、理解自体は容易だけど)
オーバーロードは別の面倒を生むから無くて良いと思うけど、オプション引数は個人的にはあると嬉しい気がする
実はGoもオプション引数が無い言語で、代わりに functional option パターンというのを使うんだけど、これもイディオムを知らない人にとって直観的でないと言われがち
同時期に登場した言語がどちらも採用しなかったんだから、多分それなりの理由があるんだろうな
オプション引数やオーバーロードが無いのを解決するためのもので、他の言語から来ると戸惑うと思う
(型で遷移を表現するなど、パターン自体は Rust らしいし、理解自体は容易だけど)
オーバーロードは別の面倒を生むから無くて良いと思うけど、オプション引数は個人的にはあると嬉しい気がする
実はGoもオプション引数が無い言語で、代わりに functional option パターンというのを使うんだけど、これもイディオムを知らない人にとって直観的でないと言われがち
同時期に登場した言語がどちらも採用しなかったんだから、多分それなりの理由があるんだろうな
879デフォルトの名無しさん
2025/04/30(水) 11:52:30.40ID:MOUA/jrw 簡単に言えば、virtualを使ってないデザインパターンは追放されない
880デフォルトの名無しさん
2025/04/30(水) 12:05:47.96ID:yPZIq5F0 ム板全体が限界過疎集落化してるのに
Rustスレだけ人が居るのはなぜ?
他に交流の場が無いのかな?
Rustスレだけ人が居るのはなぜ?
他に交流の場が無いのかな?
881デフォルトの名無しさん
2025/04/30(水) 12:11:54.22ID:VKtsx7kS 自作自演
882デフォルトの名無しさん
2025/04/30(水) 12:21:33.61ID:TMleEpRy 規模が大きくなるにつれてbestよりconsistentの重要性が高まるものだ
将来的な変更容易性がどうのと言って必要以上に凝ろうとする奴に限って、
革新的で最高にクールなニュースタイルのビルダーが出てきたらすぐにちゃぶ台返しをする
まあ初期化時のパラメータの与え方なんて壊滅的変更されたところで大した問題じゃないから、
そういう奴に自由にオナニーさせて発散させておくにはいいのかもね
将来的な変更容易性がどうのと言って必要以上に凝ろうとする奴に限って、
革新的で最高にクールなニュースタイルのビルダーが出てきたらすぐにちゃぶ台返しをする
まあ初期化時のパラメータの与え方なんて壊滅的変更されたところで大した問題じゃないから、
そういう奴に自由にオナニーさせて発散させておくにはいいのかもね
883デフォルトの名無しさん
2025/04/30(水) 12:21:42.88ID:THYm3xdc 単に書き方がちょっと面倒というのを解決したいならマクロを使えばよいということだと思う。
実際にそういう使われかたをしてるし。
実際にそういう使われかたをしてるし。
884デフォルトの名無しさん
2025/04/30(水) 12:44:48.88ID:s47+7HVZ 自演
885デフォルトの名無しさん
2025/04/30(水) 13:00:34.55ID:uCqRd3Sw886デフォルトの名無しさん
2025/04/30(水) 14:42:30.43ID:UhuBHLAw >>878
Builderパターンは設定(引数渡し)とオブジェクト生成を分離するのが本質的な特徴。
デフォルトの省略とか渡す順番の自由化とかあるけど、それも設定と生成の分離から派生した特徴でしか無い。また分離した結果として複数個所からの同時アクセスに弱いけど、そういうのを理解して使えばいい。
Builderパターンは設定(引数渡し)とオブジェクト生成を分離するのが本質的な特徴。
デフォルトの省略とか渡す順番の自由化とかあるけど、それも設定と生成の分離から派生した特徴でしか無い。また分離した結果として複数個所からの同時アクセスに弱いけど、そういうのを理解して使えばいい。
887デフォルトの名無しさん
2025/04/30(水) 15:49:41.55ID:AZF3og04 あちこちがガンガン破壊的変更されていくRust界で、
初期化のとこだけBuilderパターンで互換性ありますよーってあんまり意味ない気がする
初期化のとこだけBuilderパターンで互換性ありますよーってあんまり意味ない気がする
888デフォルトの名無しさん
2025/04/30(水) 16:17:15.30ID:JQkc0XME >>880
約一名必死なやつがいるから
約一名必死なやつがいるから
889デフォルトの名無しさん
2025/04/30(水) 17:44:14.52ID:y1rgmJae >>887
Rustは他の言語と比べても破壊的変更は少ない方じゃないかな
しかもRustにはEditionという概念があって必ずCargo.tomlに指定したうえでソースコードを書く
そのため破壊的変更より前の古いソースコードも影響を受けずにコンパイルできて実行できたりする
第三者が作ったライブラリ(crate)についてはCargo.tomlにバージョン番号を指定して使っていれば
そのまま当時のソースコードを使うためコンパイルできて実行できたりする
もちろん古いものセキュリティホールなどが発見されれば対応せざるをえないのは当然だけどね
いずれも全てのケース100%で今後も永遠に大丈夫というわけではないかもしれないけど
バージョンの違いなどで苦しんでるプログラミング言語などと比べたらRustは恵まれてると思うよ
Rustは他の言語と比べても破壊的変更は少ない方じゃないかな
しかもRustにはEditionという概念があって必ずCargo.tomlに指定したうえでソースコードを書く
そのため破壊的変更より前の古いソースコードも影響を受けずにコンパイルできて実行できたりする
第三者が作ったライブラリ(crate)についてはCargo.tomlにバージョン番号を指定して使っていれば
そのまま当時のソースコードを使うためコンパイルできて実行できたりする
もちろん古いものセキュリティホールなどが発見されれば対応せざるをえないのは当然だけどね
いずれも全てのケース100%で今後も永遠に大丈夫というわけではないかもしれないけど
バージョンの違いなどで苦しんでるプログラミング言語などと比べたらRustは恵まれてると思うよ
890デフォルトの名無しさん
2025/04/30(水) 18:21:50.73ID:JJ8dHA07 ワシらの作るサービスがヒットするわけ無いだろ。打率0割0分5厘
スーパーなプロデューサに仕えねば
スーパーなプロデューサに仕えねば
891デフォルトの名無しさん
2025/04/30(水) 18:50:26.71ID:61w1rbBX892デフォルトの名無しさん
2025/04/30(水) 19:04:33.02ID:v8y83nww893デフォルトの名無しさん
2025/04/30(水) 19:17:57.26ID:JJ8dHA07 エディションの機能あるのRustだけじゃね。
Cなんかもコンパイラオプションでゴニョゴニョ出来るけど
Cなんかもコンパイラオプションでゴニョゴニョ出来るけど
894デフォルトの名無しさん
2025/04/30(水) 19:18:18.80ID:y1rgmJae895デフォルトの名無しさん
2025/04/30(水) 19:52:49.23ID:v8y83nww そんなNPTがあるから核兵器は安全だ!みたいなこと言われてもな
896デフォルトの名無しさん
2025/04/30(水) 19:53:45.22ID:THYm3xdc ひとつのプロジェクトに異なるエディションが混在することもできるけど、そうなると ABI の互換性は切れないし、エディションという仕組みがどれくらい長期的に機能するかちょっと読めない。
旧エディションを際限なくサポートするわけにもいかんし、ある程度古くなったエディションはそのうちサポートは切られるんじゃないかな?
新エディションに書き換えるツールは提供されてるので定期的に書き換えてメンテナンスするくらいは必要じゃない? もちろんプログラマも新エディションの機能を把握するのは要る。
旧エディションを際限なくサポートするわけにもいかんし、ある程度古くなったエディションはそのうちサポートは切られるんじゃないかな?
新エディションに書き換えるツールは提供されてるので定期的に書き換えてメンテナンスするくらいは必要じゃない? もちろんプログラマも新エディションの機能を把握するのは要る。
897デフォルトの名無しさん
2025/04/30(水) 19:56:05.44ID:JJ8dHA07 それは、仕方なし
898デフォルトの名無しさん
2025/04/30(水) 20:02:14.30ID:y1rgmJae899デフォルトの名無しさん
2025/04/30(水) 20:02:41.40ID:JQkc0XME Rust ABIは一度も安定化したことがないから保つべき互換性なんてものはないので安心してください
900デフォルトの名無しさん
2025/04/30(水) 20:03:10.33ID:etHuYXUz 他でも同じ
python2 python3
python2 python3
901デフォルトの名無しさん
2025/04/30(水) 20:04:46.85ID:v8y83nww 塩漬けにするなら普通は処理系のバージョンも含めて塩漬けにするもんだし、
>>896の指摘するように古いエディションのサポートが切られたら否が応でもそうするしかなくなる
>>896の指摘するように古いエディションのサポートが切られたら否が応でもそうするしかなくなる
902デフォルトの名無しさん
2025/04/30(水) 20:05:30.86ID:etHuYXUz この件でrustが優れていると言うのは違うかと
903デフォルトの名無しさん
2025/04/30(水) 20:09:05.80ID:JQkc0XME C/C++だってコンパイラオプションで規格明示すればいいだけだしねえ
904デフォルトの名無しさん
2025/04/30(水) 20:30:24.75ID:y1rgmJae 3年毎のエディションの仕組みが明確にあって
ソースコードのCargo.tomlにエディションが必ず指定されてるから
コンパイルオプション指定も含めてソースコードを全く変更せずに動く
という点が他とは異なるね
あと将来は古いのは切るかもしれないけど
今のところ最新コンパイラもエディション2015,2018,2021,2024を全てサポートしていてコンパイルして動くね
その時コンパイラが警告してくれるし移行ツールもあるのでエディション移行もしやすい
ソースコードのCargo.tomlにエディションが必ず指定されてるから
コンパイルオプション指定も含めてソースコードを全く変更せずに動く
という点が他とは異なるね
あと将来は古いのは切るかもしれないけど
今のところ最新コンパイラもエディション2015,2018,2021,2024を全てサポートしていてコンパイルして動くね
その時コンパイラが警告してくれるし移行ツールもあるのでエディション移行もしやすい
905デフォルトの名無しさん
2025/04/30(水) 20:53:46.40ID:THYm3xdc >>903
C/C++ には欠陥報告という制度があって、規格の過去の版に遡って修正されることがある。
大半は文章の曖昧さの修正や緩和の方向だから深刻な互換性問題にはあまりならないんだけど、なにせ修正の件数自体が多いから割合として少なくても互換性を損なう修正もそこそこある。
つまり昔の C++11 と今の C++11 は別物と考える必要がある。
そんでコンパイラによって規格の修正の反映具合が違ったりして混沌としてるんだわ。
実際に昔のコードを今のコンパイラでコンパイルしようとしてもエラーがゼロなんて場合はほとんどない。
C/C++ には欠陥報告という制度があって、規格の過去の版に遡って修正されることがある。
大半は文章の曖昧さの修正や緩和の方向だから深刻な互換性問題にはあまりならないんだけど、なにせ修正の件数自体が多いから割合として少なくても互換性を損なう修正もそこそこある。
つまり昔の C++11 と今の C++11 は別物と考える必要がある。
そんでコンパイラによって規格の修正の反映具合が違ったりして混沌としてるんだわ。
実際に昔のコードを今のコンパイラでコンパイルしようとしてもエラーがゼロなんて場合はほとんどない。
906デフォルトの名無しさん
2025/04/30(水) 21:04:19.22ID:v8y83nww そりゃC++は時間のスケールが違うからな
C++を引き合いに出すなら、20年待たないとRustのエディションが主張通りに機能したかどうか結論は出ない
C++を引き合いに出すなら、20年待たないとRustのエディションが主張通りに機能したかどうか結論は出ない
907デフォルトの名無しさん
2025/04/30(水) 21:20:15.53ID:Jt3SshjK ここ覗いてるのってメーカー勤めの技術的リスク取れないチキンな皆さんなのかね
やっていこうぜ。不満があればイシューツリーかパッチ投げよう
やっていこうぜ。不満があればイシューツリーかパッチ投げよう
908デフォルトの名無しさん
2025/04/30(水) 21:30:45.31ID:y1rgmJae >>906
現に10年前のRust 2015 edition指定のコードが動いているから大丈夫だと思うよ
最新コンパイラが2015 editionをサポートする間はそのままコンパイルできて動作するね
その話と関係なくcargo fix -editionで半自動でedition移行ができるから自分のソースコードなら手直ししてすぐ解決
現に10年前のRust 2015 edition指定のコードが動いているから大丈夫だと思うよ
最新コンパイラが2015 editionをサポートする間はそのままコンパイルできて動作するね
その話と関係なくcargo fix -editionで半自動でedition移行ができるから自分のソースコードなら手直ししてすぐ解決
909デフォルトの名無しさん
2025/04/30(水) 21:47:40.41ID:MOUA/jrw 自分のソースコードしか手直しできないってなんでだろう
もっと他人のソースコードを批評したり手直ししたりすれば楽しいのに
もっと他人のソースコードを批評したり手直ししたりすれば楽しいのに
910デフォルトの名無しさん
2025/04/30(水) 22:24:04.29ID:OzkHKJVN 人のもやればいいけど技術以外の問題があるだけでしょ
コミット権限がないとか
コミット権限がないとか
911デフォルトの名無しさん
2025/04/30(水) 23:07:35.68ID:aRycYPw9 >>878
今回の構造体初期化のビルダーパターンと比べて
名前なしオプション引数やオーバーロードは以下の点で劣っている
・コードを書くときに間違いを起こしやすい
・コードを読む時にもわかりにくい
・同じ型が区別できない (同じ型のheightとwidthの片方だけ指定したい時)
・多数あると組み合わせ爆発が起こる
したがって利用可能な方法は名前指定オプション引数となる
例えば
f(name1=value1, name2=value2, ...)
一方でビルダーパターンでは例えば
f().name1(value1).name2(value2) ...
コードを書く側としてはどちらも大して変わらない
慣れだけの問題であり一瞬で適応できる
利用側としては上記のように大した差はないが
提供する側のコードが面倒で冗長になることがビルダーパターンの欠点であった
しかしこの問題をRustではderive_builderが解決してしまった
初期化したい構造体への簡単な修飾でそのビルダー構造体と実装を自動生成してくれる
他に改善すべき点や案などあるだろうか
今回の構造体初期化のビルダーパターンと比べて
名前なしオプション引数やオーバーロードは以下の点で劣っている
・コードを書くときに間違いを起こしやすい
・コードを読む時にもわかりにくい
・同じ型が区別できない (同じ型のheightとwidthの片方だけ指定したい時)
・多数あると組み合わせ爆発が起こる
したがって利用可能な方法は名前指定オプション引数となる
例えば
f(name1=value1, name2=value2, ...)
一方でビルダーパターンでは例えば
f().name1(value1).name2(value2) ...
コードを書く側としてはどちらも大して変わらない
慣れだけの問題であり一瞬で適応できる
利用側としては上記のように大した差はないが
提供する側のコードが面倒で冗長になることがビルダーパターンの欠点であった
しかしこの問題をRustではderive_builderが解決してしまった
初期化したい構造体への簡単な修飾でそのビルダー構造体と実装を自動生成してくれる
他に改善すべき点や案などあるだろうか
912デフォルトの名無しさん
2025/04/30(水) 23:46:19.22ID:HBKx6hEm 一面しか見ないバカ
相変わらずだな
相変わらずだな
913デフォルトの名無しさん
2025/05/01(木) 00:06:22.35ID:wMrbWiVF rustは関数オーバーロードがないからビルダーパターンに頼らざるを得ない
914デフォルトの名無しさん
2025/05/01(木) 00:23:28.70ID:KmLg46A3 Builderと大して変わらないと思うけど
内部非公開のstruct Fooに対して内部公開のstruct FooDraftを用意して
let foo: Foo = FooDraft {
i: 123,
s: "abc",
..Default::default(),
}.try_into()?;
みたいな形は考えたことある
まじめにやるならFooDraftはnon_exhaustiveを付けた方がいい
内部非公開のstruct Fooに対して内部公開のstruct FooDraftを用意して
let foo: Foo = FooDraft {
i: 123,
s: "abc",
..Default::default(),
}.try_into()?;
みたいな形は考えたことある
まじめにやるならFooDraftはnon_exhaustiveを付けた方がいい
915デフォルトの名無しさん
2025/05/01(木) 00:34:22.74ID:wMrbWiVF どちらにしてもコンストラクタがライトウェイトじゃなくなるし利便性も低下する
916デフォルトの名無しさん
2025/05/01(木) 01:16:01.59ID:MWOwr0re お前らしょうもない言い争いしてる暇あったらRustでプログラミングしようぜ
楽しいぞ😎
楽しいぞ😎
917デフォルトの名無しさん
2025/05/01(木) 01:28:23.84ID:f3hi8cvW f(a,b,c);
g(a,b,c);
h(a,b,c);
ももっと短くするべきで、引数をstructにすればこの問題も解決する
が、キーワード引数はこのコードを更に長くしてしまう
g(a,b,c);
h(a,b,c);
ももっと短くするべきで、引数をstructにすればこの問題も解決する
が、キーワード引数はこのコードを更に長くしてしまう
918デフォルトの名無しさん
2025/05/01(木) 01:50:56.00ID:cAYi0wMW919デフォルトの名無しさん
2025/05/01(木) 01:53:34.42ID:cAYi0wMW920デフォルトの名無しさん
2025/05/01(木) 01:58:46.40ID:cAYi0wMW >>907
ダブスタ意見はやめとけ
ダブスタ意見はやめとけ
921デフォルトの名無しさん
2025/05/01(木) 02:00:23.14ID:N2U44pfA ワイはメーカーじゃないので暇つぶし
922デフォルトの名無しさん
2025/05/01(木) 10:03:23.98ID:nTiKCI2R 完全無欠ωのRustにリスクがあることを認めるのですねわかります
923デフォルトの名無しさん
2025/05/01(木) 10:37:30.35ID:TCz7x/v2 何にでもリスクはある
924デフォルトの名無しさん
2025/05/01(木) 10:38:10.43ID:TCz7x/v2 成功する宝くじだけ買いたいなんて文科省だけだぞ
925デフォルトの名無しさん
2025/05/01(木) 10:49:46.51ID:1Pg0gBiY コロンブスがリスクを取らなければいまだにアメリカ大陸は無人の動物王国だった
アムンゼンしかり、いつの時代も最初にリスク取る人間は周りに理解されない
アムンゼンしかり、いつの時代も最初にリスク取る人間は周りに理解されない
926デフォルトの名無しさん
2025/05/01(木) 10:58:47.12ID:/KCrsMZn ガチでリスクを取れる人間は今はバイブコーディング&動いてるっぽいからリリースしようぜ!に夢中なはず
Rustはコントロールできないリスクは取りたくないくせに俺スゲーしたい中途半端な人間向け
Rustはコントロールできないリスクは取りたくないくせに俺スゲーしたい中途半端な人間向け
927デフォルトの名無しさん
2025/05/01(木) 11:49:06.01ID:nTiKCI2R インディアンと呼ばれた先住民が動物とはこれいかに
928デフォルトの名無しさん
2025/05/01(木) 12:04:15.65ID:TCz7x/v2 >>926
リスクだけ取りたいなら登山でもしてて
リスクだけ取りたいなら登山でもしてて
929デフォルトの名無しさん
2025/05/01(木) 12:07:18.57ID:f3hi8cvW 射程距離が長い武器は接近戦から逃げているだけだな
当たると豪語するが結局当たらない
当たると豪語するが結局当たらない
930デフォルトの名無しさん
2025/05/01(木) 13:11:13.65ID:VlXKY8Xt MSが今ビルダーパターン多用してる
過去の実績から言うとMSは99%技術選定を間違えるからそれが不安要素
MSは失敗のベンチマークとでも呼べる
過去の実績から言うとMSは99%技術選定を間違えるからそれが不安要素
MSは失敗のベンチマークとでも呼べる
931デフォルトの名無しさん
2025/05/01(木) 14:40:42.80ID:nTiKCI2R version3か3回目の名称変更でちょびっと安定してくるやつね
レス数が900を超えています。1000を超えると表示できなくなるよ。
