Rust part23

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2024/02/23(金) 17:37:52.13ID:CheDQupm
公式
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 part22
https://mevius.5ch.net/test/read.cgi/tech/1705760500/

ワッチョイスレ
プログラミング言語 Rust 4【ワッチョイ】
https://mevius.2ch.net/test/read.cgi/tech/1514107621/
2024/03/12(火) 01:05:51.45ID:YqCvYydB
常に論点ずらし
何の生産性もない
2024/03/12(火) 01:42:25.91ID:O5aTP+Ks
いつもRustを叩いてRustスレを荒らしてるアンチの言動はいつもワンパターン
今回のHashMapの件で例えると
もしデフォルトのハッシュ関数が安全でなく速いものだと「Rustはデフォルトが安全でない!」と叩く
もしデフォルトのハッシュ関数が安全で遅いものだと「Rustはデフォルトが遅い!」と叩く
どちらになっていても叩くことが目的のキチガイ
2024/03/12(火) 09:25:30.86ID:2ftxmqwc
「俺が高速なプログラムを作れるのは言語のおかげ」は合ってるが
「俺が低速なプログラムしか作れないのは言語のせい」は間違ってる
276デフォルトの名無しさん
垢版 |
2024/03/12(火) 15:42:43.44ID:qP6Ph9LT
『「俺が低速なプログラムしか作れないのは言語のせい」は間違っている』という立場、ユーザーが充分賢いことを仮定しているのでそれならPythonとC++で良い
277デフォルトの名無しさん
垢版 |
2024/03/12(火) 16:02:50.20ID:O51IPiXd
ほんとどうでもいいな
自転車置き場というより豚小屋の議論
2024/03/12(火) 16:28:46.76ID:6k71yQCv
プログラムしかしない人はこういうことしか考えることがないんよ
2024/03/12(火) 17:33:47.15ID:+dm3OZRm
知識があれば高速化が可能な場合があるのは、言語や項目に関わらず一般的な話。
安全方針のRustとしては、ハッシュ衝突強度を知らなくてもデフォルトで安全がベター。
280デフォルトの名無しさん
垢版 |
2024/03/12(火) 18:00:43.49ID:ZUpYWJV7
デフォルトいらんが
ハッシュも自分で選べんガイジがハッシュマップ使うな
281デフォルトの名無しさん
垢版 |
2024/03/12(火) 18:49:06.95ID:hIsWcrJS
>>279
わかってなさそうなので再度書くけど
ハッシュ衝突強度が高いからと言ってハッシュDoS耐性が高いとも限らないしHashMapに適してるとも限らないからね
2024/03/12(火) 18:51:51.27ID:wv71s4mp
弱いハッシュでも困るようなプログラム書く人は、自分で判断できるんじゃないの?デフォルトはパフォーマンス優先で良いと思うけどな。
2024/03/12(火) 19:50:55.41ID:WtXn1sYk
攻撃で困るかどうか攻撃されるまで初心者は判断できないと思う。
そして攻撃されてから対処するのでは遅いかもしれない。
パフォーマンスチューニングは遅いことが問題になってからやるので深刻ではなかろう。
284デフォルトの名無しさん
垢版 |
2024/03/12(火) 19:59:05.75ID:1eKk9IjK
>>283
同意
2024/03/12(火) 20:00:13.63ID:uVbV4a/I
RustのDefaultHasherは安全かつパフォーマンスのいいSipHashを使っているので普通は気にする必要ない
もちろんPythonやJavaScript(v8)やSwiftなど多くの言語がこのSipHashを使っている
そのうえでRustは必要とするHashMap毎にFxHashなどさらに高速なものを簡単に指定できる
2024/03/12(火) 20:49:08.64ID:NxLZ8TT6
Pythonはハッシュ値計算したらオブジェクトに保存してるでしょ
2024/03/12(火) 20:49:29.65ID:+yrdVDIt
他の言語たちがRustを参考に同じように後追いしているのね

>Pythonの文字列やバイト列に対するハッシュアルゴリズムは、HashDoS対策としてPython 3.4から SipHash24が使われていました。
>その後、ラウンド数を減らしたSipHash13でも十分に安全だとして2015年にRustが、2016年にRubyが、SipHash24からSipHash13への切り替えを行いました。
>Rust や Ruby からは数年遅れましたが、Pythonもデフォルトの文字列ハッシュアルゴリズムがSipHash13に切り替わりました。
2024/03/12(火) 20:56:37.07ID:Bo/PtDeL
>>286
常にそれをされたら困るが
Rustでもハッシュ値をオブジェクトに持つstring_cacheなどが用途に応じて使われている
2024/03/12(火) 22:08:56.94ID:qGjx1B49
>>274
人にキチガイと言う前に自分の脳を使って考えたら?

どちらになっても叩くことはないだろ
他の言語はデフォルトで速いハッシュを使ってるよ
2024/03/12(火) 22:13:42.86ID:qGjx1B49
Python Ruby スクリプト系言語
2024/03/12(火) 22:30:53.75ID:QLhbtBPI
他の言語もRustと同じハッシュ関数を用いていることが判明したのにRust叩きを続ける一匹
292デフォルトの名無しさん
垢版 |
2024/03/13(水) 01:06:52.67ID:l12NsVZP
他の言語の例としてPythonやRubyのような遅いこと前提でとにかく初心者が書いても動けば良いという思想の言語を持ち出してくるのはおかしいでしょう
2024/03/13(水) 01:36:16.81ID:yq4Sx3eg
Swiftも同じSipHash13だよ
2024/03/13(水) 06:48:44.81ID:vtWyM3VT
>>292
じゃあRustの思想は?
2024/03/13(水) 07:26:54.50ID:W15vpPlq
>>283
判断できない人まで言語側で救う必要性が分からない。

それなら、unsafeもカジュアルに使えないように仕掛けを用意した方が良いんじゃないかと。
2024/03/13(水) 08:05:27.17ID:7ftIQ2tM
必要なことしかやりませんって言語は他にあるからそちら使えばいいのでは?
2024/03/13(水) 11:53:59.71ID:k71lJTPU
安全と速度は両立するかそれともトレードオフか
トレードしかしない人にとって、コストは支払うと決めたら絶対にキャンセルできない印象があるよね
有償かと思ったけどよく考えたらやっぱゼロコストだったという現象は許せない
298デフォルトの名無しさん
垢版 |
2024/03/13(水) 13:08:21.45ID:zcdQDtji
Rustなんかに手を出すのはC++まともに書けない馬鹿なんだから、「充分賢ければ速く書ける」は実質「速く書けない」なんだよな
賢いならRustなんかやらない
2024/03/13(水) 13:52:10.04ID:k71lJTPU
自由があればデフォルト設定を強制されないのは自明な事実
ただし、賢い人間が自由を所有しているのか、道具自体が自由度を持っているのか
そもそも「所有している」というのはただの感想なのか客観的事実なのか
300デフォルトの名無しさん
垢版 |
2024/03/13(水) 15:08:41.44ID:EtYMYlMl
アホ vs バカの不毛な争いが続くのは隔離スレにワッチョイつけたやつの責任だからな
2024/03/13(水) 17:12:52.60ID:2jYqKDsd
本スレにワッチョイつけず隔離スレと称して余計なスレ立ててそっちにワッチョイつけるバカども。
5chでRust使ってるって言ってるやつらはそんなもの
2024/03/13(水) 17:32:48.34ID:k71lJTPU
不毛の判断が早いなあ
後世の歴史家が判断するという定型文に縛られないから早いんだな
2024/03/13(水) 17:40:34.76ID:EfEhvhMh
安全と速度を両立させたのが
RustやPythonなどが採用しているSipHash13
2024/03/13(水) 18:38:09.42ID:9N462qty
>>295
いや、unsafeは判断できる人が使うものだろ。
305デフォルトの名無しさん
垢版 |
2024/03/13(水) 21:22:31.53ID:cNV/vVTe
>>300
分かってるんならワッチョイ付きRustスレの盛り上げに協力してくれんかえ
306デフォルトの名無しさん
垢版 |
2024/03/13(水) 21:54:19.69ID:Ay/UTMuM
ワッチョイなんか盛り上がる訳ねえ
そんな話題あったらこのスレに投下してつまらない議論を流した方が余程生産的
2024/03/13(水) 22:31:42.96ID:/twoPXVD
高齢化でコーディングできなくなったおじいさんを叩くのは良くないと言う話
2024/03/13(水) 22:39:35.15ID:vtWyM3VT
30後半でコーディングしてるやつなんて9割コミュ障で出世できなかったやつだろ
2024/03/13(水) 22:42:16.17ID:6IE1D2aF
出世出来ましたか?
2024/03/13(水) 22:52:25.45ID:/twoPXVD
能力が低下してコーディングできないのとしないのでは大違い
2024/03/14(木) 00:41:25.89ID:2hurvpo9
結局スクリプト言語で書かれた原作が必要か
他のジャンルでも原作なしのオリジナルは難しそうだろう
2024/03/14(木) 12:30:54.13ID:HuCxvvOv
Rustで書き直してパフォーマンスが上がったので注目浴びる!みたいなプロダクトはなんか白けるよな。
JSとかPythonの基盤ツールをRustで書き換えて激速!みたいなのはもう汎用言語としてのアイデンティティ捨てられててオワットル。
313デフォルトの名無しさん
垢版 |
2024/03/14(木) 12:34:38.63ID:GaNa4vYx
日本みたいに、何とかするには人投入しよう!スキルどうでもいいからとにかく人集めて!なところじゃね~。
2024/03/14(木) 13:45:31.80ID:zTrHTca+
おそらく植山類が新しいリンカを作ったあたりが開発ツール高速化の機運の始まりだと思う。
歴史的事情でごちゃごちゃしてて遅いのが仕方がないと思われていたものについて
速度を意識して書いてみたら数百倍単位で速くなってわひゃーーというのが強烈なインパクトだった。
(それは C++ で書かれてるんだけどね。)
商売で開発ツールを提供している会社にとっては少なくともそれと同程度のものを出さないと面子が立たない。
リンカを作ってるところはこぞって高速化に努めた。
リンカ以外にもその機運が波及しているのが今。

で、高速化のキモはデータ構造であるというのが明瞭になったんだけど
メモリ管理の部分を処理系 (ランタイムサポート) の側でやるようなものだとそこんところのチューニングが出来ない。
Rust である必然性が強いわけではないけど C++ とかよりは今なら Rust のほうがいいかなってのはまあ自然な判断ではある。
2024/03/15(金) 00:47:31.57ID:eu7fnAy5
コードを書けない
プログラムできなくなるとこういうことしか書けなくなると言う見本
2024/03/15(金) 10:43:30.71ID:5CgUbd5q
だが読むより書くほうが優れているという前提から
原作を正しく読解するよりも正しくない二次創作のほうが優れているという結論が出てくる
317デフォルトの名無しさん
垢版 |
2024/03/15(金) 11:53:24.75ID:94MXVgRN
春だなぁw
2024/03/15(金) 18:26:51.96ID:5N0PtL1J
ai bot
2024/03/15(金) 20:40:42.93ID:W8LQpOAr
>>315
辛辣で草
そういう似非技術者系おじいちゃんおちょくると
怒って自分が唯一知ってる知識振り回してくるから面白いぞ
2024/03/15(金) 21:07:06.30ID:8+Y0uCh5
Rustコードを書けない似非技術者系おじいちゃんたちは他のスレでやりとりしなさい
ここはRust専用スレ
2024/03/15(金) 21:26:31.60ID:PnOJWcC7
コーディングが出来なくなると人生はつらいと思うけどな…
2024/03/15(金) 21:36:49.30ID:3GkeGGWK
できなくなるんじゃなくて
元々できてないんよね>>314みたいな人は
というより単に職業マじゃないのかもな
趣味でプログラム触ったことあるパソコン少年的な
2024/03/16(土) 00:23:32.44ID:/iia2JvS
人はいつか何もできなくなって死んでいくんだよな
つまらないね
2024/03/16(土) 08:54:22.01ID:aeWu0EgX
肉屋がレッドオーシャンになれば豚はブルーだからこれでいい
325デフォルトの名無しさん
垢版 |
2024/03/17(日) 19:33:58.02ID:1VtyMVPz
Rust書けるやつ集めるの大変すぎ
2024/03/17(日) 22:06:35.75ID:BMZldfUE
Rustで書けば速くてリソースコスト下げられるうえに保守性も良くていいことずくめだからだな
ただしまともなプログラマーしか使い  こなせない
2024/03/18(月) 09:59:50.17ID:ySp1yGcK
むしろ変なやつしか使ってない感じだけど…
328デフォルトの名無しさん
垢版 |
2024/03/18(月) 10:20:48.83ID:JObkxwF0
しょーもないこだわり持ってるやつしか使ってない
2024/03/18(月) 13:49:12.09ID:lCCxn1Q7
今後の仕事考えたらRustだね
2024/03/18(月) 14:26:36.03ID:1+ObkRXf
メモリ安全性ってなんなの?
2024/03/18(月) 14:49:59.91ID:RRSB5dTk
無効なアドレスを参照しない
運が良ければSegmentation Fault、運が悪ければ変な値が使われて何か起こる

無効なアドレスを更新しない
運が良ければSegmentation Fault、運が悪ければそこの値が壊れて何か起こる

メモリリークは割とどうでもいい
2024/03/18(月) 15:00:45.39ID:ZJ4hMg34
>>330
メモリ安全性のうち特に重要な一つがメモリ競合の安全性
まだ使っている値を意図せずに書き換えてしまい矛盾してしまう
プログラミングで起こるバグの代表的な一つ
Rustではこれを防ぐことができる
2024/03/18(月) 15:02:35.53ID:1+ObkRXf
>>331
ありがとう
「運が悪ければ変な値が使われて何か起こる」
そういえばメモリの概念理解せずにC言語使って、動かすたびに結果がかわるバグプログラム生み出してビビリ倒したことを思い出しました……
2024/03/18(月) 15:07:28.37ID:1+ObkRXf
>>332
ありがとう
「運が悪ければ変な値が使われて何か起こる」
そういえばC言語の現在時刻取得関数がポインタ返し&参照先書き換えるタイプの関数だったので大ハマリしたことありますね…
335デフォルトの名無しさん
垢版 |
2024/03/18(月) 18:35:36.34ID:utey1W8X
セルフコントならもう少し面白いやつを頼む
2024/03/20(水) 01:19:02.24ID:6E76csi8
WebAssemblyバイナリの実行環境を提供する「Rust」で作成されたランタイム「Wasmi」に脆弱性が明らかになった。
ttps://www.security-next.com/154875
2024/03/20(水) 05:37:59.51ID:wTR4SIFK
デフォルトで制限よりも多くのパラメーターを指定すると域外に書き込みを行うおそれがある「CVE-2024-28123」が明らかとなった。

2023年12月にリリースされた「同0.31.1」にて脆弱性は修正された。
パラメーターが128個以下であることを確認する回避策についてもアナウンスしている。
338デフォルトの名無しさん
垢版 |
2024/03/20(水) 12:50:32.15ID:/slJg93x
>>336
そういうのRust関係ないからわざわざここに書かなくてもいいよ
2024/03/20(水) 13:00:27.22ID:3fTCja3E
関係無いわけないでしょw
rustで書かれてたら安全なんじゃなかったん?w
2024/03/20(水) 13:48:07.28ID:i9d3tzeg
ガベージコレクションのあるスクリプト言語であるPythonですら脆弱性でCVE出まくってるよ
2024/03/20(水) 14:22:40.25ID:HLjoI2yW
これは「メモリ安全」の外の話?中の話?
2024/03/20(水) 16:11:18.74ID:sC/F3tDJ
unsafe使用箇所だからメモリ安全の外だろうな
インタプリタのスタックフレーム参照で毎回境界チェックする実装も微妙だししゃーない
2024/03/20(水) 16:33:56.60ID:pz7pPV/0
jsonの方も?
2024/03/20(水) 17:50:49.65ID:w9jt/Hdz
コード見てみたが言語関係なくダメな書き方の見本ってだけだな
ttps://github.com/wasmi-labs/wasmi/commit/f7b3200e9f3dc9e2cbca966cb255c228453c792f
ttps://github.com/wasmi-labs/wasmi/blob/v0.31.0/crates/wasmi/src/engine/stack/values/mod.rs#L158-L163

修正コードは毎回境界チェックしてるのと同じ
extendする前に必ずreserve呼ばなければいけないとか反省の色が見られない
345デフォルトの名無しさん
垢版 |
2024/03/20(水) 18:13:46.74ID:ASk8Mk2n
extendという名前も実体と違ってバクの素
2024/03/20(水) 18:19:15.64ID:sC/F3tDJ
修正コードはhotfixでしょ
masterブランチの方は結構手が入ってると思う
2024/03/20(水) 18:27:22.61ID:ihbrcjwp
その知識やスキルを活かして出世して欲しい
2024/03/20(水) 20:04:41.25ID:TrbgWl+Z
ダメな書き方でもコンパイルが通れば安全なはずなのではw
2024/03/20(水) 20:32:22.01ID:sC/F3tDJ
んなこたない
ダメなunsafeの使い方すれば安全じゃなくてもコンパイルは通せる
2024/03/21(木) 01:05:26.83ID:CBfowBe/
直接の原因はunsafeなメソッドをsafeメソッドにしたこと
unsafeのsafe wrapperの質は大事
今のコードもunsafeの使い方が怪しくて信頼できない

fn get_release_unchecked_mut(&mut self, index: usize) -> &mut UntypedValue {
debug_assert!(index < self.capacity());
// Safety: This is safe since all wasmi bytecode has been validated
// during translation and therefore cannot result in out of
// bounds accesses.
unsafe { self.entries.get_unchecked_mut(index) }
}
2024/03/21(木) 01:39:19.40ID:t5wrhqh7
>>350
俺んとこもそのコードはよく書くけれど
今回の敗因は引数のindexが生のusizeであること
そこをusize直接ではなくそのラッピングの専用型にする
そしてその専用型が動く範囲が必ず範囲内であることを保証する形で
get_uncheckefのunsafeを使う関数をsafeに仕上げる
2024/03/21(木) 19:05:54.93ID:QWnK+qvS
unsafeを適切に使えないプログラマが書くと全然安全じゃないという事?
2024/03/21(木) 19:57:12.18ID:7RDAu5V5
全然そういう事

Rustで無闇にunsafeを使うのは日本語で無闇に「全然」を使うくらいやばい
354デフォルトの名無しさん
垢版 |
2024/03/21(木) 20:09:58.67ID:gM/gTjZ5
>>353
それ言うなら

無闇に「ヤバい」を使うぐらいヤバい

じゃね
2024/03/21(木) 20:26:53.11ID:1l7zk65j
俺はむやみに「全然」とか「ヤバい」を使ってるけどトラブルになったことはないな
ガンガンunsafe使ってこーぜ!!
2024/03/21(木) 20:28:39.30ID:7RDAu5V5
>>354
それだと単なる自己言及だから352に対する答えとして不十分では
2024/03/21(木) 20:45:04.06ID:t5wrhqh7
少なくとも>>350のindex: usizeは
何らかラッピング { index: usize }と別型にすべきところ
まず範囲外のusizeでうっかり使っても型エラーにできる
そしてラッピング型の動作が必ず範囲内に収まるコードであることを注視するだけで安全性を保証できる
2024/03/21(木) 21:05:14.02ID:7RDAu5V5
NonZeroとかNonNullみたいな固定条件ならいいけど
範囲みたいな可変条件だと型だけじゃ厳しいでしょ
別の条件で作られた同じ型の値を使われるかもしれないし
ライフタイムで条件と関連付けるのも限界がある

結局テストパターン増やしてdebug_assert踏むしかない
2024/03/21(木) 21:44:37.76ID:t5wrhqh7
>>358
もちろん二段階
まずは専用型にすることで管轄外のusize indexがうっかり混じるのを型エラーで確実に避ける
次にコーディングやレビューやメンテでその専用型の動きに注視できる
2024/03/21(木) 22:18:44.86ID:cOunjWn7
unsafeをsafeでないのにsafeにしておいて
ある型が使い方によってはunsafeになるかもしれないから注視しろってのはちょっとキツイです
2024/03/21(木) 22:27:42.27ID:WuGieKPN
結局プログラマが色々意識してコーディングしないと安全にはならないのね
こういうのもコンパイラがエラーにしてくれてそれを直していけば安全になるものだと思ってたんですけど
2024/03/21(木) 23:07:15.31ID:7RDAu5V5
unsafeに手を出さなければ最悪でも暴走する前にpanicで停止する安全性は確保できる
実際は安全の為でもpanicで止まると困るから色々注意しないといけないし
unsafeで余計なチェック省いたり黒魔術使ったりもする
Rustの安全性のサポートは選択と集中がしやすくなる程度で万能ではない
2024/03/21(木) 23:12:07.53ID:v/mpoJJ8
>>361
unsafeを使わなれば自動的に安全が保証される
unsafeを使うならその関連箇所に人間による安全保証が必要、それ以外は自動的に安全が保証される
C/C++はすべてのコードがunsafe状態なので自動的に安全が保証されるところがない
2024/03/21(木) 23:22:25.34ID:WuGieKPN
いつもの人がきたw
結局レベルの低い人が書くとunsafeも不適切に使われて今回のように脆弱性が出てしまうでしょ
Rustであれば安全と思ってる人が多そうなのでかえってunsafeによる脆弱性が見落とされたり発覚しにくくなって問題だと思うんですけど
2024/03/21(木) 23:58:23.31ID:z414Bs3I
> Rustであれば安全と思ってる人が多そう

いや一応言っとくけど多くはないよ流石にw
一部の人が連呼してるだけ
ほかの人はもっと現実的だろな
2024/03/21(木) 23:59:21.08ID:t5wrhqh7
原則はunsafeを使うな!
これだけだ

理解できていてunsafeを使う場合も
とにかく閉じ込めろ!
専用のクレートを作れ
専用のモジュールを作れ
専用の型を作れ
2024/03/21(木) 23:59:51.15ID:XJ9dJAV6
unsafe使わなければ安全
368デフォルトの名無しさん
垢版 |
2024/03/22(金) 09:16:28.77ID:IQ7X1X+j
まあ実際rustはコンパイル通ればいいの思想を強める傾向にはある。
それは意識して気をつけた方がいい。
2024/03/22(金) 10:19:34.77ID:avPqaarP
ロジックや言語仕様を考えずにコンパイルが通るまでひたすらいじくり回すタイプの人間は本当にいる。
チュートリアルすら読まずに書き始めてなんもわからんから教えてと質問サイトに投稿しちゃうやつはいる。
そういうやつは早めに脱落して欲しいし大抵は脱落していくんだけどどういうわけか生き残ってあらゆるところをワヤにしていく狂人がたまにいるんだよ……
普通に現実を見ながらちゃんと学べる人なら (たまにはミスることもあるだろうけど) 大丈夫だよ。
370デフォルトの名無しさん
垢版 |
2024/03/22(金) 11:58:26.79ID:7Rs7masV
>>358
0〜127の範囲のみを取りうるようなEnumなら作れる
wasmiの例のように実行時にバッファサイズが変動するなら無意味だけど


サイズが変動する場合はget_uncheckedに必要な安全性の保証をsafe wrapperの中でやるのが基本
それができないならunsafeのままにして上位で安全性を保証させるようにしないといけない
>>359のやり方はそれができてないように感じる
2024/03/22(金) 12:34:01.41ID:TbCMvv+/
実行時に範囲が変動するといっても制御下にあるのだからindexがその範囲にある時のみ有効な型を実装すればよい
そうすればその型に対して常に安全にget_uncheckedを使える
2024/03/22(金) 14:04:42.65ID:ZrfX32kv
Rustは失敗言語
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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