Rust part28

レス数が1000を超えています。これ以上書き込みはできません。
1デフォルトの名無しさん
垢版 |
2025/03/24(月) 17:37:00.15ID:NJwebgj2
公式
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/
981デフォルトの名無しさん
垢版 |
2025/05/02(金) 21:09:06.51ID:06aFKDyR
>>975
それこそキーワード引数を使いたい動機で、最後のsomeにあたる引数だけ hoge(fifth=Some(10)) のようにできると楽
Rustだとそれはビルダーにすべき

>>971
言語仕様として組み込まれてるのとは利便性が全然違うじゃん
外部クレートが必要なわけだし
キーワード引数だと foo 関数の定義だけで完結するけど、ビルダーだと FooOption と FooOptionBuilder のような型の追加まで必要なわけで
2025/05/02(金) 21:09:43.98ID:z720W3rP
>>980
忘れる?
キーワード指定オプション引数を付け忘れる
それに対応するメソッドを付け忘れる
どちらも同じことだ
ビルダー方式で欠点は何も存在しない
2025/05/02(金) 21:13:02.11ID:5gJO9Aey
スクリプト言語じゃないとキーワード引数実装無理じゃね
2025/05/02(金) 21:13:29.15ID:z720W3rP
>>981
derive_builderを使ったことがなく文句を言ってるのかね
この方式のほうが簡潔で冗長がなくなる
オプションキーワード引数方式だと自分でそのシグネチャを書かなければならなく冗長になる
ビルダー方式は冗長がなく有利
2025/05/02(金) 21:14:00.07ID:bGn62aq8
アニメーションの毎フレーム毎に呼び出すような、パフォーマンスが大事な関数でもbuilderパターン使えるの?
2025/05/02(金) 21:15:34.05ID:i8P7c2SF
キーワード引数なら完全にゼロコストにできる
ビルダーだと、余計な初期化用の構造体が必要だし、値を指定しているパラメータについても最初にデフォルト値のコピーが走っちゃうからゼロコストにならない
2025/05/02(金) 21:16:03.15ID:n0wyIh3y
他に膨大な議論をしてるのにキーワード引数なんてたいして重要てはない割に面倒なものは後回しだろ。
(一応は名前つき引数の提案は何年も前に出てはいる。)
2025/05/02(金) 21:18:16.83ID:5gJO9Aey
マクロを使えばなんとか
2025/05/02(金) 21:22:00.73ID:q0/bxH7J
>>986
Rustでビルダー方式でも最適化されてゼロコストになっている
生成コードで確認した
990デフォルトの名無しさん
垢版 |
2025/05/02(金) 21:24:13.63ID:06aFKDyR
>>983
コンパイルされる言語でも使うよ (C#やKotlin)
2025/05/02(金) 21:24:49.07ID:BP5o1HEV
>>989
何と比較してゼロコストだと言ってる?
2025/05/02(金) 21:25:45.04ID:bGn62aq8
昔々、X ToolkitはCでキーワード引数を実現するために
配列を使ってなかったっけ?
末尾に終端マーカーを置き忘れると落ちる
2025/05/02(金) 21:29:20.61ID:tUdMCpmj
>>982
>>982
人間は容易に忘れるし順番ですら間違える
通常のエディタの支援が受けられる関数にした方が良い

.G(p[0]).R(p[1]).B(p[2]).build()
のところを容易に
.R(p[0]).G(p[1]).B(p[2]).build()と間違えて
さらに
.R(p[0]).R(p[1]).B(p[2]).build()と間違える
2025/05/02(金) 21:30:23.29ID:5gJO9Aey
>>990
おお、コンパイラ賢い
2025/05/02(金) 21:31:43.23ID:q0/bxH7J
>>991
構造体のフィールドに値を入れていって構造体を作成しても
derive_builderを使いメソッドで値を入れていっても同じになった
メソッド呼び出しが消えた
ゼロコスト
2025/05/02(金) 21:34:42.77ID:z720W3rP
構造体の初期化のために
キーワード付オプション引数の関数のシグネチャを記述するのは冗長でバカげている
Rustのderive_builder利用のビルダー方式が最も簡潔でベスト
997デフォルトの名無しさん
垢版 |
2025/05/02(金) 21:38:09.58ID:06aFKDyR
SerdeやPythonのnumpy並みに「その言語の利用者ならみんな知ってる」ライブラリならともかく、ユーティリティ程度のものでも特定のライブラリにロックインするのがベストなもんかね
2025/05/02(金) 21:38:30.32ID:n0wyIh3y
>>993
キーワード引数なら間違えないのか?
2025/05/02(金) 21:39:36.25ID:n0wyIh3y
>>997
マクロってそういうもんだよ。
2025/05/02(金) 21:40:47.47ID:tUdMCpmj
Rustおじさん論破した
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 39日 4時間 3分 48秒
レス数が1000を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況