公式
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
レス数が1000を超えています。これ以上書き込みはできません。
1デフォルトの名無しさん
2025/03/24(月) 17:37:00.15ID:NJwebgj2952デフォルトの名無しさん
2025/05/02(金) 18:30:03.50ID:06aFKDyR キーワード引数とABIは関係なくない?
例えば fn func(foo: i32, bar: i32) というシグニチャの関数について、
呼び出し側で func(bar: 10, foo: 20); のように記述したものが func(20, 10); に置き換えられるような仕組みだし、
コンパイル時に解決する問題な気がする
そもそもRustは (C互換のコードを除いて) 安定したABIを持ってないんじゃないっけ?
例えば fn func(foo: i32, bar: i32) というシグニチャの関数について、
呼び出し側で func(bar: 10, foo: 20); のように記述したものが func(20, 10); に置き換えられるような仕組みだし、
コンパイル時に解決する問題な気がする
そもそもRustは (C互換のコードを除いて) 安定したABIを持ってないんじゃないっけ?
953デフォルトの名無しさん
2025/05/02(金) 18:34:07.60ID:bAYfXEJ2 >>943
コピーしたくなければポインタで渡すだけでいいんだぞ
コピーしたくなければポインタで渡すだけでいいんだぞ
954デフォルトの名無しさん
2025/05/02(金) 18:53:01.38ID:d0ZtlBkd キーワード引数は関数の型との兼ね合いだろうな
fn foo(a: u32)
を
fn foo(a: u32, b: u32 = 0)
に変えたときに
F: Fn(u32)
に渡せるかみたいなややこしい話が出てくる
最初から
fn foo(a: u32, opt_args: FooOptArgs)
で頑張ってもらった方が分かりやすい
fn foo(a: u32)
を
fn foo(a: u32, b: u32 = 0)
に変えたときに
F: Fn(u32)
に渡せるかみたいなややこしい話が出てくる
最初から
fn foo(a: u32, opt_args: FooOptArgs)
で頑張ってもらった方が分かりやすい
955デフォルトの名無しさん
2025/05/02(金) 18:57:27.48ID:kIVCyVUc オプション引数はそのままOption<T>型の引数で使われていて困らないね
956デフォルトの名無しさん
2025/05/02(金) 19:34:53.93ID:PM49hp/O キーワード引数があれば、Builderパターンとか要らなくなるんだけど
957デフォルトの名無しさん
2025/05/02(金) 19:49:08.87ID:rPO248eK >>944
copyが発生しうるmoveのときは暗黙でcopy出来るかどうかderive(Clone, Copy)
暗黙にcopy出来ないけどcopyの必要なmoveが起こるときはコンパイル時にエラー
copyが発生しうるmoveのときは暗黙でcopy出来るかどうかderive(Clone, Copy)
暗黙にcopy出来ないけどcopyの必要なmoveが起こるときはコンパイル時にエラー
958デフォルトの名無しさん
2025/05/02(金) 19:49:28.92ID:i8P7c2SF959デフォルトの名無しさん
2025/05/02(金) 19:51:56.60ID:5gJO9Aey カリー化を覚えよう
960デフォルトの名無しさん
2025/05/02(金) 19:54:40.88ID:GN+wBpsy961デフォルトの名無しさん
2025/05/02(金) 19:55:06.57ID:rPO248eK >>955
doudt
doudt
962デフォルトの名無しさん
2025/05/02(金) 20:07:31.93ID:GN+wBpsy オプション引数は結局Option型などで渡すか、あるいは、省略時の値として長い引数の個数を渡すしかない
それを避けるには可変個引数にして引数の個数を持たせて処理していくが効率もよくない
それを避けるには可変個引数にして引数の個数を持たせて処理していくが効率もよくない
963デフォルトの名無しさん
2025/05/02(金) 20:10:27.21ID:tUdMCpmj 他の言語を知っているといろいろと勉強になるから使った方が良い
964デフォルトの名無しさん
2025/05/02(金) 20:14:10.43ID:i8P7c2SF >>960
それは952も示している通りコンパイル時に呼び出し元に展開するだけ
互換性の問題はあるが実用上問題になることは稀だ
Kotlinのようにランタイムのペナルティを許容して被呼び出し側で条件分岐する流派もあるが、Rustはそっちは選ばないだろう
それは952も示している通りコンパイル時に呼び出し元に展開するだけ
互換性の問題はあるが実用上問題になることは稀だ
Kotlinのようにランタイムのペナルティを許容して被呼び出し側で条件分岐する流派もあるが、Rustはそっちは選ばないだろう
965デフォルトの名無しさん
2025/05/02(金) 20:14:30.16ID:n0wyIh3y >>957
繰り返すがここで言うコピーは機械語レベルでのコピーの話、ビットパターンのコピーの話をしてる。
(実行コストについての文脈なので。)
ムーブのコンパイル結果はコピーのコンパイル結果と同一であることの説明であって言語仕様の話をしてないので言語仕様の説明は不要。
繰り返すがここで言うコピーは機械語レベルでのコピーの話、ビットパターンのコピーの話をしてる。
(実行コストについての文脈なので。)
ムーブのコンパイル結果はコピーのコンパイル結果と同一であることの説明であって言語仕様の話をしてないので言語仕様の説明は不要。
966デフォルトの名無しさん
2025/05/02(金) 20:16:15.41ID:wHxIFaHv 構造体の初期化をビルダー方式にするとメリットが多い
・長い引数がなく読みやすい
・必要な指定のみメソッドでチェーンで指定すればよく書きやすい
・Rustでは多くの場合inline化されて構造体の各フィールド指定と同じコードになり効率がよい
デメリットは初めて見る人は慣れていないこと
慣れたらデメリットは消える
・長い引数がなく読みやすい
・必要な指定のみメソッドでチェーンで指定すればよく書きやすい
・Rustでは多くの場合inline化されて構造体の各フィールド指定と同じコードになり効率がよい
デメリットは初めて見る人は慣れていないこと
慣れたらデメリットは消える
967デフォルトの名無しさん
2025/05/02(金) 20:19:38.05ID:tUdMCpmj カーニハンの時代のC言語は仕様上構造体は引数に値渡しできず戻せなかった
実際はある程度をすぎると可能だったらしいが
実際はある程度をすぎると可能だったらしいが
968デフォルトの名無しさん
2025/05/02(金) 20:26:25.98ID:n0wyIh3y >>967
K&R 第一版の時点でも将来的に出来るようになると明瞭に書かれていて、単に構想に実装が追い付いてなかっただけ。
K&R 第一版の時点でも将来的に出来るようになると明瞭に書かれていて、単に構想に実装が追い付いてなかっただけ。
969デフォルトの名無しさん
2025/05/02(金) 20:32:31.01ID:06aFKDyR 呼び出し側も定義する側にとっても冗長なのは普通にデメリットじゃない?
ビルダーは「Rustの制約を考慮すると現状これが最も妥当」くらいのものでしょ
このパターンが「便利だから」という理由で他の言語でも流行る、なんてことは想像しづらい
ビルダーは「Rustの制約を考慮すると現状これが最も妥当」くらいのものでしょ
このパターンが「便利だから」という理由で他の言語でも流行る、なんてことは想像しづらい
970デフォルトの名無しさん
2025/05/02(金) 20:36:36.68ID:tUdMCpmj ビルダパターンはオブジェクトなどの生成が複雑な場合に使われるべき
引数がやや多いと言うだけで使うのは論外
単純なものは他の仕組みファクトリーパターンでも十分では
本当に引数が多い場合もビルダーパターンは適さない
あくまでも生成が複雑なものに限定すべきである
今は過剰にビルダーパターンが使われているけど将来的には減っていくと思われる
引数がやや多いと言うだけで使うのは論外
単純なものは他の仕組みファクトリーパターンでも十分では
本当に引数が多い場合もビルダーパターンは適さない
あくまでも生成が複雑なものに限定すべきである
今は過剰にビルダーパターンが使われているけど将来的には減っていくと思われる
971デフォルトの名無しさん
2025/05/02(金) 20:43:33.27ID:z720W3rP972デフォルトの名無しさん
2025/05/02(金) 20:48:35.63ID:5gJO9Aey 筋肉ビルダーとして鍛えよう。AIには出来ない仕事だ
973デフォルトの名無しさん
2025/05/02(金) 20:49:38.85ID:tUdMCpmj シグネチャの範疇で済むものをキーワード名メソッドとして外に出して記述している
記述法にもよるが一覧性が低下する
記述法にもよるが一覧性が低下する
974デフォルトの名無しさん
2025/05/02(金) 20:50:39.57ID:tUdMCpmj そして記述漏れが出る恐れが出てくる
975デフォルトの名無しさん
2025/05/02(金) 20:54:15.01ID:bGn62aq8 Option型があると言っても
hoge(None, None, None, None, Some(1))
みたいなのはダサいよね
hoge(None, None, None, None, Some(1))
みたいなのはダサいよね
976デフォルトの名無しさん
2025/05/02(金) 20:56:32.63ID:tUdMCpmj structと整合性がない
977デフォルトの名無しさん
2025/05/02(金) 20:59:30.84ID:z720W3rP978デフォルトの名無しさん
2025/05/02(金) 21:00:36.60ID:z720W3rP >>976
嘘を付き出すのはよろしくないかと
嘘を付き出すのはよろしくないかと
979デフォルトの名無しさん
2025/05/02(金) 21:01:59.09ID:z720W3rP >>975
そういうケースのために記述性も効率も良いビルダー方式がある
そういうケースのために記述性も効率も良いビルダー方式がある
980デフォルトの名無しさん
2025/05/02(金) 21:06:06.88ID:tUdMCpmj >>977-978
理解力が低下してるな
デフォルト値を書き換えるのを忘れると言っている
特定の組み合わせが必要なものがあったとして、それを強制する仕組みがない
それに数個必要な引き渡しがいくつ必要なのかを覚えなくてはならない
理解力が低下してるな
デフォルト値を書き換えるのを忘れると言っている
特定の組み合わせが必要なものがあったとして、それを強制する仕組みがない
それに数個必要な引き渡しがいくつ必要なのかを覚えなくてはならない
981デフォルトの名無しさん
2025/05/02(金) 21:09:06.51ID:06aFKDyR982デフォルトの名無しさん
2025/05/02(金) 21:09:43.98ID:z720W3rP983デフォルトの名無しさん
2025/05/02(金) 21:13:02.11ID:5gJO9Aey スクリプト言語じゃないとキーワード引数実装無理じゃね
984デフォルトの名無しさん
2025/05/02(金) 21:13:29.15ID:z720W3rP >>981
derive_builderを使ったことがなく文句を言ってるのかね
この方式のほうが簡潔で冗長がなくなる
オプションキーワード引数方式だと自分でそのシグネチャを書かなければならなく冗長になる
ビルダー方式は冗長がなく有利
derive_builderを使ったことがなく文句を言ってるのかね
この方式のほうが簡潔で冗長がなくなる
オプションキーワード引数方式だと自分でそのシグネチャを書かなければならなく冗長になる
ビルダー方式は冗長がなく有利
985デフォルトの名無しさん
2025/05/02(金) 21:14:00.07ID:bGn62aq8 アニメーションの毎フレーム毎に呼び出すような、パフォーマンスが大事な関数でもbuilderパターン使えるの?
986デフォルトの名無しさん
2025/05/02(金) 21:15:34.05ID:i8P7c2SF キーワード引数なら完全にゼロコストにできる
ビルダーだと、余計な初期化用の構造体が必要だし、値を指定しているパラメータについても最初にデフォルト値のコピーが走っちゃうからゼロコストにならない
ビルダーだと、余計な初期化用の構造体が必要だし、値を指定しているパラメータについても最初にデフォルト値のコピーが走っちゃうからゼロコストにならない
987デフォルトの名無しさん
2025/05/02(金) 21:16:03.15ID:n0wyIh3y 他に膨大な議論をしてるのにキーワード引数なんてたいして重要てはない割に面倒なものは後回しだろ。
(一応は名前つき引数の提案は何年も前に出てはいる。)
(一応は名前つき引数の提案は何年も前に出てはいる。)
988デフォルトの名無しさん
2025/05/02(金) 21:18:16.83ID:5gJO9Aey マクロを使えばなんとか
989デフォルトの名無しさん
2025/05/02(金) 21:22:00.73ID:q0/bxH7J990デフォルトの名無しさん
2025/05/02(金) 21:24:13.63ID:06aFKDyR >>983
コンパイルされる言語でも使うよ (C#やKotlin)
コンパイルされる言語でも使うよ (C#やKotlin)
991デフォルトの名無しさん
2025/05/02(金) 21:24:49.07ID:BP5o1HEV >>989
何と比較してゼロコストだと言ってる?
何と比較してゼロコストだと言ってる?
992デフォルトの名無しさん
2025/05/02(金) 21:25:45.04ID:bGn62aq8 昔々、X ToolkitはCでキーワード引数を実現するために
配列を使ってなかったっけ?
末尾に終端マーカーを置き忘れると落ちる
配列を使ってなかったっけ?
末尾に終端マーカーを置き忘れると落ちる
993デフォルトの名無しさん
2025/05/02(金) 21:29:20.61ID:tUdMCpmj994デフォルトの名無しさん
2025/05/02(金) 21:30:23.29ID:5gJO9Aey >>990
おお、コンパイラ賢い
おお、コンパイラ賢い
995デフォルトの名無しさん
2025/05/02(金) 21:31:43.23ID:q0/bxH7J996デフォルトの名無しさん
2025/05/02(金) 21:34:42.77ID:z720W3rP 構造体の初期化のために
キーワード付オプション引数の関数のシグネチャを記述するのは冗長でバカげている
Rustのderive_builder利用のビルダー方式が最も簡潔でベスト
キーワード付オプション引数の関数のシグネチャを記述するのは冗長でバカげている
Rustのderive_builder利用のビルダー方式が最も簡潔でベスト
997デフォルトの名無しさん
2025/05/02(金) 21:38:09.58ID:06aFKDyR SerdeやPythonのnumpy並みに「その言語の利用者ならみんな知ってる」ライブラリならともかく、ユーティリティ程度のものでも特定のライブラリにロックインするのがベストなもんかね
998デフォルトの名無しさん
2025/05/02(金) 21:38:30.32ID:n0wyIh3y >>993
キーワード引数なら間違えないのか?
キーワード引数なら間違えないのか?
999デフォルトの名無しさん
2025/05/02(金) 21:39:36.25ID:n0wyIh3y >>997
マクロってそういうもんだよ。
マクロってそういうもんだよ。
1000デフォルトの名無しさん
2025/05/02(金) 21:40:47.47ID:tUdMCpmj Rustおじさん論破した
10011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 39日 4時間 3分 48秒
新しいスレッドを立ててください。
life time: 39日 4時間 3分 48秒
10021002
Over 1000Thread 5ちゃんねるの運営はUPLIFT会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《UPLIFT会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
4 USD/mon. から匿名でご購入いただけます。
▼ UPLIFT会員登録はこちら ▼
https://uplift.5ch.net/
▼ UPLIFTログインはこちら ▼
https://uplift.5ch.net/login
運営にご協力お願いいたします。
───────────────────
《UPLIFT会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
4 USD/mon. から匿名でご購入いただけます。
▼ UPLIFT会員登録はこちら ▼
https://uplift.5ch.net/
▼ UPLIFTログインはこちら ▼
https://uplift.5ch.net/login
レス数が1000を超えています。これ以上書き込みはできません。
ニュース
- 高市首相、トランプ米大統領に「早期に会いたい」 日中関係悪化受け… ★3 [BFU★]
- 「これいいじゃん!!!」 セブン-イレブンの1620円で買える“1人用クリスマスケーキ”🎂に注目殺到「天才すぎる」 [パンナ・コッタ★]
- 【コメ】卸売業者「簡単に安売りできない」「大暴落起きれば大赤字に」 JA「新米の販売進度が近年になく遅い。コメの回転が悪い」 ★5 [Hitzeschleier★]
- 高市早苗首相が天理教系企業に“巨額発注” 総額5000万円 本人は「政治団体の活動に必要な支出」と回答 ★2 [Hitzeschleier★]
- 【サッカー】日本代表、FIFAランキング“4位”の強豪イングランドとの対戦が正式決定! 来年3月に聖地ウェンブリーで激突へ [久太郎★]
- 「残クレ」でマイホーム、国が銀行向け保険 新型住宅ローン普及促す -日経 ★3 [少考さん★]
- 高市早苗「長期金利なんかよりも日本が成長することのほうが大事」 [834922174]
- 【悲報】高市「マクロンさあ!近平G7に呼ばずハミゴにしちゃってよ!😡」【小学生内閣】 [359965264]
- 結局手を出さなければ緊張することもなかった、高市早苗の外交力はゼロどころかマイナス [245325974]
- 近所にびっくりドンキーがないんだけど!!!
- 【安倍晋三】中国船4隻が領海侵入 [828897501]
- 【実況】博衣こよりのえちえちスーパーダンガンロンパ4🧪
