探検


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/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
ローカル変数のある領域の話をしているのでは?
2026/07/21(火) 15:14:32.40ID:bNNm5rfo
>>647はどう呼ぶか聞いてるんじゃなくて、スタックで実装されてるかどうかを聞いてるんだと思うが、>>651は何が言いたいんだ
2026/07/21(火) 15:16:03.38ID:2WiNYKUy
>>652
変数はローカルつまりスタックか
あるいはstaticのどちらかにしかないためそこを区別する必要はない
変数はヒープに置くことができないため
2026/07/21(火) 15:16:14.13ID:tubUJsTp
>>647
Cと同じく意味論として挙動が決まっているだけだから、実装がスタックを使う保証はない
実際にはほぼ確実にスタックが使われるところまで、Cと同じだよ
2026/07/21(火) 15:17:04.09ID:2WiNYKUy
>>653
スタックで実装されているかどうかは機種アーキテクチャに依る
2026/07/21(火) 15:17:45.78ID:tubUJsTp
>>654はちゃんとした話はする気ないからやっぱりスルーでいいんだよ
荒らしは放置安定
2026/07/21(火) 15:19:02.28ID:FH4yxgtk
何聞かれてるか回答見るまで理解できてなかったのか
2026/07/21(火) 15:19:18.93ID:2WiNYKUy
>>657
正しいことしか言ってないが何が気に入らない?
>>623が間違っていると指摘したことを逆恨みかね?
2026/07/21(火) 15:20:47.40ID:FH4yxgtk
もうこの荒らしについて言及するの禁止な
ID:2WiNYKUyにレスすんな
2026/07/21(火) 15:22:04.19ID:J9RlHKjx
>>637
Windowsが1MiB、Unix系が8MiBなんだっけ?
2026/07/21(火) 15:22:57.37ID:2WiNYKUy
>>660
意味のないことを一つも書いていないおまえが荒らしだろ
663デフォルトの名無しさん
垢版 |
2026/07/21(火) 15:23:24.83ID:jQxUHqaw
Windowsはそうだけど、Unix系と言っても広いからなあ
まあ、デスクトップとモバイルだけならmacOSとLinuxだけ考えればいいんだろうけど
macOSとLinuxだけなら8MiBであってたはず
2026/07/21(火) 15:25:12.62ID:t00ocqsc
Linuxでも組み込みだと違いそうだよな
2026/07/21(火) 15:27:20.73ID:40SuJKkv
> スタック領域を指しているかヒープ領域を指しているか区別して扱わなくても安全
そんなことはみんなわかってる

> 取り扱う参照がスタック領域を指しているかヒープ領域を指しているか区別することなく全く同様に扱える
それは全く別の話だぞおい

ってだけなんだよな
2026/07/21(火) 15:30:15.43ID:DT06qJlN
>>665
厳密に言えば区別せずにスタックに大きな構造体なり配列なりを置きまくってたらスタックオーバーフローすることはあるから、メモリ安全なだけで他の安全は保障されてないんだけどな
2026/07/21(火) 15:35:58.30ID:2WiNYKUy
>>661
基本はそうだけど
特にRustの場合はメインスレッドと新規スレッドで異なる点が重要
メインスレッドはOSレベルで指定でLinuxなら8MBがデフォルトだがulimit -sで自由に変更できる
新規スレッドはRustの中で指定でデフォルトは2MBだがスレッドのビルダーで自由に指定できる
だからRustではサイズの大きなものをスタック上に置ける
2026/07/21(火) 15:46:56.23ID:I5lpyWej
>>667
まあ大きくしすぎてもでメリットがあるからあんまやらないし、新規スレッドだけの話だからどこでも自由なわけでもないし、使い分けを意識してない奴ができることでもないんだけどな
2026/07/21(火) 15:47:46.31ID:XIv+O+su
そいつは放置しろって言ってるだろ
2026/07/21(火) 15:54:29.22ID:2WiNYKUy
>>668
スタック領域を大きくして使うことは
ヒープを使うことと比べて不利にならない
新規スレッドだけの話ではなくメインスレッドもスタックを大きくして使われている
ulimit -sで誰でも変更可能でその後に起動すればメインスレッドのスタックを大きく使えるため
2026/07/21(火) 16:03:56.55ID:8y3GD3Tf
>>670
スタック領域に大きなデータを置くと関数の壁を跨ぐ度にディープコピーになる
これは当然動作速度に悪影響を与える
ヒープ領域なら .clone() しない限りムーブになるので、シャローコピーして所有権を渡すだけなのでこの悪影響を回避できる
2026/07/21(火) 16:04:57.47ID:xd5iI70P
>>670
ulimitが必要な時点でデメリットあるやんけ
2026/07/21(火) 16:05:38.98ID:2WiNYKUy
>>671
Rust初心者でもそんな間違いしないぞ
2026/07/21(火) 16:06:00.04ID:AeCBf1sw
>>671
そっか、moveが標準だからヒープをわざわざコピーするわけないのか
2026/07/21(火) 16:06:45.90ID:AeCBf1sw
また何が間違いなのかも言わずに間違いだと主張する荒らし仕草が出たな
676デフォルトの名無しさん
垢版 |
2026/07/21(火) 16:09:01.68ID:HmEIVqbd
>>675
自閉症スペクトラム総合スレ86【ASD】発達障害
https://mevius.5ch.io/test/read.cgi/utu/1782020264/
2026/07/21(火) 16:10:12.70ID:O12s/9BG
可変借用は元のところに返すわけじゃないならデメリットが大きいからなあ
わざわざ大きなデータを置いて寿命を気にして可変借用を引き回すより、ヒープに置いてムーブした方が素直な実装になって楽なんだよな
2026/07/21(火) 16:10:44.00ID:TYtR9CLl
>>676
アンカー間違ってますよ
2026/07/21(火) 16:11:10.33ID:S3O97n0J
>>673
自閉症スペクトラム総合スレ86【ASD】発達障害
https://mevius.5ch.io/test/read.cgi/utu/1782020264/
680デフォルトの名無しさん
垢版 |
2026/07/21(火) 16:12:22.16ID:q4wR5dpo
自閉症はC#みたいなのを好む
馬鹿だから😂
2026/07/21(火) 16:13:11.43ID:fB1yulXn
大きなデータをスタックに置くと他所で書き換える用途が1つあるだけで可変借用が面倒なことになるよな
ムーブできないのはめんどくさい
682デフォルトの名無しさん
垢版 |
2026/07/21(火) 16:13:12.93ID:FfUaKNHi
😭
https://i.imgur.com/QdnVOt2.png
2026/07/21(火) 16:13:49.10ID:fB1yulXn
何も考えず上げるアホのせいで荒らしが増えたな
2026/07/21(火) 16:15:20.14ID:ahw91GYg
荒らしが仲間読んで増えちゃってるじゃん
だから話しかけんなって言ってんのに
2026/07/21(火) 16:15:27.18ID:2WiNYKUy
>>677
本気か?
関数を呼び出すたびにその関数へムーブしていってを深く繰り返し戻る時は返り値で何度もムーブして返すのかね?
爆笑すぎて笑ってしまった
686sage
垢版 |
2026/07/21(火) 16:18:58.43ID:Hil5y1j1
ageで荒らしが来るって5chをPCで操作してるのかな?いろいろ時代遅れ極まりない

【専ブラ】5ちゃんねるブラウザ「ChMate」part269
https://egg.5ch.io/test/read.cgi/android/1784035194/
2026/07/21(火) 16:19:37.34ID:hTZmyRpd
>>685
無意味に可変借用し続けてライフタイム注釈書きまくる奴の方がアホなんだよなあ
C++とRustは違う言語だと理解した方がいい
2026/07/21(火) 16:20:05.98ID:hTZmyRpd
ほら荒らしが来た
2026/07/21(火) 16:23:46.80ID:2WiNYKUy
>>687
ギャグではなく本気かよ
関数の引数でムーブで渡して返り値でムーブして戻すなんて爆笑行為だろ
2026/07/21(火) 16:24:18.10ID:jitdnUFF
>>689
moveの意味知らなそう
2026/07/21(火) 16:26:07.39ID:ahw91GYg
ムーブとコピーの区別がついてるかも怪しい
こいつ言ってることがいちいちRust知識皆無なんだよな
2026/07/21(火) 16:31:09.85ID:yw9QsJ6s
mut self なんか日常的に取るだろ
ムーブしない設計に固執するのはバカ
2026/07/21(火) 16:36:21.16ID:tqPKLH4t
>>677
> 可変借用は元のところに返すわけじゃないならデメリットが大きいからなあ
って言ってるのに
>>689
> 返り値でムーブして戻すなんて爆笑行為
とイチャモンをつけてる
2026/07/21(火) 16:36:36.50ID:hFTJcci7
荒らしは放置
2026/07/21(火) 16:40:15.47ID:DT9zLzL2
ビルダーパターンもイテレータアダプタもムーブなんだが、知らないのかな?
2026/07/21(火) 16:50:13.47ID:2WiNYKUy
>>695
それらは一階層のみ
しかもヒープを使わずにselfはスタック上で問題ないパターンなので今回の話とは全く関係がない
■ このスレッドは過去ログ倉庫に格納されています

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