Rust part29

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2025/05/03(土) 00:47:30.13ID:phVJ5tWC
公式
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 part28
https://mevius.5ch.net/test/read.cgi/tech/1742805420/

ワッチョイスレ
プログラミング言語 Rust 4【ワッチョイ】
https://mevius.5ch.net/test/read.cgi/tech/1514107621/
2デフォルトの名無しさん
垢版 |
2025/05/03(土) 07:56:18.42ID:ERFTsxnY
>>前969
>このパターンが「便利だから」という理由で他の言語でも流行る

C++のstreamのsetwみたいでださいな
2025/05/03(土) 09:25:44.77ID:qBega2UP
>>前995
> 構造体のフィールドに値を入れていって構造体を作成しても
> derive_builderを使いメソッドで値を入れていっても同じになった
> メソッド呼び出しが消えた
> ゼロコスト

builderのコストは下記。名前付き引数とデフォルト値を使用した方法であれば全て不要で単なるnewの呼び出しとなるが、これらが全て最適化で消えるのか?
* パラメータ用の構造体(以下P)のアロケーション
* 構造体Pのデフォルト値での初期化
* 構造体Pのフィールドに対する上書き
* 構造体Pから最終的に作成する構造体への各フィールドの逐次的なコピー
* 構造体Pの破棄
2025/05/03(土) 09:44:09.41ID:WnzKFtQv
全部消える。 構造体初期化の文法で書いた場合と同じ。
最適化しない場合の素朴な処理でもそんなに気にするような深刻な差もない。
2025/05/03(土) 10:00:48.18ID:WFDs7LYH
>>4
compiler explorerで示して
2025/05/03(土) 10:10:18.01ID:h9Jrb8E+
は?
2025/05/03(土) 10:43:01.54ID:rfaECn6+
君は見たか?
複おじがぐうのねも出ずに論破された所を
2025/05/03(土) 10:49:14.34ID:NA/ingJD
過視化するな
2025/05/03(土) 10:52:36.35ID:rfaECn6+
大体のケースでビルダーパターンはアンチパターンと主張し続けて20年以上経つ
2025/05/03(土) 10:54:37.53ID:0l2J5oT4
最適化されることを主張するなら証拠を示すべきなのは当然だが、
コピーの最適化を前提にするのなら例えば安易にCopy実装したりcloneしたりすんな、
みたいな意識高い言説は多くの場合無意味になっちゃうわけだけど、Rustおじはそれでいいのだろうか
11デフォルトの名無しさん
垢版 |
2025/05/03(土) 11:28:41.74ID:x2OSMXKg
この流れは流石に重箱の隅をつつきすぎじゃないの?
Rustのビルダーはオプショナルな動作を指定するパターンでしかないし、これが最適化されないと困る場面もそんなに無い
せいぜい、ヒープを使うデータについてビルダーを消費するか、中身を clone するかを検討するくらいでしょ

コピー動作が問題になるとしたら、例えば数十万とかの要素を持つ配列の for ループ内でビルダーを使う場合が考えられるけど、それならビルダーを1度だけ作ってそれを使いまわせばいいし

「Rustにも他の言語のオプション引数やキーワード引数があると嬉しいよね」という話なら同意だけど、ビルダーのパフォーマンスはそんなに重要な話でないというか
2025/05/03(土) 11:29:53.96ID:rfaECn6+
ストローマン論法
2025/05/03(土) 11:53:45.69ID:NA/ingJD
匿名の藁人形は作れない
作れるのは名指しできる個人や団体だけ
だから実名のSNSは嫌なんだよね
2025/05/03(土) 12:04:07.72ID:ekVKJoF2
>>10
一理ある
2025/05/03(土) 12:39:00.21ID:0l2J5oT4
RustやC++のゼロオーバーヘッドが意味するところは結局「俺達のコードがどのように処理系によって最適化されるかを俺達は知っている」ということであって、
どのような最適化がなされるかについて一定の透明性があり結果が自明であることが重要
その点で、コピーの最適化を前提にするってのはかなり微妙
2025/05/03(土) 13:47:12.37ID:ekVKJoF2
「かいたとおりにうごく」が最適化では成り立たないからなぁ
2025/05/03(土) 13:55:18.67ID:NA/ingJD
昔ある言語でcontinueがないぞと散々言われて、gotoが実装されたことがあった
何もしないのと比較すればcontinueの提案は優れていたかもしれないが
それは比較対象との相性が良かっただけ
2025/05/03(土) 14:13:59.39ID:rfaECn6+
数年前に読んだ書籍にcontinueは使うべきでないと書かれていて驚いた
2025/05/03(土) 14:41:11.34ID:WnzKFtQv
>>10
安易に clone すべきでないのは所有権管理の話で、実行コストの話とはレイヤが違う。
20デフォルトの名無しさん
垢版 |
2025/05/03(土) 18:56:47.80ID:Q4RX0Sa/
スマホとPCの作業を効率化したい--「Copilot Vision」の便利な8つの活用例
2025-05-03 07:00
https://japan.zdnet.com/article/35232549/


1 プログらまーまこれを改造してるので上記以外の状態でも使用できるようにしている

2 すでにプログラムがあるので1〜コードを作成する必要が無い

ボイス・トォ・スカルの本態が一般パソコンにまで来たのでつい買い捨てができるようになった
マネーロンダリング 談合 インサイダー などがはかどるといわれる
2025/05/03(土) 23:51:30.72ID:OINldK7L
>>3
それらは最適化ですべて消えて最終的な初期化構造体のみになった
イテレータメソッドチェーンなどの時と同じ原理
それはもっと極端で各イテレータ毎にいくつ構造体があろうと縮約したりレジスタ化されたりして各構造体は消えていく
2025/05/04(日) 01:14:00.32ID:31CqVJjs
複オジ脳やべぇな
視野が狭すぎる
2025/05/04(日) 09:21:09.35ID:AbCvwvGO
>>19
cloneして意図通りに動作しなくなるならそりゃ普通にcloneの実装もしくは利用者側のバグだろ。作法の問題ではない。
そんな中身を理解しないままコピペしてるバカみたいな低次元のことは誰も問題にしていないでしょ。
2025/05/04(日) 09:55:20.90ID:768oLjN1
>>10
区別できないバカなのか?
ムーブの時などを含めて実態がコピーになるといってもコピー元は二度と使われないのだから最適化できる

一方でclone()などはコピー元をその後も使うためにコピーしている
コピー元を二度と使わないならclone()の必要がない
そしてコピー元をその後も使うから最適化の前提さえ成立しない
2025/05/04(日) 11:20:50.74ID:AbCvwvGO
それは少なくともbuilderの最適化の文脈においては明確に誤り
実際、derive_builderはcloneが最適化されることに依存している
2025/05/04(日) 12:05:36.94ID:RkNPiBO2
RustやC++のムーブも同じで一次的にはコピーをして元を使わないため最適化できる場合が多い
一方でプログラマがコピーやクローンを明示的にした場合は元が生きていて全く異なる
そもそも元も後で使いたいからコピーしているわけだ
だからムーブとは異なり最適化でコピーが消えることはない
もちろん後で使いたい場合はコピーして渡すのではなく参照を渡すのが正解だ
したがってプログラマはコピーを可能な限り避けるべきである
暗黙のコピーが行われるプログラミング言語では意識せずコピーしてしまう
プログラムを見ただけですぐにコピーしてあることがわかる方が望ましい
RustではCopyトレイト実装した型のみ暗黙のコピーが起きる
前述のように数値などはその方が有利なので最初からCopy実装されている
ヒープを用いない型ならばプログラマは自由にCopy実装できるがコード上でそれが明示され読む側は気付ける
サイズが大きく参照で扱った方がよい型をCopy実装していればおかしいことがわかる
一方でヒープを用いていればCopy実装はできないがClone実装はできる
これはコード上でfoo.clone()とコピーすることを明示的に記述する必要がある
したがって参照を使えばよいのに無駄なコピーをしていればすぐにわかる
2025/05/04(日) 13:33:55.47ID:V3G8dKZI
無駄をなくそうとしたらコンパイルが通らなくなった
っていう質問を処理するコストが高いよね
実行時のコストではなく
2025/05/04(日) 13:35:26.53ID:YbSG8qnS
読む気が失せる分だけど読んだ
ところが間違ってるというか言い過ぎだと思う
2025/05/04(日) 13:38:00.38ID:JiKNIZxM
クソデカ長文とかどこでも現れる辺りRustとRubyって似てるなーと思った次第である
2025/05/04(日) 13:41:35.32ID:w7r9Yiaa
この程度で長文扱いって普段どれだけ文章を読まないんだよ。
2025/05/04(日) 13:43:24.90ID:YbSG8qnS
暗黙のコピーが行われるプログラミング言語は大体値のコピーを行っている
値はこの場合参照なのでコストは限りなく低い

暗黙でポインターをコピーしてそれがコストが掛かると言う人はいないだろ
2025/05/04(日) 13:44:23.89ID:YbSG8qnS
>>30
読む気が失せるのは文章が下手くそだからであって長いことは関係ない
そしてボロボロと誤りと言うか独断に基づいた誤りがたくさん入っている
2025/05/04(日) 13:47:16.56ID:YbSG8qnS
複おじはAIに下書きを食わせて推敲してもらうべきだと思う
2025/05/04(日) 13:53:19.75ID:RkNPiBO2
むしろAIに生成させてるんじゃないかと思われる
同じことを何度も何度もダラダラ箇条書きに
眠くなるわ
2025/05/04(日) 13:57:45.80ID:V3G8dKZI
見たい所だけ切り取ればいいんだよ
切り取りや編集の責任をトリクルダウンするために、書く側は編集をしないという戦術だろうけど
それはどうでもいい
2025/05/04(日) 13:59:33.25ID:YbSG8qnS
AIではないよ
小論文など書くときに指摘されるけど、考えをまとめないでずらずらと続く文章は修正しろと言われる

一部の行頭だけ切りだすと以下のように前の文章とつなげて書いてるから読み手にはわかりにくい
↓これが連続して使われているので読み手への負担になっている

一方で
そもそも
だから
もちろん
したがって
2025/05/04(日) 14:05:10.05ID:YbSG8qnS
人間の脳もスタック状になってるんでドンドン文が接続されていくと脳内にスタックが作られてスタックがチェーンして肥大化して理解が苦しくなる
これは当たり前
2025/05/04(日) 14:21:14.87ID:YbSG8qnS
文章がダラダラと接続されているものは、まともに推敲されていないので、基本的に読むコストに比べて得られるものが少ない
雰囲気で書かれているので間にも間違いや矛盾が含まれている

読み手に対して読みやすさが考慮されていないのでふつーに読まなくても良い
2025/05/04(日) 14:36:43.37ID:YbSG8qnS
ここでようやくchatGPTに聞いてみた

✅ 読みにくさの主な原因


1.接続詞やつなぎ言葉の多用による文の長文化

「一方で」「だから」「そもそも」「もちろん」「したがって」などの論理接続語が多く使われ、それぞれの文が長くなりがちです。
 
結果として、読者は一文ごとの意味の切れ目を捉えづらくなります。


2.
文構造が複雑で、主語と述語の対応が曖昧

「コピーして渡すのではなく参照を渡すのが正解だ」のように、主語が省略されていて読み手が文脈を補う必要があります。



3.抽象的な話が続き、具体例や対比が乏しい

例えば「ムーブはコピーと違う」と言いつつ、具体的にどう違うのかの明示がないため、読者が前提知識を持っていないと理解しにくいです。


4.
視点の切り替えが頻繁

ムーブとコピー、CopyとClone、参照と値渡しなど、話題が細かく切り替わっているが、その都度明確な導入がないため混乱を招きます。
2025/05/04(日) 14:42:19.99ID:V3G8dKZI
もっと詳しく書け、とAIが言っている
みんなAIに騙されてる
2025/05/04(日) 14:51:46.05ID:YbSG8qnS
さっき書いた部分は連続で接続されている

A 一方で B = C(文意)
C そもそも D = E(文意)
E だから F = G(文意)

Y したがって Z

Zを理解するためにAから後を状態や文意を含めて全部覚えておかないといけない

読み手を疲弊させるには接続を多用したらいいとも言える
42デフォルトの名無しさん
垢版 |
2025/05/04(日) 15:48:20.78ID:pRD7GF2w
みんな読みやすい文を書いて良い大学、良い企業に入りたいとか
読みやすい文を書いて本を出版して売りたいとか
金の為に文を書いているからな
文なんて記号に過ぎない意味が伝わればいいのよ
2025/05/04(日) 15:53:36.21ID:w7r9Yiaa
意味が伝わればいいとか言ってるやつが書いた文章はたいてい伝わってねーから。
プロが推敲したってきちんと伝えるのは難しいのにそれ以下の質ならそれ以下にしか伝わらないよ。
44デフォルトの名無しさん
垢版 |
2025/05/04(日) 16:11:44.87ID:pRD7GF2w
国語の天才が推敲すると数学も理科も社会も意味がわかるようになるなら
学校で国語だけ教えてればいいだけだろボケ
2025/05/04(日) 16:24:07.39ID:rF0671A/
確率扁微分方程式を国語で説明してくれ

三行でよろぴく
46デフォルトの名無しさん
垢版 |
2025/05/04(日) 16:27:43.19ID:pRD7GF2w


書読め
2025/05/04(日) 16:34:02.19ID:SPPeLARI
もちろんでNGしとけ
2025/05/04(日) 16:43:31.57ID:NNcLkyI5
AIにコードを生成させるならもうRustはいらない子だよね
2025/05/04(日) 17:06:18.99ID:V3G8dKZI
>>48
こういうのはビッグウェーブに乗る力であって国語力ではないね
2025/05/04(日) 17:29:04.69ID:YbSG8qnS
他人に自分の主張を理解してもらいたいなら、少なくともわかりやすく書く必要がある

いつも例の人の文章を読んでると念仏を聞いてるような気分になる
誰かが眠くなると書いてたけど自分もその印象が強い

言葉を吐くマシーンの様で理解してもらおうなどと思ってないんだろうなと
2025/05/04(日) 18:03:43.43ID:V3G8dKZI
理解されるためならなんでもしますという意志はたいして重要ではない気がする
なんでもするって言わせたい人にとって重要なだけだろう
2025/05/04(日) 18:15:26.35ID:MUJ0VZ08
文章の読みやすさを意識しないプログラマのコード品質って大丈夫なのか?
2025/05/04(日) 18:50:12.49ID:YbSG8qnS
理解されないなら主張としては存在しないのと変わらない
公共の場にただのデカいゴミがあってみんな邪魔だなって思うだけ
2025/05/04(日) 19:37:09.88ID:hE1W0oD0
derive_builderのドキュメント見てみた
Rustはこれらのclone呼び出しも最適化して賢いと書かれている

https://docs.rs/derive_builder/latest/derive_builder/#-performance-considerations

Performance Considerations

Luckily Rust is clever enough to optimize these clone-calls away in release builds for your every-day use cases. Thats quite a safe bet - we checked this for you. ;-) Switching to consuming signatures (=self) is unlikely to give you any performance gain, but very likely to restrict your API for non-chained use cases.
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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