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/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
古く機能が弱いプログラミング言語にこだわってる人は成長できない
2025/05/24(土) 15:11:27.10ID:dDDF+ndx
キラキラは個人の成長じゃなくて人類の進化なのに
2025/05/24(土) 15:17:37.34ID:wO2qY8QG
>>812
仮にCバージョンでTextBufferをnull終端した状態で管理していたとしてもreplacementはその一部分を指し示すものなのでnull終端したりはしないぞ
2025/05/24(土) 15:21:29.32ID:DHz/6DDr
null終端は部分文字列が作れないからそういう時には使わないよな
2025/05/24(土) 16:45:23.89ID:Dj63S0pS
>>821
コード見てないだろ

https://github.com/microsoft/edit/blob/main/src/buffer/mod.rs
のunindent()が何やってるか追えば対象の一部分を作業用の一時bufferに読み込んでるの分かるはず
エディタは履歴管理も必要だからね
2025/05/24(土) 17:16:21.68ID:OcBn8OTY
>>792
まだ本番運用前だからね
TypeScriptとかJavaScriptのホットリロード(pm2)がプログラム修正時にすごくありがたいんよ
でもRustで性能上がるのはわかりきってるから悩ましい

本番環境で実行中のプロセスは実行終了まで旧バージョンで動作させて
新たな処理は新バージョン用の新プロセスで実行してくれるようなRust用のしくみ(pm2のRust版みたいなの)ないのかな
2025/05/24(土) 17:46:57.96ID:lRCaLjeC
Common Lisp は実行性能が良くて抽象度も高いしホットリロードの本家みたいなもんだ。
だけどまぁ Lisp 系ってだけで敬遠するのが世間の普通だし、慣れが不十分だと何でも使い難いよ。

慣れてるのがやりやすいというだけの本当に単純な話なんで、
Rust 初心者が今まで使ってた言語より使い難い! ってのは言語の比較になってない。
2025/05/24(土) 17:57:30.53ID:wO2qY8QG
>>823
だからその読み込み先の一時bufferをnull終端させたりしないんだって
それに一時buffer使ってるのは履歴管理のためじゃないぞ
2025/05/24(土) 18:01:36.37ID:jDLm1nrI
そういや、一昔前は新しい言語が話題になれば必ずLispと比べて腐すのが作法だったのに
近頃は見なくなったな
2025/05/24(土) 18:12:36.04ID:lRCaLjeC
Rust はカテゴリとしてはシステムプログラミング言語だ。
C++ などに慣れている人が Rust 入門する分にはそんなにハードルは高くないと思う。
むしろ C++ 使いこそ Rust を賞賛しているケースが目につく。
C++ は必要なものは揃っている現実的な言語だが後付けだらけでグダグダだし、メモリアクセス関連で未定義を踏むのはベテランでもやることだからな……。
それが解決するなら大歓迎だ。

ウェブ系 (JavaScript, TypeScript) からだと Rust は色々と分かり難い要素が多そうだが、
ウェブ界隈で Rust の存在感が出てきてしまったから使わざるを得ないこともあるだろうし、
仕方なく使ってれば文句も出るんだろうと思ってる。
2025/05/24(土) 18:24:31.95ID:dDDF+ndx
OOP時代に耳障りのいいことが色々言われたおかげで
演算子や関数名を左端に書く時代は終わった
けど演算子は継承やvirtualでうまく表現できなかったからOOP時代も終わった
830デフォルトの名無しさん
垢版 |
2025/05/24(土) 20:46:05.09ID:6QA0+Pxw
>演算子や関数名を左端に書く時代

なにこれ
2025/05/24(土) 21:37:14.29ID:lRCaLjeC
>>830
たぶん LISP のことを言ってる。
2025/05/24(土) 21:53:46.20ID:piRiqje+
>>824
そんなBFFみたいなのをRustで書くのはあまり一般的ではないでしょ
普通にNextとかにしてパフォーマンスクリティカルな部分だけRustで書いてRPCかFFIで呼べばいいのでは?
どうせ君はやってみたいだけ俺スゲーしたいだけなんだから、その方が合理的な判断でRustを採用してるっぽくなって自尊心高まるぞ
2025/05/24(土) 22:24:13.67ID:BtZwAmFy
>>727
unindent関数で各行をreplacement.drain(offset..offset + remove)しているけど
indexを使わずにイテレーターでやる場合、更に追加のバッファが必要になる感じで良いのかな?
2025/05/24(土) 22:57:52.90ID:ObNXdxnD
>>814
安全に速くするにはこう?
remote += replacement[(offset + remote)..]
 .iter()
 .take_while(|b| **b == b' ')
 .take(tab_size as usize - remote)
 .count();
2025/05/24(土) 23:12:04.53ID:CwChNIBX
spaceとtabが混ざっているとインデントレベルが破綻するね
例えば tab_width==4 で
space tab の並びはインデント1つ分
2025/05/24(土) 23:12:54.11ID:CwChNIBX
unindent後も
tab の並びでインデント1つ分
2025/05/24(土) 23:23:16.50ID:aRH5Qbe1
それは混ぜた人の問題だから仕様でいいだろ
2025/05/24(土) 23:35:00.85ID:OcBn8OTY
>>832
両方の言語で書いてみたあとそれも考えたけど
性能差の根本がhttpサーバ部分の性能差だからそうはいかないんよね
2025/05/24(土) 23:39:02.86ID:1Azz3exJ
>>837
そだね
スター沢山ついたけど細かい面倒を買って出る人は少ないよね

>>834
ちなみにspace/tab混在も対応する場合、オリジナルのループなら簡単な変更で、意図が明確だと思うけど
イテレーターだとごちゃつくのでは

>>727,833
これもごちゃつくのでは
2025/05/25(日) 01:10:56.69ID:TXvAFiBF
>>838
さすがにそのレベルだと完全に無意味なオーバーエンジニアリングだから、もう好きにしたらいいのでは
2025/05/25(日) 01:44:17.05ID:xLL5QQea
どうせ君はやってみたいだけ俺スゲーしたいだけなんだから

見ず知らずの相手にここまでひどい人格否定ワード言われる筋合いはないぞ。追放かなこいつ
2025/05/25(日) 04:45:11.33ID:SHX6eUvx
メモリ保護以外にもなんかねーのか
もう一歩欲しいよな
型アノテーションもつけてくれ
2025/05/25(日) 10:06:04.62ID:yaAj4Ooc
Web APIでhttpサーバ部分がボトルネックになるってどんな状況なんだろ
大量のIO待ちリクエストが発生するような状況ならあるかもしれないが、そんなの>>824みたいなゆるいスタイルで作るかなあ
2025/05/25(日) 10:20:43.43ID:hwv8Rr4+
>>843
その>>824の人の状況は知らないけど
httpサーバ部分がRustとJavaScriptでは裁けるクライアント数が全然違うよ
2025/05/25(日) 10:57:10.37ID:yaAj4Ooc
>>844
ffi等による部分的なRust化で効果がないってことは、838のいうhttpサーバーというのはhttpサーバーのミドルウェア部分(アプリケーションコードを含まない)のみを指してるはずで、
それがネックだとすると、レスポンスタイムの殆どをIOが占めていて、かつ同時処理されるリクエスト数がサーバー台数に対して無茶苦茶多いという極端な状況が考えられる
そんな状況なら一般的なWebアプリだったらDBのコストの方が遥かに高くつくんじゃないかなあ
846デフォルトの名無しさん
垢版 |
2025/05/25(日) 11:02:49.46ID:LExY8Icy
なんでJSTS使いってGoやC#じゃなくてRustまで飛躍するんだ?使いこなせるのか?
システムプログラミング言語とWeb言語は完全に別物だから
2025/05/25(日) 11:22:41.64ID:JojkM5fC
100倍努力すれば勉強時間は100分の1ですむという神話がある
2025/05/25(日) 11:31:38.72ID:hor3/yq3
>>845
リアルタイムで取りに行く必要のあるDBは少なく多くは一定時間内のキャッシュで済む
2025/05/25(日) 11:37:00.52ID:bfDIeSpf
と言う説がある
2025/05/25(日) 11:38:05.07ID:Tpdtsocs
>>846
中途半端な立ち位置のGoやC#を使う意味は全くない
Rustでいい
2025/05/25(日) 12:02:39.00ID:JojkM5fC
中途半端なものは成果にならなかったとしても教養にはなる
教養を軽視すれば論理が飛躍する
2025/05/25(日) 12:06:42.87ID:bfDIeSpf
rustでメジャーDB作ればよいんじゃね?
853デフォルトの名無しさん
垢版 |
2025/05/25(日) 12:20:37.56ID:CDFiJm0R
>>686
Javaはあったっけ?
2025/05/25(日) 12:22:11.20ID:drwcXfZf
Denoの影響で流行ってそう
2025/05/25(日) 12:52:15.88ID:bfDIeSpf
Denoの設計思想変更はあまり受け入れられておらずマイナーなままなんだよな
856デフォルトの名無しさん
垢版 |
2025/05/25(日) 13:44:42.15ID:5mCSr1QT
すまんが、Rustに向いたデザインパターンのトレーニング方法を教えてくれんか?
Rustの言語仕様だけ勉強していてもメンテナンス性の悪い酷いコードしか書けないぜ
2025/05/25(日) 14:11:23.96ID:JojkM5fC
コストカットさえすればあとは自然といい感じになるという説がある
書けないのか読めないのか
もし読めないなら、書くトレーニングを減らせばいい
2025/05/25(日) 14:13:31.63ID:bfDIeSpf
特定のイディオム的なやり方があるけどそれを知りたいんだろ
2025/05/25(日) 14:19:30.22ID:yaAj4Ooc
トップダウンな段階的詳細化かな
CやHaskellにおける極めてスタンダードな構造化手法
WebやOO言語から入った奴が既存の枠組み無しで一からコード書こうとして書けないのは、大抵この基本的なトップダウン設計を理解してないのが原因
2025/05/25(日) 14:23:16.15ID:sgWA4GQu
>>856
デザインパターンはクラス前提での難点の工夫も多いけどRustは素直にトレイトでベストが多い
2025/05/25(日) 14:26:54.40ID:nZHQ2lUj
クリーンアーキテクチャも各境界のトレイトを定めて各層から独立させることが肝やで
2025/05/25(日) 14:37:17.44ID:MrK3XoT9
初心者は動きを確認しながら作ろうとしちゃうからそれだけでは動かすことのできないトップを先に作るというのに慣れてない。
コードを書き始める前に設計を終わらせるというのも言語に慣れない内にするのは難しいしな……
2025/05/25(日) 14:42:23.80ID:nZHQ2lUj
各レイヤのトレイト設計を先にする
下位はトレイトを実装する
上位はトレイトを利用する
2025/05/25(日) 14:44:22.31ID:JojkM5fC
最適化の努力を全然やってないコードは「動かすことのできる設計図」に近い
2025/05/25(日) 14:50:57.47ID:krb10bOH
OOPに引っ張られると酷いコードになりやすいね
構造体をレコードとみなしてデータベースを操作するイメージだと整理しやすい気がする
ボローチェックはテーブルとか行のロックに近いし
変な粒度のテーブル(構造体)作るとロック競合で詰むのも似てる
2025/05/25(日) 15:28:44.21ID:MrK3XoT9
Rust は Haskell に副作用が許されてるくらいの感じ
867デフォルトの名無しさん
垢版 |
2025/05/25(日) 15:41:43.47ID:zeo4gaU2
>コードを書き始める前に設計を終わらせるというのも言語に慣れない内にするのは難しいしな……
そんなんできるの?って感じなんだが
自分はどうしても書きながら改善していく形になってしまう
2025/05/25(日) 15:48:51.02ID:nZHQ2lUj
>>867
リファクタリングしながらでもいい
トレイトに切り分けよう
2025/05/25(日) 16:22:56.39ID:bfDIeSpf
ポンコツばかりだな

前に出てきたような普通の言語なら何でもなく書けるけどRustでは書けないパターンで
一般的な回避法を探してるんじゃないか?

バッドノウハウ的なもの
2025/05/25(日) 18:13:31.58ID:JojkM5fC
「副作用を許さないHaskell」や「staticを許さないJava」は綺麗なルールだが綺麗すぎる
実戦にそんなルールはない
2025/05/25(日) 18:46:48.62ID:JojkM5fC
アンチパターンの知識は役に立つ
というか、そのパターンはデメリットがメリットを上回るという知識が役に立たない
2025/05/25(日) 19:08:43.23ID:drwcXfZf
トップからのプログラミングしたいけど機会減ったな
2025/05/25(日) 19:18:51.73ID:8Xiwc3Kt
>>828
システムプログラミング言語でテキストエディタを作っちゃ駄目だよなw
2025/05/25(日) 19:25:37.29ID:RgYKvIU1
>>873
その用途もRustが最適
2025/05/25(日) 19:42:58.71ID:8Xiwc3Kt
>>873
そっか!サーバーサイトもフロントエンドも全部Rsutが最適なんだね!すごいね!Rust!
2025/05/25(日) 19:56:26.05ID:drwcXfZf
それはそう
2025/05/25(日) 20:21:45.96ID:8Xiwc3Kt
Rustは最強だね
2025/05/25(日) 20:26:32.18ID:drwcXfZf
もはや常識だぞ
2025/05/25(日) 20:47:34.22ID:rKcFynqC
この板では、スレの勢いだけは最強だな
2025/05/25(日) 22:28:28.84ID:vwQP5j9p
Rustの生産性ってどーなの?C++より上?C#より上?
2025/05/25(日) 22:49:17.80ID:oXyJfKrh
普通はC#でいいんじゃね
特別な理由があればRustやCを使ってよい
882デフォルトの名無しさん
垢版 |
2025/05/25(日) 22:57:41.38ID:EuidRO0i
C++よりはさすがに上だけどC#には負ける印象
C#はよくできとる
883デフォルトの名無しさん
垢版 |
2025/05/25(日) 22:59:35.23ID:C94npMX/
開発生産性を犠牲にしてパフォーマンスと安全性に振ってるのがRust
2025/05/25(日) 23:11:26.43ID:o0MDvgRS
>>883
開発効率の良さからRust使ってる
実行前に多くの問題が片付く点が大きい
2025/05/25(日) 23:54:48.00ID:EGwbLAWa
Rust製 coreutils 0.1 がリリースされた
https://github.com/uutils/coreutils/releases

Ubuntu 25.10 から採用される予定なのか
https://www.phoronix.com/news/Rust-Coreutils-0.1-Released
2025/05/26(月) 00:19:33.38ID:1HIo4P8D
うん。結構既出
2025/05/26(月) 00:24:26.87ID:Zjnqlqgy
>>886
そっか、時々しか来ないんで
スマソ
888デフォルトの名無しさん
垢版 |
2025/05/26(月) 00:37:02.06ID:1iQhWo60
ええんやで
2025/05/26(月) 01:35:11.42ID:qeTtAAGy
>>886
嘘つき
昨日出たばかりの新情報
890デフォルトの名無しさん
垢版 |
2025/05/26(月) 08:22:21.45ID:QN3uhjEv
声が聞こえない人が聞こえるのは下記の論文から見てもわかります
先天性【生まれた時には決まっている】のものです

心の中の声が聴こえない?「無内言症」とその影響
公開日2024.05.19 00:00:00 SUNDAY
私たちは日々、頭の中で自分と会話をしています。これは「内なる声」と呼ばれ、私たちの思考や行動に大きな影響を与えています。
しかし、驚くべきことに、人口の5〜10パーセントはこの内なる声を持たない「無内言症(anendophasia)」という状態であることが近年の研究で明らかになりつつあります。
デンマークのコペンハーゲン大学(UCPH)で行われた研究では、内なる声を持たない人々は単語の記憶力が低く、タスクの切り替えなども普通の人とは異なることが示されています。
研究内容の詳細は2024年5月10日に『Psychological Science』にて発表されました。
https://nazology.kusuguru.co.jp/archives/150322

統合失調症患者が「思考」と「外部の音」を区別できなくなる原因が明らかに
公開日2024.10.10 07:00:44 THURSDAY
そのような幻聴には、「お前には生きている価値がない」「死ね」などと自分を否定する声が含まれます。
また、「今、○○の建物に入った」「交差点を歩いている」などと、誰かが自分を監視しているかのような声が聞こえてくることもあります。
この機能の不具合により、患者たちは「脳内の思考」を自分のものだと認識しづらく、それがまるで外部から聞こえてきたかのように感じてしまうのです。
研究の詳細は、2024年10月3日付の学術誌『PLOS Biology』に掲載されました。
https://nazology.kusuguru.co.jp/archives/163195

統合失調症では脳の「意味ネットワーク」が崩壊していると判明!
公開日2022.12.27 18:00:51 TUESDAY
日本の東京医科歯科大学で行われた研究によって、統合失調症患者の脳内ではものの意味を関連付ける「意味ネットワーク」が無秩序になっており、異常な概念の結び付けや思考の一貫性の阻害が起きる原因になっている可能性が示されました。
研究内容の詳細は2022年12月21日に『Schizophrenia Bulletin』にて公開されています。
https:
//nazology.kusuguru.co.jp/archives/119693
2025/05/26(月) 09:27:34.04ID:K6BUEl5t
糖質ていうか多重人格なら自演は上手だろうな
2025/05/26(月) 13:11:38.86ID:oOpwSCpd
>>889
公式に出たのが昨日で、フォーラム情報なんかから、ここでも1ヶ月くらい前から噂になってたのかな
2025/05/26(月) 13:27:39.25ID:+9B33Gpn
>>892
別件ISRGによるsecurity分野Rust化でのsudoをUbuntu採用の話>>254のみ
2025/05/26(月) 13:29:46.87ID:oOpwSCpd
>>893
あれ、ここじゃないどこかのスレで見たのかな
X上のネタまである
2025/05/26(月) 13:32:15.03ID:+9B33Gpn
>>885は従来のGNU Coreutilsつまりls cat cpなど一般コマンドのRust化
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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