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/22(木) 11:53:24.27ID:UAqiPUwL
>>705
作者がその件で書いている話の正確なところは、
stable版ではLinkedListのcursorと、
カスタムアロケータのallocator_apiがまだ使えないため、
それがnightly版を使った理由。
あとはifとwhileでのletチェーンも使いたいから、と追記してるね。
2025/05/22(木) 12:12:32.32ID:7hcqrM5x
このレベルはwarning出そうだが、リリースするまで見落とすのか
https://github.com/microsoft/edit/pull/137/files
2025/05/22(木) 12:27:27.75ID:91TPuQzO
warningは出ない
panicは安全
データ喪失も安全

#メソッド
2025/05/22(木) 12:32:59.97ID:939EO24R
ほかの言語でも同じ
ほかの言語でもデータ破壊も安全

#複おじメソッド
2025/05/22(木) 12:33:48.78ID:F2qpM5Mw
作者のRust評/Zig評は複オジまとめじゃなくて原文を読むことを勧める

>>720
行入れ替えじゃなくてunindent
テストも書かれてないし現状はその程度の品質だろうね
2025/05/22(木) 12:41:36.62ID:x5lmf+DD
>>720
x[i]はiが範囲内に確定してる時のみ使う構文
panicを起こしうる構文やメソッドを確定していない時に使うことはRust的じゃないな
2025/05/22(木) 12:46:06.84ID:a/mGSBeg
アニヲタ: アニメなら第一話を必ず見る、周りの反応が気になる、切る
複おじ: Rustなら必ず飛びつく、周りの反応が気になる、切る
2025/05/22(木) 12:46:41.09ID:KP+m41xg
イテレータ使えないオジサンがMSいるって
2025/05/22(木) 13:01:08.00ID:IrgEi0Ky
元がCやZigで書いてるからそんな変なコードになっていてその時からあるバグをそのまま持ち込んだのだろう
if let/let elseやイテレータを使ったコードへリファクタリングすれば安全性が向上するだろう
2025/05/22(木) 13:09:18.28ID:vw9JCw9U
リファクタリング棒て
そんなの簡単に出来たら35万デッドエンドしてないて
2025/05/22(木) 13:10:28.75ID:KP+m41xg
松居棒的なものかな
2025/05/22(木) 13:10:29.98ID:vw9JCw9U
テストをきっちり書いてからLLMだな
2025/05/22(木) 13:22:57.18ID:IrgEi0Ky
>>728
その手のリファクタリングすらできないならかなり能力の低いプログラマ
Rustの基本知識を身につけていれば普通のプログラマなら可能
2025/05/22(木) 13:44:14.99ID:2nBK69jH
>>728
すでにGitHub Copilot Coding Agentがパブリックビューで出てきてる。
ごく近い将来、commitしたソースを自動でlint:fixして勝手にAIがレビュアーが指摘と対策コードを
提示して勝手にsquashしてcommit履歴すらも綺麗にするようになるんじゃないかな。
2025/05/22(木) 13:49:19.61ID:HsI4QOi0
>>732
C/C++コードを静的に安全確認は無理なことがわかっているためAIでも不可能なので
その時代になるとRustへの移行がますます加速するんだろうな
2025/05/22(木) 13:51:10.87ID:UQXssU7R
>>732-733
ほかの言語でも同じ
むしろRustの伸びしろが小さいまである得る
2025/05/22(木) 13:54:16.75ID:HsI4QOi0
>>734
Rustに勝てそうな言語が現状見当たらない
2025/05/22(木) 13:57:52.09ID:UQXssU7R
>>735
めっちゃ頑張ったんだけど1位になれなかったな

悲報!Rust版AV1デコーダーがCより5%遅い問題が解決できず、カネで解決しようとする
https://www.memorysafety.org/blog/rav1d-perf-bounty/
2025/05/22(木) 14:02:35.00ID:UQXssU7R
>>727
Rustの伸びしろが小さいとどんどんC/C++/Zigに置いて行かれるね
2025/05/22(木) 14:05:09.70ID:HsI4QOi0
>>736
それはLLVMの問題点が指摘されてる

>>737
静的に安全確認できないそれらの言語はAI時代に捨てられる運命
2025/05/22(木) 14:14:30.21ID:CROXV2hn
手厚くお相手開始
2025/05/22(木) 14:31:07.15ID:LEPMJViS
>>738
やっぱgccで納得だよな
2025/05/22(木) 14:50:43.05ID:vSIkavG1
度々Rustがビミョーに遅いのはLLVMのせいでしたが仮に本当なら
一個人のホビーコントリじゃどうにもならんよ
2025/05/22(木) 15:09:08.16ID:7U+e92KZ
>>738
いや現実には複合要因だろう
他責にして手をこまねいてる間にRustが停滞していくのが心配
2025/05/22(木) 15:13:41.62ID:KP+m41xg
LLVMならAppleがなんとかしてくれんか
2025/05/22(木) 15:15:07.07ID:ynUA2sKu
>>731
> その手のリファクタリングすらできないならかなり能力の低いプログラマ

お試しも含めて広まるべきところには行きわたって
これからは質が悪くなる一方だな、人的にも成果物的にも
2025/05/22(木) 15:31:34.14ID:aYSVJIqg
Rustコードのちょっとした変更に対して生成コードが大きく変わることが問題として挙げられている
特にcmov/cselを用いて分岐命令を回避できていた生成コードが条件分岐に変わってしまう問題が遅くなる顕著な例
LLVMが振る舞いを変えていて結局cmov/cselが消える問題はスタックの使用量が増えると発生するらしい
Rust側のソースコードとコンパイラだけでは対処が難しい領域
2025/05/22(木) 15:32:41.47ID:bU6I8/FS
これがAI時代のプルリクエストか
https://github.com/microsoft/edit/pull/164
2025/05/22(木) 15:37:54.16ID:uqmyB1Ls
>>746
テストしてから出直してくれって優しい作者だな
Microsoftってもっとキツい印象あったさかい
2025/05/22(木) 15:38:10.97ID:K7SIzHpJ
>>746
さっそくRustの今後
> これからは質が悪くなる一方だな、人的にも成果物的にも
2025/05/22(木) 15:40:33.23ID:KP+m41xg
情報があればLLMの精度も上がらんかな
2025/05/22(木) 15:42:18.46ID:SZpXeR4e
>>746
メソッド乙

複おじ: 気になる、貼る、煽る、反応を見る、切る
2025/05/22(木) 15:45:34.88ID:aYSVJIqg
>>749
もっとLLVMへの指定とLLVM側での対応が増えれば解決する問題ではある
ケースによってrustcまたはRustソースコードで指定
2025/05/22(木) 15:46:16.26ID:SZpXeR4e
>>747-748の通り一瞬で分かるのに、>>746は本当に英語出来ないのか

>>746
> これからは質が悪くなる一方だな、人的にも成果物的にも
を体現しているな
2025/05/22(木) 15:48:23.67ID:bU6I8/FS
>>751
じゃあ、gccrsでビルドしなおすだけで$20,000もらえるの?
2025/05/22(木) 16:30:41.91ID:2nBK69jH
>>753
ただし欧米かニュージーランドかオーストラリア在住が必須とあるので、日本人お断り案件
2025/05/22(木) 16:33:47.34ID:Wyc/rge8
最適化ってのはレジスタ割り当てとかは合理的な割り当てアルゴリズムがあるが、
ヒューリスティックな手法も合わせて使ってる。
大量の置き換えパターンを辞書として持っておくという泥臭い仕組みだったりする。
これは言語の性質によるので言語中立で高性能な最適化機構を持ったコンパイラバックエンドなんて無理なんじゃねーかなと思ってる。
2025/05/22(木) 17:31:19.79ID:tAcTMpoq
Rustって泥臭い役割を避けているから愛され言語イエーイしてるよね
2025/05/22(木) 17:33:10.42ID:4yMDsF24
Rustはルールが厳しくてすんなり書けない事が多い お世辞にも書きやすい状況じゃない
それ自体は仕方がないけど回避するために何か方策が必要になることが多い

現在のstableでは機能不足でありeditの作者はnightlyビルドを使ってる
関数の充実が待たれるが結局その都度使える関数を探さないといけない
758デフォルトの名無しさん
垢版 |
2025/05/22(木) 17:42:54.78ID:+oBlNCwp
ネット上での統合失調症【糖質】の機器の説明との押し問答と同じ状態を表している
無知だからこうなのだよ!
※ 周囲の人は統合失調症の思考を聞いているのでしょうならその思考通りに統合失調症は話せばよいのでしょう?
※同じ話を統合失調症も聞いておりますけれど?

「AIがMicrosoftの従業員を徐々に狂わせていく様子を見るのが趣味」というネットユーザーの投稿が話題に
2025年05月22日 14時00分
https://gigazine.net/news/20250522-github-copilot-coding-agent-error/
>>「AIが『直しました』と言い、人間が『いいえ、まだ壊れています』と言い、AIが変更を加えて『問題ありません、直りました』と言い、さらに数回繰り返すところが気に入っています」といったコメントや、
>>「残念なことに、私もまさにこのパターンに従う人間の開発者と一緒に働いたことがあります」とのコメントのほか、
>>「問題は、今後10年間でモデルが実際に改善され、実現可能になるという確かな証拠がないことです。テストと研究はともかく、製品に導入するのは全く別物です。大手ソフトウェア企業は、株主の利益を満足させるために運営されています」など、未完成で不確かな製品を公開することに異議を唱えるコメントが付けられました。
2025/05/22(木) 17:45:59.66ID:uhPOTko+
生ごみ拾ってくんな
2025/05/22(木) 18:00:14.35ID:d39+JgNA
>>755
>>500,736 の場合は特にasmコードが実行時間の大半を占めている前提で考えて
「inline」asmとその前後(のCコードのgcc出力)が相性良く仕上がっているからかなぁ、と思ったら
dav1dにはinline asmはなくて関数単位でasmを使っているだけの様に見える
https://code.videolan.org/videolan/dav1d

それでもgccとclangで差があると言うのだから「泥臭い」最適化には頭が上がらない

ましてやasmコードそのままに横入り/ただ乗りするプロジェクトに憤りを感じる
2025/05/22(木) 19:00:56.60ID:XBxWc1wb
考えて見たら
> 横入り/ただ乗りするプロジェクト
の方は内々ではちゃんとお金出すってさ、videolan側で変更が発生した場合
videolan側へも関わった人数分の懸賞金配分があるべきだよね
2025/05/22(木) 19:18:13.29ID:Wyc/rge8
>>760
オープンソースライセンスで、しかも二条項MITという緩いライセンスを選択している以上はただ乗り歓迎という意思表示だろう。
性能的に不十分ではあっても技術的開拓をしてる分だけ単なるユーザよりは貢献してるわけだし、そこに憤るのは筋違いだと思うぞ。
2025/05/22(木) 19:23:31.51ID:m1kcBvrt
>>762
tailwindも勘違いしてる
2025/05/22(木) 20:47:22.62ID:ETRzBAed
ガーイガイガガイガガイガガイ私ガイガイガイガイゴミガイジ
周りに迷惑をかけ続けるクソガイジ
プログラミング出来ないイキリ無能
死んだ方がマシ人間
ガイガイクソガイジ
2025/05/22(木) 20:47:47.49ID:ETRzBAed
死にますクソガイジです
2025/05/22(木) 20:49:14.84ID:ETRzBAed
やる気ある無能クソガイジだけど質問ある?
2025/05/22(木) 20:53:07.80ID:dgzgwN3Q
なんでRustで作られたモノが極端に少ないのかと思ってたけど
理由が分かっちゃったよ
2025/05/22(木) 21:18:38.27ID:wA1n0evO
rav1d高速化コンテストだけど
MaybeUninit を使ってゼロクリアを避けただけで
実行時間差の2割が解決したらしい
2025/05/22(木) 21:25:17.88ID:vWuNaL1X
>>767
新たに作られたものはRustが多い
2025/05/22(木) 21:28:24.04ID:Wyc/rge8
>>767
Rust の公式リポジトリ (crayes.io) のクレートが 18 万個。
python のリポジトリ (pypi.org) にあるパッケージが 63 万個。
JavaScript が 200 万個。

まあ比較すれば少ないが、 JavaScript の1割弱ならかなり多い部類だろ……
Hakell だと1万7千、OCamlなんて4千ちょっとだぞ。
2025/05/22(木) 21:31:44.54ID:NUp+tA1x
>>768
そんな基礎的なことをやっていなかったことに驚いた
何かデータ構造ベクタとかスタックとかキューとか作ったことがあれば初期値のサイズ0で必ずMaybeUninit使うのにな
2025/05/22(木) 21:33:15.61ID:00rOw+nM
>>770
こっちが恥ずかしくなる
2025/05/22(木) 21:33:58.09ID:Wyc/rge8
ゼロクリアする必要がない (から削除してよい) ことをコンパイラが見抜けないもんなのか?
2025/05/22(木) 21:53:24.32ID:NUp+tA1x
>>773
特定の使われ方するものに限って将来型システム拡張で対応できる可能性があるかもしれないらしいけど現状は無理だね
型Tの入る場所には型Tの何か入れておかないと未定義動作となってしまう
そこで現在はMaybeUninit型という初期化しなくていい型が用意されていてそれを使うことでCと同じ速さにできる
2025/05/22(木) 22:18:19.76ID:Lnn/kL7w
Apple M3で8.8%遅かったのが7%になったとな
「5%遅い」はAMD Ryzenでの数字
2025/05/23(金) 00:20:06.09ID:DMG4+Dzb
>>767
> なんでRustで作られたモノが極端に少ない
crateばっか作ってるなw

>>770
githubレポ数で割ると

Rust 21%
Python 5%
JavaScript 8%

Rustはこれで良いのか?
2025/05/23(金) 00:34:18.82ID:KwpCF/mF
>>720
静的解析ツールで検知できそうなもんだけどな
Rustにはないのかね?
2025/05/23(金) 01:14:01.61ID:47lL8rKF
外部の状態が関係してるから静的解析では無理だろ

self.buffer.extract_raw(beg.offset, end.offset, &mut replacement, 0);
で取得したreplacementが長さ0である可能性とか分からん
2025/05/23(金) 18:12:15.45ID:fSCiRT4u
開発自体は別言語で行って最後にRustに移植で良い気がしてきた
2025/05/23(金) 19:45:55.43ID:OOOuBnce
バカはそれでいい
781デフォルトの名無しさん
垢版 |
2025/05/23(金) 20:53:28.09ID:KhcqusRd
神は仰った
天才と思う者だけRustを使いなさい

Rustを使うものはバカだけになった
2025/05/23(金) 20:55:45.35ID:XkE7Ub7P
バカは移植できないしRustも使えないだろ
2025/05/23(金) 21:06:36.34ID:q2+gUe0H
>>779
別言語って具体的に何?
2025/05/23(金) 21:11:13.25ID:zy1r+aa1
バカは別言語が気になる
2025/05/23(金) 21:14:51.67ID:j/zkYBBs
オレはTypeScriptで書いてたWEB APIをRustで書き直したよ
その後保守性わるくてTypeScriptに戻したけど
またRustで書き直そうかと迷ってる
性能か保守性か悩ましい
2025/05/23(金) 21:20:15.08ID:Ka+y5wx4
保守性の高さからRustが使われる
Rustより保守性の高い言語はない
2025/05/23(金) 21:25:40.65ID:jtcLJX4P
プロトタイプはPythonでいいぞ
2025/05/23(金) 21:48:17.92ID:fSCiRT4u
GC言語などでメモリ関係なくコード書いて最後にRustでいいんじゃないか
asmの代わりがRust
789デフォルトの名無しさん
垢版 |
2025/05/23(金) 22:03:24.19ID:ai481srR
保守性高いと進化留まりガチ
2025/05/23(金) 22:31:16.60ID:cq9daAD7
Rustの保守性の高さは並列排他に至るまで対応する強力な型システムがベース
進化を重ねていて両立
2025/05/23(金) 23:00:21.91ID:wyAziAax
体言止めおじ
2025/05/23(金) 23:13:32.86ID:41zDvF3c
>>785
Rustの保守性の良し悪しはともかく、そんなしょっちゅう書き直せる程度のものなら保守性なんか気にする必要ないっしょ
2025/05/23(金) 23:21:45.26ID:Or/WqP1C
>>778
今回のは長さ0になる可能性があることが分かるやろ

はっきり分からないような場合でも解析ツール的にはフォルスポジティブでも安全側に倒しておいたほうがいいから「長さ0にならないとは断言できない」っというので警告を出す条件としては十分
2025/05/24(土) 09:17:30.06ID:WNK/IsVL
コンパイルが通れば安全じゃなかったの
2025/05/24(土) 09:24:29.16ID:yzzSRgnL
>>794
アホ?テスト通せよ
2025/05/24(土) 09:42:12.79ID:ZlHMVtxs
>>794
安全だよ
この件でメモリのセキュリティのホールになることはない
2025/05/24(土) 09:42:56.36ID:ZlHMVtxs
Rustでもほとんどのプログラミング言語と同じでインデックス境界チェックエラーにより落ちてくれる
2025/05/24(土) 09:44:36.18ID:ZlHMVtxs
Rustでこれを避けるにはindex値が範囲内か不明の時はxxx[index]アクセスをしないこと
get*やイテレータなどを使う
2025/05/24(土) 10:24:46.55ID:s9P60fxK
イテレーターとインデックスアクセスじゃスピード変わりそう
と言うより用途が違う
2025/05/24(土) 10:39:58.90ID:Dj63S0pS
末尾\0が保証されてるCのコードをそのまま移植したんでしょ
いわゆる「Rustは清書用」バグ
2025/05/24(土) 11:01:12.40ID:dDDF+ndx
たとえば「任意のコードを実行可能」な脆弱性が「異常終了するだけ」の実行時エラーで置き換えられる
この種類の置き換えはJavaでもできる
2025/05/24(土) 11:12:53.59ID:31NR7JIu
>>800
C言語の段階で範囲外インデックスのバグだな
落ちなくてヤバかった
2025/05/24(土) 11:25:25.71ID:hdyPRmcZ
>>800
関係ないやろ
2025/05/24(土) 11:33:16.13ID:31NR7JIu
アクセス違反だがCでは落ちずに動いていた
Rustにしたことでバグが露呈
2025/05/24(土) 11:58:41.99ID:WNK/IsVL
>>795
このスレでさんざんコンパイル通れば安全という話を見てきたんですが
2025/05/24(土) 12:00:21.23ID:dDDF+ndx
ていうか、mutを制限しない限り、末尾\0は別の値に変更できるから末尾\0は保証されない
2025/05/24(土) 12:06:04.95ID:Yxl83xTJ
>>805
コンパイルが通れば安全というのはRust-bookの翻訳の間違いな。原文読まないと
手を動かさないと理解できないだろうが、Rustにはテストフレームワークが組み込まれてるし、さらに外部のクレートを使うことが推奨される

cargo-nextest
cargo-insta
あたりね

ライブラリークレートをコーディングするときに並行してテストコードも書いて、バウンダリーズとかに問題がないことを確認した上でcrates.ioやgithubに公開しないと恥かくよ。上のヌル文字終端とかもCから来た人なら絶対テストに入れるべきよ

恥を気にしない人なら好きにしてくれ!
2025/05/24(土) 12:24:06.94ID:qBFhvLyI
>>805
Rustではコンパイラが通れば必ず安全が保証されるよ
2025/05/24(土) 12:24:29.19ID:qBFhvLyI
>>805
MSエディタはインデックス範囲外をpanicするAPIを使っていて安全に落ちていて他の言語と同じ
2025/05/24(土) 12:26:01.00ID:n4i2OJDy
>>805
Safe Rustに限定すればRust自身にバグがない限りは安全
今回のはpanicするだけなので安全の範疇だよ
「安全 == ロジックバグがないこと」だと思ってるならそれは間違い
2025/05/24(土) 12:30:11.61ID:qBFhvLyI
panicがイヤならpanicしないAPIを使えば解決するね
panicするAPIを使っておいてpanic違反するのはマゾみたいなもの
2025/05/24(土) 12:45:05.58ID:Dj63S0pS
>>803
Cの場合は空文字列でも\0があるから最初に
if (str[0] == '\t)
をぶつけても問題にならないよ
このフローをそのままRustに持ち込んだ感じ
もとのコード見れないから断言はできんが
2025/05/24(土) 12:45:10.09ID:hrBpr2UE
とっくに化けの皮は剥がれてるのに、こんな新規参入のない掲示板で耳障りのいいことばっかり書いて何になると思ってるんだろうか
814デフォルトの名無しさん
垢版 |
2025/05/24(土) 13:50:39.66ID:O3jtwJBp
コード見たけどRustならスライスとそのメソッド使うところ
なぜかインデックスアクセス多いな
該当部の直後も
while remove < self.tab_size as usize
 && offset + remove < replacement.len()
 && replacement[offset + remove] == b' '
{
 remove += 1;
}
2025/05/24(土) 14:01:45.35ID:BEuCRZEl
最初に機能の弱い他の言語で書くからそうなる
最初から抽象的に書けるRustを使うべき
2025/05/24(土) 14:17:39.59ID:h3vjyAnh
えー、このクソ言語で?
2025/05/24(土) 14:34:27.01ID:a4AdJqTs
crates.ioの恥は描き捨て
818デフォルトの名無しさん
垢版 |
2025/05/24(土) 14:47:03.56ID:278FQlA0
続けるだけでは意味がない。研究が示した「成長できない人の条件」
公開日2025.05.24 13:00:14 SATURDAY
http://nazology.kusuguru.co.jp/archives/177845
2025/05/24(土) 15:05:18.87ID:DHz/6DDr
古く機能が弱いプログラミング言語にこだわってる人は成長できない
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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