探検


Rust part37

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2026/07/17(金) 19:12:31.24ID:yl11920u
公式
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 part36
https://mevius.5ch.io/test/read.cgi/tech/1779974768/

ワッチョイスレ
プログラミング言語 Rust 4【ワッチョイ】
https://mevius.5ch.io/test/read.cgi/tech/1514107621/
2026/07/19(日) 23:54:04.40ID:2yWTRs2r
>>549
成り立たないコードが示されてるのに勝手に成り立つコードに書き換えて「どんなケースでも成り立つ!」は嘘吐きすぎる
2026/07/19(日) 23:54:35.61ID:GVCMKu1f
>>550
なぜ元の>>159を混ぜるんだよ
2026/07/19(日) 23:54:56.33ID:GVCMKu1f
>>552
参照を返せないコードはどれですか?
2026/07/19(日) 23:56:34.41ID:GVCMKu1f
unsafeのspawn_unchecked()でも参照を返せることを>>524で示した
このケースでも反例はない
2026/07/19(日) 23:57:23.89ID:gTGt9p2I
>>554
勝手に寿命変えたら返せて当たり前だろ
スコープを壊さずに返せよ無能
2026/07/19(日) 23:57:41.89ID:gTGt9p2I
>>555
また嘘吐きか
2026/07/19(日) 23:58:46.18ID:HimEHeoN
「どんな寿命の参照でも」「どんな値でも」「他の関数から返ってきたものでも」「関数から必ず返せる」 (>>159)

「スコープで寿命が変わってるから返せないんだ! こんなのは反例にならない!」

もう嘘しか吐いてない
2026/07/19(日) 23:59:07.13ID:GVCMKu1f
>>556
handleが外スコープにあるから
内スコープにあるものの参照を返さないのは当たり前
スコープ則を学びなさい
2026/07/19(日) 23:59:21.63ID:GVCMKu1f
Rustでは以下が常に成立する
ここまでに反例なし

【前提】どんな寿命の参照でも、それを関数の引数で受け取ったら、
【恒真】その参照や一部の参照を、関数から必ず返せる

>>159
>>どんな寿命の参照でも、それを関数の引数で受け取ったら、その参照や一部の参照を、関数から必ず返せる
2026/07/19(日) 23:59:24.81ID:HimEHeoN
「どんな寿命の参照でも」「どんな値でも」「他の関数から返ってきたものでも」「関数から必ず返せる」 (>>159)
「任意のライフタイムで必ず成立する」(>>183)
「Rustでは付加条件なく必ず成り立ちます」(>>214)

thread::spawn() はクロージャ越しに受け取ってるから引数だけど違うよね……やっぱなし!
クロージャが返してるからセーフ……これもなし!

実は関数の引数で受け取るコードがコンパイル通ったらってことでした! ほら、rustcでコンパイルが通ったら成り立ってるでしょ!
あ、あとunsafeは別だから!

やっぱり標準ライブラリの関数が勝手に「使えるけど使えなくしまーす」って意地悪で言ってるんです!
コンパイル通ったらって条件も残ってます!

そんなことないです! 固有の事情があるんです! そう、固有の事情です!
受け取る参照を制限しているから、受け取ったら返せるんです!

スコープで寿命が変わってるから返せないんだ! こんなのは反例にならない!

早くこれに納得いく説明をしてくれよww
2026/07/20(月) 00:00:01.10ID:ePIKrZ+R
>>560
×ここまでに反例なし
○ここまでにID:GVCMKu1fの主張の証拠なし
2026/07/20(月) 00:00:59.52ID:WgMKnyG7
>>560
「ここまでに反例なし」じゃなくて「ここまでに僕が聞きたい降伏宣言なし」だろww
お前がやってることは反例に対して「僕が思ってたのと違う!!」って発狂しただけ
2026/07/20(月) 00:01:22.56ID:yjKLz6QF
日付変わったからID変わるし逃げるチャンスだぞw
565デフォルトの名無しさん
垢版 |
2026/07/20(月) 00:04:25.07ID:uo5Y2Bx6
鳩に餌をあげないでください
2026/07/20(月) 00:26:23.15ID:+KK2qof4
>>562-563
これだな
2026/07/20(月) 01:03:36.24ID:whsYlLNP
すっげー伸びてるじゃん
友達ができてよかったね複くん
2026/07/20(月) 01:29:30.72ID:FTzidL2p
RustとPythonってみんなどっちが書きやすいんだろ
個人的には断然Rustなんだが
569デフォルトの名無しさん
垢版 |
2026/07/20(月) 02:28:01.91ID:SUSKKYlc
コンパイルエラーとフォーマッタに依存しきった書き方してるからクレートあるものに関してはRustかなー
pythonのインデント調整を筆頭に色々とめんどくさいん、でもBlender関連は諦めてpythonで拡張してるし、obsidian関連はtypescriptで拡張してる
2026/07/20(月) 07:13:02.37ID:xinP/7ux
https://atmarkit.itmedia.co.jp/ait/spv/2605/08/news038.html
図1 プログラミング言語の案件別平均年収ランキング
1位 Rust 月額84万 年収1008万円
2026/07/20(月) 07:18:33.55ID:bz7XXARi
Pythonは軽く書くにはいいけど数百行でつらくなるからなあ
それ以上書くならRustだなあ
572デフォルトの名無しさん
垢版 |
2026/07/20(月) 07:42:00.48ID:guFOVLdG
>>568
パイソンいいよ
書き味がC#に似てる
573デフォルトの名無しさん
垢版 |
2026/07/20(月) 07:42:40.75ID:guFOVLdG
>>571
他人のコード渡されても安心なのがラスト
他人のコードでランタイムエラーになってキレそうになるのがパイソン
2026/07/20(月) 07:46:30.86ID:NK50dKXH
Rustに移ったら実行時エラー実行時デバッグが激減した
575デフォルトの名無しさん
垢版 |
2026/07/20(月) 08:00:48.22ID:guFOVLdG
>>574
ちょっとわかる
パイソンのときだと修正加えた瞬間に動いたような気がしたけど、細かい条件分岐に入ってランタイムエラーとかあるよねー
テストしろ!って怒られるのは覚悟の投稿
2026/07/20(月) 08:26:00.87ID:7Rhw2qA3
糞つまんねーサッカーやっと終わった
仕事サボってサッカーの話ばっかしてる派遣プログラマーは今月で契約終了
こいつに月50万も払って割に合わねーわ
577デフォルトの名無しさん
垢版 |
2026/07/20(月) 08:27:15.99ID:0sKavqd3
rustがスペインでclangがアルゼンチン
2026/07/20(月) 08:38:16.51ID:LWHvvzEG
ひとりで書く → Python
みんなで書く → Rust

※但し1か月前の自分は他人とする
2026/07/20(月) 09:04:09.07ID:RcARJTFP
Rustアンチが複おじに負けてて草
2026/07/20(月) 12:18:10.16ID:whsYlLNP
ウザくなってきたらissue#25860って言っとけば死ぬよ
延々関係ない方向で突っ走ってるけど>>159結局そういうことやろ
581デフォルトの名無しさん
垢版 |
2026/07/20(月) 15:59:06.97ID:szQO4V1s
確かにrust案件爆増中だが、GUI絡むとそうでもなかんべ?
汎用というにはまだほど遠い。
スペシャリストの世界。
2026/07/20(月) 15:59:48.85ID:sLwgYfCK
おじ(111)がいなくなると、あれだけ無尽蔵に人が湧いてきて
おじのテーマに沿ってレスバしてたのが嘘のようだな
583デフォルトの名無しさん
垢版 |
2026/07/20(月) 16:03:58.56ID:a2WJC20F
GUIは発展してるでしょ
無駄な装飾がなくて結構
2026/07/20(月) 16:28:36.12ID:pPSg1Dki
eguiて(笑)
2026/07/20(月) 17:14:59.49ID:PL45+lRs
>>581
何を言ってるんだこいつは……
ブラウザなんかGUIの最たるものだろ
2026/07/20(月) 17:16:09.17ID:VhtRD10G
>>580
未定義動作と言語仕様の差がわかってないの笑う
2026/07/20(月) 17:19:19.28ID:dl1I1D3P
どうせそういう変なこと言ってる奴は荒らしたいだけでまともな話したいわけじゃないからスルーした方がいい
2026/07/20(月) 17:57:06.05ID:t0i6pd/k
>>578
結局メンテするならRustってことか
589デフォルトの名無しさん
垢版 |
2026/07/20(月) 18:27:45.40ID:BxRlG/zJ
>>582
本人は自演がばれてないと思ってるっぽい
2026/07/20(月) 19:43:06.66ID:whsYlLNP
「どんな寿命の参照でも」って表現がまず曖昧でこれ単独じゃ何の意味も取れないんだけど
複おじとそのお友達はお互い何か意味のあることを言っていると思って、連休の2/3と数百レスを費やした挙句何の理解も得られてないってのはだいぶおもろいかもしれん
591デフォルトの名無しさん
垢版 |
2026/07/20(月) 19:47:20.49ID:PnKnKpht
>>590
後世の人がたまたま過去ログが詰まったハードディスク拾ってこのスレのログ見つけたとき、一体何をレスバしてたのか解読に苦しみそうだな
ロゼッタストーン並みに難解と言われそう
2026/07/20(月) 19:52:05.14ID:DWavJb6G
>>590
関数が参照を受け取った時
それが任意のライフタイムであっても関数から返せる
という当たり前の原則に見えたが
2026/07/20(月) 19:53:58.77ID:KaxLJD1L
新しいスレ住人のみんなはこれでご理解いただけたであろうか?
不毛? 徒労感?
これが複おじの提供する機能である
認知のゆがみがある人との対話が無駄に終わることを学べただろうか?

こいつはしょっぱなから「所有権の複製」とかいうアホ概念について
長きにわたり同じようなやりとりを既にやってるのである
594デフォルトの名無しさん
垢版 |
2026/07/20(月) 20:00:36.85ID:jeQChXBT
オレなら不毛な議論をせずに一発で証明できる

fn foo1<'a, T>(x: &'a T) -> &'a T {
x
}

fn foo2<'a, T>(x: &'a mut T) -> &'a mut T {
x
}

ライフタイムがどんなに短くても長くても受け取った関数にとっては中立
2026/07/20(月) 20:17:52.73ID:whsYlLNP
それだけですか?
それだけなんだろうな
2026/07/20(月) 20:21:57.37ID:whsYlLNP
ライフタイムについて真面目に勉強したい人向け資料

https://github.com/pretzelhammer/rust-blog/blob/master/posts/translations/jp/common-rust-lifetime-misconceptions.md
597デフォルトの名無しさん
垢版 |
2026/07/20(月) 20:24:42.75ID:uo5Y2Bx6
>>585
Rust製ブラウザとかあったっけ?
2026/07/20(月) 21:25:03.36ID:uGn3+DFY
Rust製ブラウザと言えばServo
そもそもRust自体がFirefoxを改善するために生まれた言語
599デフォルトの名無しさん
垢版 |
2026/07/20(月) 22:35:09.28ID:UJSv85dV
>>592
>>594
複おじまだいたのか
2026/07/20(月) 22:43:17.19ID:kp6lL+TA
>>597
FirefoxにもChromiumにも入ってるよw
FirefoxなんかもろCSSのレンダリングに使ってる
2026/07/20(月) 23:12:17.26ID:61nUbP3Q
アンチはやたら「100%RustじゃなかったらRustの意味はない」ってゼロヒャクを言いたがるよな
2026/07/20(月) 23:12:50.06ID:LQZCFRGP
>>594
Rustの言語仕様として受け取った参照を返すことができるのはもちろん正しい
一方で論争になっていたのはこちら
「なぜ関数が受け取る引数には型やライフタイムに制約があるものが存在するのか?」
結局これは関数が提供したい機能に依って受け取れる型やライフタイムに制約が生じる
こちらはRustの言語仕様とは関係ない
2026/07/20(月) 23:19:43.37ID:H8/wSbOi
>>594
これで何かを証明したつもりになっているらしい草
2026/07/20(月) 23:52:47.51ID:whsYlLNP
>>602みたいな主語抜けアスペ文で誰かに何かが伝わると思ってるほうが草だよ
605デフォルトの名無しさん
垢版 |
2026/07/20(月) 23:57:17.47ID:IJFMdDIv
>>602
まあそうなんだけど
'staticしか受け取らない関数なんて無数にあるのにspawnに固執してた人いたな
606デフォルトの名無しさん
垢版 |
2026/07/21(火) 00:58:47.10ID:QTPwz4XE
もうみんなclone()して幸せになろう
607デフォルトの名無しさん
垢版 |
2026/07/21(火) 01:02:17.70ID:llmZLZOr
Linux全面AI推進へ

リーナス・トーバルズが「LinuxはアンチAIではない」「気に入らないならフォークすればいい」などLinuxカーネル開発におけるAI利用について意見を述べる
https://gigazine.net/news/20260717-linux-linus-torvalds-ai/
608デフォルトの名無しさん
垢版 |
2026/07/21(火) 01:38:33.62ID:QTPwz4XE
貼る場所ちがくね
2026/07/21(火) 02:34:33.11ID:skCMy8IN
>>605
まだやってんのか
「ライフタイムの制約はない」とかほざいてる奴がいただけだろ
2026/07/21(火) 02:35:01.04ID:skCMy8IN
>>607
AI全面推進なんて書いてないしRustの話でもないし無茶苦茶
2026/07/21(火) 02:36:30.43ID:skCMy8IN
>>602
提供したい機能によってライフタイムの制約が生じるというのは間違ってないけど、言語仕様と関係ないというのは間違いだね
提供したい機能を言語仕様の制限の中で提供するにあたって、ライフタイムの制約を受けているので
2026/07/21(火) 02:50:42.06ID:x5O9ScDZ
>>611
それは言語機能による制約ではない
特殊な機能を提供するための各関数の固有の制約
2026/07/21(火) 02:54:10.33ID:G3LfMY0d
>>612
じゃあ言語仕様の制約はどの言語にも一切ないって主張になるな
そんな前提をぶち壊すラディカルな話をしろって言ってるわけじゃない
2026/07/21(火) 02:55:15.55ID:IG70nYUK
> 各関数の固有の制約

Rustにライフタイムの制約がないのに各関数が勝手にそれをつけてるって、流石にそんな嫌がらせはしないと思うが
2026/07/21(火) 03:01:24.29ID:pperHCQY
>>611
これよな
2026/07/21(火) 03:05:18.55ID:6mJa4phR
>>612の理屈をC言語の標準ライブラリで考えるとおかしさがわかりやすくて、malloc() で確保した領域を free() で解放しなきゃいけないのは標準ライブラリの仕様ではなくそれを使うコードのせい、みたいな話になってるんだよな
当然そんなわけはなくて、malloc() を使うことまではそのコードの問題だけど、free() を使う必要があるのは標準ライブラリの仕様に縛られているから
2026/07/21(火) 03:06:50.82ID:8oAusgWd
同じように、'static しか受け取れない機能を作ることまではその関数の問題であったとして、'static しか受け取れないという仕様の原因になっているのはライフタイムの制約を言語側が仕様として定めているからに他ならない
2026/07/21(火) 03:08:49.84ID:tAZ83IIh
こういう区別のつく人間って希少なんだよな……
619デフォルトの名無しさん
垢版 |
2026/07/21(火) 03:16:38.78ID:dnpNhuMb
>>612
その区別が重要だな
620デフォルトの名無しさん
垢版 |
2026/07/21(火) 04:02:54.66ID:llmZLZOr
###なぜ 'static やライフタイムの制約が存在するのか?

​Rustには**「ガベージコレクタ(GC)を持たずに、メモリ安全性と高いパフォーマンスを両立する」**という根本的な設計思想があります。これをコンパイル時の静的解析だけで実現するために編み出されたのが、ライフタイムのシステムです。
2026/07/21(火) 04:39:09.20ID:uj8HJQGP
>>620
GC言語でGC対象はヒープ領域に格納されるのに対して
Rustはスタック領域にある関数ローカル変数に値を置いたままそこへの参照を安全に使うことができる点が大きい
取り扱う参照がスタック領域を指しているかヒープ領域を指しているか区別することなく全く同様に扱えるようになった
つまりGC言語と比べてRustは自由を得た
2026/07/21(火) 14:15:41.69ID:lcbPHFy/
>>619
区別ついてない側なの笑う
2026/07/21(火) 14:18:04.24ID:lcbPHFy/
>>621
×取り扱う参照がスタック領域を指しているかヒープ領域を指しているか区別することなく全く同様に扱えるようになった
別に参照はこれまでの言語でもどちらの領域を指すか区別して用いるものではない
また、変数自体はスタック領域を指しているかヒープ領域を指しているか区別して扱う必要がある
2026/07/21(火) 14:18:31.22ID:lcbPHFy/
>>620
まあ、せやな
2026/07/21(火) 14:28:07.20ID:VQBl6cxm
Goで書き直されたTypeScript 7.0が正式リリースされてるね
自由度高くて安全で高速なGo実装を簡単にRustに移植出来たら良いのに
2026/07/21(火) 14:29:27.36ID:CzSf/WLm
>>623
嘘つくな
区別して扱う必要ない
627デフォルトの名無しさん
垢版 |
2026/07/21(火) 14:35:44.45ID:snwCrAuS
###なぜGoなのか
Rustの厳格な所有権や借用規則の世界へいきなりジャンプしようとすると、その「TS寄りの複雑な構造」そのものを根本から完全再設計しなければならず、難易度が跳ね上がってしまいます。
​つまり、移行元のコードベースの性質や、プロジェクトを現実的な期間でゴールさせるための「距離感」として、Goがちょうどよかったということですね。
2026/07/21(火) 14:36:57.76ID:+g9vCx9h
>>626
じゃあスタックに巨大構造体置きまくっても安心だな!
2026/07/21(火) 14:38:08.63ID:Y7iYabno
>>625
常に動き続けるホットパスでもないし、Rustである意味がないからなあ
2026/07/21(火) 14:42:04.63ID:dOwNZd0l
>>628
2026/07/21(火) 14:43:29.36ID:Q4NAg/vC
>>626はVecと配列の使い分けとかわかってなさそう
「どうしてサイズが決まってるのにVec使うんだ!」とか怒るのかなw
632デフォルトの名無しさん
垢版 |
2026/07/21(火) 14:46:23.20ID:zAGEz4m7
wasmあるのにうんこスクリプトとかどうでもよくね
633デフォルトの名無しさん
垢版 |
2026/07/21(火) 14:47:38.87ID:WrqAi9Ss
>>623
逆だよ
スタック領域を指しているかヒープ領域を指しているか区別して扱わなくても安全になったのがRust
2026/07/21(火) 14:48:11.17ID:tGu6saZ+
>>633
スタックとヒープの区別を free() するかどうかだけだと思ってそう
2026/07/21(火) 14:48:44.88ID:N6cPltdK
えっ、違うんですか!?
636デフォルトの名無しさん
垢版 |
2026/07/21(火) 14:54:33.42ID:llmZLZOr
>>632
うーむ...🤔
2026/07/21(火) 15:01:54.68ID:WbXqAfwq
Rustではスタック領域/ヒープ領域に正式な名称がないはずだから、Cの自動記憶域/割り当て記憶域って言葉を使うけど、自動記憶域は関数に入る時に関数の戻り先アドレス、引数、ローカル変数などをスタックフレームに積むプログラム自身の管理のための機能になってる
だから変数を置く領域の広さはそこまでなくて、OSによって違うけどデスクトップやモバイルなら1MiB〜8MiBくらいしかない
したがって、大きなデータは割り当て記憶域に置く必要があるので、たとえばさっきの配列とVecの例なら、大きな配列はサイズが固定されていても割り当て記憶域を確保するVecで作りましょう、という使い分けが必要になる
2026/07/21(火) 15:02:14.97ID:2WiNYKUy
最後のここはおかしい

>>623
>>また、変数自体はスタック領域を指しているかヒープ領域を指しているか区別して扱う必要がある
2026/07/21(火) 15:03:33.41ID:yMrwq5y3
>>638
この書き方あの荒らしじゃん
めちゃくちゃなこと言って反論が来たら大喜びで荒らすだけの奴だからスルーでいい
2026/07/21(火) 15:04:07.09ID:2WiNYKUy
>>637
それはスタックに置くかヒープに置くかの使い分け
そちらは使い分けすること
2026/07/21(火) 15:04:36.57ID:SlBA2UO5
>>637
なるほどー
2026/07/21(火) 15:05:15.27ID:pv54lT0d
>>640
区別せずに使い分けるのか
面白いこと言うねw
2026/07/21(火) 15:05:27.99ID:2WiNYKUy
>>639
どこが荒らしだよ

>>623は間違っている
>>637は正しい
2026/07/21(火) 15:05:33.13ID:/9FNoXDk
荒らしはスルー、これ基本
2026/07/21(火) 15:06:57.63ID:2WiNYKUy
間違えたことを書いた>>637が俺を荒らし扱いかよ
646デフォルトの名無しさん
垢版 |
2026/07/21(火) 15:07:05.45ID:llmZLZOr
そもそもチェリーピックの連鎖だから読んでない😅
2026/07/21(火) 15:07:16.18ID:MmhJ1S97
>>637
話の本筋からはそれるけど、Cでは自動記憶域がスタックじゃない可能性ってあるけど、Rustだとどうなんだろう
どっちみちスタック領域って言葉だと混同するから自動記憶域でいいとは思うんだけど
2026/07/21(火) 15:07:57.43ID:2WiNYKUy
ごめん
>>645はミス
間違えたことを書いてるのは>>623
2026/07/21(火) 15:10:33.04ID:4b7drwod
どうやったらケチつけられるかだけ考えてる荒らしもいるってだけ
相手にしなければ消える
650デフォルトの名無しさん
垢版 |
2026/07/21(火) 15:11:20.02ID:XlCg0k5h
###まとめてみると
「意識する必要がない」というのは**
「メモリリークや解放漏れ、ポインターの不正参照の心配をコンパイラが肩代わりしてくれるため、安全かつ自動で処理される」**という意味において非常に正確です。

​ただし、パフォーマンスの観点からは、**「データのコピーコスト(スタック)」と「ヒープアロケーションのコスト(動的確保のオーバーヘッド)」**の違いを理解しておくことが、高速なコードを書く上で重要になる場面もあります。
2026/07/21(火) 15:12:44.46ID:2WiNYKUy
>>647
Rustではローカル変数(local variable)と呼ぶ
2026/07/21(火) 15:13:35.13ID:kXoc5vQo
>>651
ローカル変数のある領域の話をしているのでは?
■ このスレッドは過去ログ倉庫に格納されています

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