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/
2025/05/09(金) 11:50:43.35ID:OnJLIdRJ
Rustがこのままオワコンになったら撤廃もあり得るだろ
2025/05/09(金) 11:56:12.65ID:Olh4o+f/
AWSもRust製か
Rust製のクラウドとJava製のクラウドが競争したらJava側が100%負けるだろうしな
2025/05/09(金) 12:53:15.09ID:84hPiMCY
クラウドってなに?
ハイパーバイザがrustで作り直されたの?
2025/05/09(金) 14:06:44.17ID:uNK6cNVH
>>286
これは誤訳
原文だと、それらのサービスにRustを使っていると書かれているだけ
RedditなんかでAWS社員のコメントとか探してみりゃわかるが、AWSは基本Java
2025/05/09(金) 15:01:02.33ID:tXd4RgSB
エネルギー効率に劣るJavaなんかで構築していたら笑うわ
>>286でもそう書いてるよな
2025/05/09(金) 15:25:02.70ID:61qYlkzR
Rustって人気なのね
AIにC#から移植できる?って聞いてみたらいやだって言われちゃったからRustが広まるの、なんか困る
2025/05/09(金) 15:30:45.33ID:EODoJGlX
JVM前提な特殊環境を除き
Rustの登場でJavaを使う意味は全くなくなった
2025/05/09(金) 15:41:48.51ID:xdbk/Yg/
何の前提も縛りも無い環境こそが特殊
2025/05/09(金) 15:59:06.67ID:U8gSLCWq
コンテナ化は Java の有力なメリットだったけど Docker の隆盛で様変わりしちゃったね。
297デフォルトの名無しさん
垢版 |
2025/05/09(金) 18:53:55.90ID:lGkzhvel
>>293
いやだと言うAI、なんかいいな
2025/05/09(金) 22:11:52.71ID:dSLYIzJ3
>>291
サービス提供には安全性が一番重要なのでC++ではなくJavaを採用していた
Javaより安全で性能の良いRustが出現したため切り替えた
そしてAWSが発起人となってRust Foundationを設立した
299デフォルトの名無しさん
垢版 |
2025/05/10(土) 00:48:13.31ID:tNjV2wjQ
Rustで戦う領域ではない気もするけど、エンタープライズ向けはまだ弱いと思う
ここはまだJavaや.NETの資産が大きい

「ファイルが見つかりません」みたいにユーザーの言語でエラーメッセージが出たり、文字列のソート (例えば「あアいイ」のように、ひらがなカタカナを考慮した自然な順になる) だったり、そういうのが外部ライブラリ無しで揃ってるのが Java や .NET なわけで

規模としては相対的に小さくなってるけど、こういうのが必要な領域は普通にあるし、Javaが消えることは無いと思う
2025/05/10(土) 01:05:07.51ID:yPNtL6wL
>>299
外部ライブラリ無しで揃ってるという発想が頭おかしい
そんな間違った奇妙な視点を持ってしまうとRustには正規表現も乱数も何もかも存在しないことになるぞ
考えを改めなさい
301デフォルトの名無しさん
垢版 |
2025/05/10(土) 01:42:38.39ID:JK+pyj3t
ここでグチャグチャ言ってる間に徐々に置き換わって行きそうだな
2025/05/10(土) 03:04:27.68ID:39sc/8ak
firefoxが全部Rustに置き換わるのに100年ぐらい掛かりそうだけどな
2025/05/10(土) 03:26:38.07ID:qt+KVMl5
止まってるFirefoxより
ChromeとIEが着々とRust化を進めてるから先だろな
304デフォルトの名無しさん
垢版 |
2025/05/10(土) 08:39:56.30ID:tNjV2wjQ
IE?
2025/05/10(土) 08:45:29.97ID:K3qP9/A2
>>300
何でこいつ偉そうなんだ?
2025/05/10(土) 08:47:09.62ID:APagMvUq
>>299
人月業界は考えるだけ無駄として、SaaSだと新規開発は圧倒的にフルスタックTypeScriptが多いね
Rustは海外では革新的なDB作るぜみたいなエンタープライズの基盤系スタートアップでの採用例は見かけるが、国内ではその手のスタートアップは皆無に近いから絶望的な状況
2025/05/10(土) 09:09:05.25ID:B2q0uvrQ
品質に関する考え方は良い要素を揃えれば良くなるという単純なものじゃないよ。
結局のところ、どんな問題が出てくるかは事前にわからない。
出てきた問題に対処し続けるという歴史によって品質が作られるんだ。
確かに C や C++ に比べて Rust は全面的に良いけれども、活発な巨大プロジェクトではもう問題に対処しつくしていて Rust に置き換えるメリットは相対的に小さい。
部分的に Rust に置き換えることはあっても問題が起こってない箇所まで含めて全面書き換えを目指すのは割に合わない。
2025/05/10(土) 09:11:51.42ID:R8e2Bn+8
>>306
サーバーサイドでTypeScriptを使っているようでは負けるわ
309デフォルトの名無しさん
垢版 |
2025/05/10(土) 09:22:18.39ID:tNjV2wjQ
>>308
「負ける」というのは何において?
Rustで実装すると、そのサービスは使いやすくなったり、機能豊富になったり、プロトタイプを高速に作ったり、ユーザーの要望をより速く実現できたりするの?

勝ち負けが決まるのって、サービスの内容、ユーザー体験、リリース速度などが重要で、それを実現できるなら言語自体はさほど重要でない
TypeScriptはエコシステムが充実してるから、それに乗っかるのは一つの選択
(バックエンドTSはつらい点もあるから、他の技術を持ってるところなら他のものの方が良いと個人的には思うけど、そういう選択肢が世の中にあって割と普通に受け入れられてるのは現実として理解してる)
2025/05/10(土) 09:29:02.26ID:TSWWK3ZE
>>307
未だにC/C++が原因のセキュリティ脆弱性報告が常に何件も出続けている現実を見なきゃ
2025/05/10(土) 09:43:16.06ID:203d4oBt
>>309
それらの点ではどの言語でもほとんど同じだね
遅くてメモリも喰うJS/TSをフロントエンド以外で使うのは適材適所ではないから不利だけど
312デフォルトの名無しさん
垢版 |
2025/05/10(土) 09:49:57.08ID:DZgbwKL1
仮に外部ライブラリを使ってもRustはエンプラには向かないでしょ
この分野はオラクルやMicrosoftのような企業が時間かけて作ったきたからできたもので、現状Rustはこの分野向けのライブラリが充実してるわけでもないし、Rustコミュニティが力を入れるとも思えない (したとしても優先度は低い)

それに、安定性や将来の入手性が最も必要な分野で、多くの部分をOSSに頼るというのは業界として受け入れないと思う
(昨今OSS絡みの事件は多い)

低レイヤやWebバックエンドなど、Rustが強みになる分野があるのはその通り
2025/05/10(土) 09:51:04.61ID:K3qP9/A2
>>310
それでも何十年もc++が捨てられずに使われているのはなぜかと考えたことはないのか?
2025/05/10(土) 09:52:37.21ID:12iOKYOz
ひらがなカタカナ交じりの自然なソートなんて
今更Rustで描いても半日もかからんやろ
2025/05/10(土) 09:57:05.62ID:203d4oBt
c++はrustに勝てる点が全くなく既存資産だけが頼みの綱で終わりでしょう
巨大な既存資産だけは消えるまでに時間がかかることでしょう
2025/05/10(土) 10:00:12.38ID:K3qP9/A2
超超超熟練度が必要なCOBOLになる

C、C++、COBOL まとめてC*
317デフォルトの名無しさん
垢版 |
2025/05/10(土) 10:05:17.70ID:tNjV2wjQ
>>314
漢字も当然含むし、ロシア語や中国語などを含む世界の多数の言語にも対応する必要もあるぞ?
時刻や日時の表記も国によって違う
Javaや.NETはランタイムが大きいと言われるけど、その中にはこういうのも含まれる
手間も大きいし、この分野を再実装するのも面倒でしょ
(自分が知らないだけで、既にそういう取り組みがあるのかもしれないけど)
2025/05/10(土) 10:08:42.67ID:K3qP9/A2
.NETでソートサーバを作ってそれにソートさせて結果をrustで使う
2025/05/10(土) 10:09:24.80ID:fdsy2R9k
日本だとエンプラよりは自動車の方が早いかもね
ボルボにはもう入ってるし10年以内にトヨタ車に入るくらいならあり得るかも
2025/05/10(土) 10:17:39.16ID:K3qP9/A2
システム周りでは標準で使われて、それ以外は他の言語の下請けになるのかと思ったが実際は違うと言うことか?

システム周りにもかかわらず外部に依存が必要であれば使われない
ライブラリが充実しないと完全な下請けにはなれず、c++のDLLのように一部高速化部位での限定利用になる
2025/05/10(土) 10:26:23.15ID:TkZSyEZj
証券取引みたいに、最高のパフォーマンスと最高の信頼性が求められるガチな領域もエンタープライズにあるのは事実で、
内部的にRustを使っているところがあってもおかしくはないが、そういうのって性質上外に情報が出てこないから盛り上がんないんだよね
自動運転もそうだけど、限界の性能を出そうとすると結局は頭の良い人間を上に据えたスペースシャトル型の厳格なウォーターフォールになるんで、夢がなくてつまらないという面も
2025/05/10(土) 10:38:30.67ID:B2q0uvrQ
COBOL なんか古代の遺物みたいに言われつつもかなり広くつかわれてるもんな……
2025/05/10(土) 10:44:10.80ID:M/F23qJj
最高のパフォーマンスを出すにはC/C++/Rustしかない
安全性を満たすRustは唯一の存在
これから少なくとも数十年間は天下を取るのだろう
324デフォルトの名無しさん
垢版 |
2025/05/10(土) 10:52:25.23ID:b8JFbEp9
>>303
EDGEか
2025/05/10(土) 10:55:11.42ID:B2q0uvrQ
AI が台頭してから電力使用量が劇的に伸びてるからな。
自動車の運転を人間のプロ水準で自動化するなら動力と同じくらいの電力が計算に必要という見積りもある。
AI がまだまだ伸びる分野なら効率は重要だ。
これはコストがどうのとかいうレベルではなくコストをかけても無いものは無い (足りない) という深刻な話で、プラットフォームを担う業者がいっせいに Rust に注目しているのも無理からぬことなのかもしれぬ。
2025/05/10(土) 11:33:01.79ID:SCGzG6Ua
そんな見積もり知らんけど50wでLv5運転できる人間が最高だな
327デフォルトの名無しさん
垢版 |
2025/05/10(土) 13:30:52.43ID:+8W9QSNf
やったことないけど組み込みの世界ではどうなの
Rust使われてる?
2025/05/10(土) 13:34:10.15ID:gWEfPBXM
トヨタはこの前、Rustで求人広告出してたじゃん
329デフォルトの名無しさん
垢版 |
2025/05/10(土) 13:36:27.29ID:zAVOQ4IK
組み込みはRustが多いですね
新規案件は殆どがRust
単品ではmrubyが多いですね
2025/05/10(土) 14:07:29.73ID:tG+fugNq
トヨタ系は基本的に愛知勤務だからな
Rustでもなんでも使って求人票を飾らないと厳しいんだろう
2025/05/10(土) 14:11:56.01ID:USkPlt1I
Rust使えるなら都落ちして田舎で開発するのも悪くないかも
今はたいていタイプスクリプトばっかだから変化が欲しい
332デフォルトの名無しさん
垢版 |
2025/05/10(土) 14:50:39.44ID:tNjV2wjQ
TSはフロント側とサーバー側を包括するフレームワークがあるのが強いんだよね
APIを定義してフロント側とバック側を区切る開発なら、バック側はコンパイルされるものが良いというのは同意なんだけど
TSを使うメリットがないと主張してる人は、こういう技術を知らないか、机上論を述べたいだけで実際の開発はしないから生産性など関係ないという人でしょ
2025/05/10(土) 15:01:33.78ID:M/F23qJj
>>332
その程度なら誰でも知ってるよ
SSR/SSGからhydrationしてCSRするコードも自作したことある
2025/05/10(土) 15:17:51.64ID:TkZSyEZj
今のWeb開発では、独立したバックエンドAPIはオプションだからね
Next.jsでサーバーサイドロジックが存在するのがデフォなので、よほどCPU intensiveな処理でない限りは、
Rustで別途独立したバックエンドを作ることはかえって遅延とコストを増大させる
フロントエンドまでRustエンジニアが自分で面倒見るってんなら好きにすりゃいいけど、
Rustエンジニアがフロントエンドやりたいかねえ
2025/05/10(土) 15:25:32.84ID:K3qP9/A2
フロントとバックエンドで常に齟齬が無ければいいんだけどと言う話になるとTSが出てくる
2025/05/10(土) 15:32:42.03ID:M/F23qJj
>>334
それはJS/TSだけでやろうとするからそういう制限になってしまう
RustとWasmも組み合わせてどこまでやるかで色んなパターンがある
2025/05/10(土) 15:45:18.30ID:Mv0kFcWv
>>332
RPC は昔からある取り組みじゃないか。
半世紀もかけて TS でしか実用にならない状況だと本気で思ってるのか?
338デフォルトの名無しさん
垢版 |
2025/05/10(土) 15:49:00.61ID:tNjV2wjQ
Wasmはサイズがね…
ごく最近のニュースだと、Prismaが実装をRustからTypeScriptに置き換えたのが話題になってたな
デプロイ時のサイズが問題になる分野だから妥当ではあるけど

フロントだとビルド時間の長さが課題になりそう
UIの位置やサイズを微調整したい場合でも、確認のために毎回重ためのビルドが必要になると面倒じゃない?
2025/05/10(土) 15:54:13.08ID:Mv0kFcWv
>>338
UI 記述言語で書いて形になってから Wasm (にコンパイル可能なプログラミング言語) に変換するような仕組みもある。
340デフォルトの名無しさん
垢版 |
2025/05/10(土) 15:57:42.52ID:JFaFsVis
>>337
RPCじゃなくてUIの描画込みの話だぞ
同じフレームワーク内でクライアントサイドのレンダリングとサーバーサイドのレンダリングを繋げたりできる
>>333 が書いてるようなもの
2025/05/10(土) 16:03:27.89ID:M/F23qJj
>>339
色んなパターンのうちそのUI記述言語を採用してのSSG/CSRのレンダリングコード共通化が有力の一つだよね
サーバーサイドからJavaScriptを完全排除してパフォーマンスを上げる方向性が正しいので
2025/05/10(土) 17:37:33.64ID:K3qP9/A2
web開発の現場に言ってRustとwasmの組合せを使いなさいと言っても鼻で笑われるだけ
2025/05/10(土) 17:57:46.62ID:GFzLbQz1
精神障害児で周りを振り回す無能です。
この業界で俺は死ぬかも。
悲しみ
2025/05/10(土) 17:58:59.59ID:GFzLbQz1
自慢したりとか怒ると自分の首を絞める。
死ぬ。
俺はプログラミング向いてないが、この業界に行くぞ。
どうも死んだほうが良い人間です。
2025/05/10(土) 18:01:36.75ID:GFzLbQz1
rustも分からんし三年間学んでプログラム書けない無能です。
質問ある?
2025/05/10(土) 18:01:51.09ID:GFzLbQz1
もちろんrustも分からん。
2025/05/10(土) 18:03:05.22ID:K3qP9/A2
rust is must
2025/05/10(土) 18:03:13.86ID:GFzLbQz1
そもそもこの世の中教えてくれない人が悪いと奥底で思っている無能。
人との縁を切って一人で後悔しがち。
ゴミ人間だよ!
2025/05/10(土) 18:04:21.67ID:GFzLbQz1
俺はガイジだ…
ガイガイガイジのガガイのガイ。
ガイジのボッチのやる気のある無能。
ゴミカス死んだほうが良い。
2025/05/10(土) 18:05:59.49ID:GFzLbQz1
がががーがががががががががががが~が~が~障害児
2025/05/10(土) 18:06:29.45ID:GFzLbQz1
我はガイジガガガイジ天地入れざる障害児
2025/05/10(土) 18:11:29.44ID:K3qP9/A2
不勉強で天地入れざると言う言葉を知らなかったが
明治とかの言葉なのかな?

学があるね
2025/05/10(土) 18:22:28.75ID:GFzLbQz1
>>352
ありがとう!
言葉を表面上の意味しか捉えられないガイジだけど、他人に迷惑かけるのは良くないよね…
スレ荒らしてすみませんでした…
2025/05/10(土) 18:23:33.01ID:K3qP9/A2
どうせ俺以外誰も見ていないから好きなだけ荒らせばいいと思うよ
2025/05/10(土) 18:23:55.63ID:GFzLbQz1
おちつきました。すみませんでした…
2025/05/10(土) 18:29:52.94ID:Mv0kFcWv
>>352
抜刀隊の歌詞にあるから知ってた。
ミリタリー趣味の人ならまあまあ知ってるんじゃないかな。
私は音楽側の趣味で知ったんだけど。
2025/05/10(土) 18:58:55.45ID:Pq21kD+5
夏休みはまだ早いぞ
2025/05/10(土) 19:15:47.47ID:K3qP9/A2
業界には何らかの形でメンタルを病んでる人間が50万人以上いると思う
2025/05/10(土) 19:53:17.55ID:39sc/8ak
このスレは特殊だから騙されないように
2025/05/10(土) 20:19:31.95ID:K3qP9/A2
自分は悪質でなければ荒らしを許容するスレにいた

そこでは荒らしとも楽しく話してそのうち荒らしが真面目なコテになったりしていた
みんなもうどこかに行ってしまったのが残念だけどそれも運命だなと
361デフォルトの名無しさん
垢版 |
2025/05/10(土) 20:45:49.44ID:+8W9QSNf
病院行けよ
俺は今日行ったぞ
2025/05/10(土) 21:12:29.85ID:RAkiMuTX
unsafeなライブラリのラッパーでsafeに設計するのってどうやるの
363デフォルトの名無しさん
垢版 |
2025/05/10(土) 21:22:13.51ID:JK+pyj3t
F-22 ada
F-35 C++
2025/05/10(土) 21:48:52.45ID:Mv0kFcWv
>>362
結局のところ、外側から見て safe な振る舞いになるようにするというだけ。
場合によっては不可能なこともあるけど具体的な状況がわからないとなんとも言えない。
2025/05/10(土) 21:52:02.98ID:arKsDnK7
>>362
未定義動作の可能性を排除するために必要な条件を全部チェックする
panicとデッドロックはOKらしい(停止すれば許される)

No matter what, Safe Rust can't cause Undefined Behavior.
https://doc.rust-lang.org/nomicon/safe-unsafe-meaning.html
2025/05/10(土) 22:22:13.21ID:M/F23qJj
>>342
そういう低レベルな現場は無視してもいいんだよ
現在もJSのフレームワークは乱立しながら変化進化し続けているように多様性がある
今回の件と関係なくwasmを既に併用しているところも多いからその点もだいじょうぶ
2025/05/10(土) 22:48:31.18ID:K3qP9/A2
誰がその多様性とかについていくのか?
お前が低レベルな現場と呼ぶ環境だろう?
368デフォルトの名無しさん
垢版 |
2025/05/10(土) 23:29:16.41ID:tNjV2wjQ
フロントにRustを使ってる「高レベル」なプロダクトって何があるの?
バックエンドなら分かるけど
その基準なら世の中のビジネス的に成功してるサービスの殆どが低レベルでしょ
2025/05/11(日) 00:02:17.99ID:1LIDIycD
>>364-365
関数の内側にunsafe書くだけ?
それだと見た目はsafeだけど内部はunsafeだから実質的にunsafeではないか?
2025/05/11(日) 00:43:43.27ID:qcGHvz/x
子供が使うバリアの高度版
2025/05/11(日) 00:48:37.35ID:kSJwinQr
内部で使う関数がunsafeである理由を理解して未定義動作の可能性を排除できてないなら
外側の関数にもunsafeをつける約束
372デフォルトの名無しさん
垢版 |
2025/05/11(日) 00:49:47.08ID:/xxB2yrb
unsafeは「危険」というよりも「コンパイラが安全性をチェックできない」ブロックだと思う
内部的に unsafe を使ってても、ラップした型や関数を外から使う分には安全とみなせるなら問題ない

理想的には
・内部的にunsafeを使っているけど、外から見れば安全 -> unsafe を外して良い
・内部的に unsafe を使っており、かつその関数は利用者が適切にコードを書かないと危険 -> その関数も unsafe とマークするべき

標準ライブラリやきちんとしたライブラリは基本的にこの法則に従ってる
問題はユーザーのコードで、書こうと思えば「問題はあるけど unsafe とマークされてない関数」は作れてしまう
そこは自己責任の問題

けど、セグフォみたいなバグが実際に起きた場合に、直接の原因となるコードは unsafe ブロックの中に絞れる (ことが多い) から、それでもかなりマシだと思う
C++だとコード全体が unsafe ブロックの中にあるようなものなので…
2025/05/11(日) 00:50:52.82ID:10YJ6Wg3
>>365
Undefinedの有無もなにも標準化されてないからなぁ
2025/05/11(日) 00:52:29.93ID:qcGHvz/x
バリア!バリアしたから大丈夫!
2025/05/11(日) 01:02:20.84ID:kSJwinQr
未完成らしいけど目安
https://doc.rust-lang.org/reference/behavior-considered-undefined.html
2025/05/11(日) 01:18:27.03ID:OAc7wOSx
unsafe = Rustコンパイラが安全性を保証してくれない = プログラマが自分の責任で安全性を保証しなければならない = C/C++と同じ状態

逆に言えば、safeつまりunsafeではない、とは、Rustコンパイラが安全性を保証できる状況にしないといけない
未定義動作がないことが根幹にある
だから未定義動作とは何か、どういう時に起きるのか、どうすれば無くせるのか、が最重要
それを完全に理解するまでは、関数内部でunsafeを使って外をsafeな関数、にする判断をしてはいけない
2025/05/11(日) 01:20:41.47ID:Vd6Ddgx+
unsafe functionは使いどころが微妙だね
unsafe指定の理由が不明だし基準も開発者次第でまちまち
C#みたいにunsafeにはコンテキストとしての役割しか持たせない方が一貫性がある
呼び出し元に注意させたいんならunsafe_hogeみたいなネーミングルールで十分だった
2025/05/11(日) 01:31:46.55ID:kSJwinQr
バリアより感染症対策で流行ったゾーニングのイメージだな
感染リスクのあるunsafeゾーンと安全なsafeゾーンがあって
unsafeからsafeに持ち込むときは消毒(検査)が必須みたいな感じ

運用が雑になって事故るのも同じ
379デフォルトの名無しさん
垢版 |
2025/05/11(日) 01:36:40.21ID:/xxB2yrb
>>376
> それを完全に理解するまでは、関数内部でunsafeを使って外をsafeな関数、にする判断をしてはいけない
それをやると、一つの関数を unsafe にした時点でそれが呼び出し元に波及して、プログラム全体に unsafe が広がらない?
深刻なバグがコード内のどこで起こってるかを特定したい場面だと、 unsafeは本当に unsafe な操作をしてる箇所に限定されてた方が探しやすいと思う
2025/05/11(日) 01:47:17.60ID:OAc7wOSx
>>377
呼び出し元に注意を持たせるものではない
unsafeブロック(関数)内はRustコンパイラが安全性を保証しない
それ以外の部分はRustコンパイラが安全性を保証してくれる
C/C++はプログラム全体がunsafeブロック内にある状況と同じと説明できる

>>379
そうだよ
理解するまではunsafeを使ったらunsafeな関数しか作れない
safeな関数にしてよいかどうかの判断が一番大事なところ
勝手に判断してsafeにしたらプログラム全体に問題が波及しかねない
まずは理解してからunsafeに手を出しましょうということ
2025/05/11(日) 02:07:37.23ID:OAc7wOSx
「unsafe利用箇所をunsafeブロックで囲えば終わり」は、よくある勘違い
まず一次的には「それを含む関数もunsafe fnにしなければならない」が正解
その上で「内部でunsafeを使ったことで生じる問題が、その関数単独でまたはモジュール全体で閉じ込めることができているかを判断できてから、ようやくunsafe fnをfnにできる」が正解
2025/05/11(日) 06:19:57.03ID:Skl5F9WB
unsafeな理由をブロック外部で処理すりゃsafeに出来るじゃん
たとえばなraw pointer参照が危険だとして渡す前にスタックまたはヒープ内の正しいアドレスであることを確認して引数を渡すとかの、外部でのチェック(unsafeに至る条件の排除)すれば無毒化できるわけで

そんなんC言語だって変わらんやん。Cで汎用的な関数書いたらほぼほぼポインターだらけになるし、ポインターのチェックせずに使うなんてことは危険すぎてありえんのと一緒やん

C言語にrustコンパイラーのunsafeの枠組みだけ組み込んでsafeじゃなきゃエラーにしますにしたら、コードの5割ぐらいはunsafeになってそうやけどな。標準ライブラリーからしていくらでも危険なアクセスできるし
2025/05/11(日) 07:03:44.41ID:Ix0M85KV
>>382
Rustでプログラミングしたことない人には理解できないのは仕方ないが的外れ
そのCで手動でチェックをして使うようなことは
Rustではunsafeを使わずとも普通に書くことができて自動的にチェックしてくれて安全かつ楽

むしろRustでunsafeを使う頻出パターンの一つは真逆
その自動チェックを無くすためにunsafeが使われる
例えばあるアルゴリズムで既に自動チェックされて既に安全なものがアルゴリズムの都合で二重に自動チェックされてしまいコンパイルでの最適化でも消えないとする
その2回目の自動チェックを無くすためにunsafeを使う
もしそのアルゴリズムが1つの関数で完了するならばその関数外に影響はないため
関数内部でunsafeを使っていても関数自体は外向けにsafeにすることができる
そのアルゴリズムで2回目の自動チェック省略が常に正しく安全なことはプログラマが安全性を保証することになる
これがunsafeを用いて極限まで速くしつつ安全な関数を生み出すRustの典型的なパターン
2025/05/11(日) 08:49:42.45ID:tAEYEseM
https://doc.rust-lang.org/book/ch20-01-unsafe-rust.html
これが全て
unsafe function に関しては、長文複おじが主張するほどunsafeを含む関数に対して積極的に指定すべきものではなく、
むしろ極力safeとしてラップすることを推奨するトーンで書かれているように感じる
「unsafe functionは呼び出し元に注意させるためのマーク」という解釈は適切であり、常識的に考えて中でunsafe使ってようと呼び方によって未定義動作が生じるような関数はそもそも作るべきではない
2025/05/11(日) 09:06:54.66ID:qcGHvz/x
unsafe指定の理由が不明って斬新な視点だと思うけどね
他の言語でunsafe使ってるから意味は理解出来る
2025/05/11(日) 09:11:42.89ID:1l4O+k/P
>>384
逆だぞ
未定義動作が発生しうるパーツがunsafe関数
そのパーツを上手く使ったり組み合わせたりして未定義動作を発生させなくしたものがsafe関数
2025/05/11(日) 09:15:33.06ID:qcGHvz/x
変わった人が集まって3行で済んでいた話を広げていく
2025/05/11(日) 10:06:07.52ID:WmmDZjaJ
>>368
無いから自演してまでしてRustを盛り上げようしてる
■ このスレッドは過去ログ倉庫に格納されています