Rust part28

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2025/03/24(月) 17:37:00.15ID:NJwebgj2
公式
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 part27
https://mevius.5ch.net/test/read.cgi/tech/1733146370/

ワッチョイスレ
プログラミング言語 Rust 4【ワッチョイ】
https://mevius.5ch.net/test/read.cgi/tech/1514107621/
2025/03/24(月) 19:46:45.83ID:BbPiLIal
そろそろ自転車置き場決めた?
2025/03/24(月) 22:53:31.24ID:b54DQihz
ピンポーン「トレイト境界のほうから来ました」
2025/03/24(月) 23:29:23.83ID:a0wY9RFf
>>3
boundsの意味もtrait boundsでの用法もある範囲や領域の限界や限度や際や境界を意味しています
trait boundsはそのままトレイト境界が正しいです
英語においても制約を意味するconstraintを用いずに境界などを意味するboundsを採用しています
2025/03/25(火) 02:01:12.77ID:+IhEiupF
Goを布教する人が「ジュニアクラスとシニアクラスとで書き方が変わらない」と主張していた

格上と比較され、どっちも同じと評価される
この戦術をもし使い回すとしたら意訳ではなく直訳を推すだろうと思う
2025/03/25(火) 07:38:53.95ID:4wgArwVx
日本語訳プロジェクトを引き継いで「トレイト制約」で統一すりゃいいんじゃないんかな。
日本語訳プロジェクトは最新版に追随できていないから、誰も文句言わないだろ。
2025/03/25(火) 07:51:42.61ID:4yBAp1pH
>>8
Trait Bounds自体は制約の意味ではなくてトレイトを満たす型の集合の境界を表している
制約が起きるのはジェネリックな型パラメータに対してであって一般的に型制約(Type Constraint)と呼ばれる
つまり『トレイト境界』によって対象となる型パラメータに『型制約』が生じるという関係
2025/03/25(火) 11:02:27.42ID:bp/26Ayj
すげーなトレイト制約
これだけで無限に荒らせるじゃん
2025/03/25(火) 11:31:46.22ID:+IhEiupF
いつも批判する人「いつでも自由だった」
いつもなら批判を批判する人「今だけ自由じゃん すげーな自由って」
2025/03/25(火) 11:34:50.46ID:QJthngu+
蒸し返しピンポンダッシュやり続ける境界が荒らし
2025/03/25(火) 12:10:04.70ID:zWA13Zet
>>9
>Trait Bounds自体は制約の意味ではなくて
bounds自体に制限する/限定する/制約するという意味があるのだからその解釈は無理筋
14デフォルトの名無しさん
垢版 |
2025/03/25(火) 12:19:02.68ID:mIj4qXEO
そもそも前後の文脈から境界の意味で使ってるのは明白なのに議論する意味あるの?
2025/03/25(火) 13:34:38.92ID:0qfTf8vd
オライリーが「トレイト制限」で訳してたらもう少し穏便だったな
「制約」にしたせいで「境界」との互換性が破壊された
2025/03/25(火) 15:25:12.69ID:szLyc3VO
『トレイト境界』には解散命令が出されたな
2025/03/25(火) 15:30:05.21ID:jMXJz1LS
空の境界
2025/03/25(火) 15:32:23.67ID:6deS3uMO
間を取ってトレイトバウンズで平和
2025/03/25(火) 15:43:50.99ID:RJloQ+7U
>>15
「境界」との互換性ってなんだ?
2025/03/25(火) 16:25:54.64ID:9htJLIhl
「制限はしているが制約はしていない」by トレイト境界
21デフォルトの名無しさん
垢版 |
2025/03/25(火) 19:06:21.64ID:d+t8RnIb
Out of bounds.
略してOB
2025/03/25(火) 19:55:23.90ID:BNsR0jH8
だからトレイトが実装されていないときにOut of Boundsと言われて納得するかと書いたよね?
違和感しかない
2025/03/25(火) 20:19:08.10ID:4wgArwVx
だからとっとと「トレイト制約」に修正した最新版のRust Book日本語訳を作って公開しなよ。

日本語で参照できるドキュメントが「トレイト境界」なんだから、今のままじゃ「トレイト制約」が普及することなんてありえん。
2025/03/25(火) 21:04:47.63ID:hi2v3TCB
それはそう。
間違っていると思うなら正しいと思う形のものを出していくしかないし、それを認めさせないと個人的に何を思おうがコミュニティの意見の代表にはなれない。
少なくとも真っ先に翻訳を出すような熱心な人々は境界と言ってるし、技術用語の習慣としては妥当性がある。
2025/03/25(火) 22:06:22.48ID:+IhEiupF
>>23
性的マイノリティっぽい人に「口先だけでなくとっとと本格的な手術をしなよ」と言っているような意見だ
2025/03/25(火) 22:20:34.71ID:Ubis8hes
「find」コマンドよりシンプル&爆速の検索コマンド「fd」の使い勝手を確かめてみた、Rust製でGitHubスター数は3万個以上
https://gigazine.net/news/20250324-fd-find-alternative/
27デフォルトの名無しさん
垢版 |
2025/03/25(火) 23:17:31.98ID:i5RyQuwv
>>26
> コマンド名が2文字しかなく、4文字のfindよりも50%短い

すげえ
2025/03/25(火) 23:33:14.22ID:GDvE8n+u
>>27
もし R 言語っての作ったらRustより75%向上って言ってもらえるのか
29デフォルトの名無しさん
垢版 |
2025/03/25(火) 23:45:58.20ID:i5RyQuwv
あるぞR言語
2025/03/25(火) 23:58:55.68ID:nTXQg+Lw
>>9
RustのTraitのもとになったのはHaskellのType Class
RustのTrait Boundsに相当するものはHaskellではType Class Constraints
Traits Boundsは単語の意味的にも用途的にも型を制約するために存在していて型制約の一種
2025/03/26(水) 00:41:57.44ID:GtdqDP2q
もうやめて! 旧トレイト境界のライフはもうゼロよ!!!
2025/03/26(水) 00:58:31.81ID:nyTgHXkW
'a: 'bをlifetime boundって呼ぶのだけは理解できるが
Ty: 'aとかTy: Trがboundかって聞かれるとなあ
2025/03/26(水) 01:44:15.30ID:IVLHb+fu
lifetimeってスコープじゃないんかい
NLLと言うなら尚更
lexicalではないがスコープではあるんだと誰でも思うでしょ
2025/03/26(水) 02:11:13.95ID:VitzB+KX
>>26
> fdは同じ処理を約0.25秒で完了しました。
> 実に6倍以上の速度で処理を行えていることが分かります。

Windowsでも6倍も速くなったということはOsStrのWTF8の影響は微々たるものなのか回避しているのかどちらなのだろう
いずれにせよRustで爆速に作れるんだな
2025/03/26(水) 09:49:55.18ID:UzCdJdTB
>>33
lifetime boundsはライフタイムそのものではなくてライフタイムを使ったジェネリックの型制約のこと
2025/03/26(水) 10:06:58.48ID:uCBEdIAV
>>34
time fd --threads=1 > /dev/null と time find . -print > /dev/null
で比べると、findの方が倍程度速かったからfdのはマルチスレッドの威力かな
2025/03/26(水) 10:09:23.49ID:uCBEdIAV
>>36はWindows MSYS2での結果だからOsStrrのWTF8の影響でfd(シングルスレッド)が遅いのかも
2025/03/26(水) 12:02:53.58ID:+KalETz6
Rustってlinuxコマンドの焼き直しばかりしてるイメージ
2025/03/26(水) 12:17:05.16ID:IF1WIx2a
>>38
確かにRustは清書用とは良く例えたもんだ、Rustは仕様追加変更に弱そうだし

出始めは高速で注目されたalacrittyなんて文字関連不具合は非対応の一点張りだしなあ
TypeScriptコンパイラ(type checker)で言うと、何年もかけてRustで作ったら、その間の停滞はもちろん、その後も進化止まるからなあ
2025/03/26(水) 12:19:09.43ID:VitzB+KX
「Google Chrome」のフォント処理がC/C++言語からRust言語に
「FreeType」からの移行でメモリ安全性を改善
https://forest.watch.impress.co.jp/docs/news/1672186.html
2025/03/26(水) 12:21:00.15ID:bllph6O/
性能などでC実装の既存コマンドを越えられるポテンシャルがあるからね
あとは利用者のバックグラウンドがUNIX系の人多いのかな
Goはランタイム付いてきてバイナリが肥大化するから魅力ない
2025/03/26(水) 12:25:26.75ID:rpkYHztH
>>30
最初から結論出てたんだな
境界関係者の詭弁にはもう騙されない
2025/03/26(水) 12:35:10.24ID:8nhBW1ew
>>30
本物アカデミア発のHaskellは流石
44デフォルトの名無しさん
垢版 |
2025/03/26(水) 12:37:17.45ID:wQYu/WJ8
>>42
HaskellでBoundsを引数にConstraintsの境界を指定したからといって
BoundsがConstraintsと等価にはならないだろう
2025/03/26(水) 13:00:48.37ID:Rp5VJ7+C
拗らせ詭弁爺>>44は境界(boundsじゃないよ、boundaryだよ)の数学的定義も知らずに妄信してるんだろ
2025/03/26(水) 13:32:04.61ID:omia1HUs
>>40
Chromeも次々とRust化されていってるな
停滞しているFirefoxを追い抜いてRust化が進むのだろう
2025/03/26(水) 13:56:36.97ID:GlRCQ5iu
>>46
FirefoxはちょっとRustにかまけたせいで停滞したからな
chromeはお大事に
(カラーとかSVGが済んで今後10-20年間はフォント関係の大きな規格追加変更しないつもりかもね)
2025/03/26(水) 13:59:25.21ID:GlRCQ5iu
>>41
>>36によるとそのポテンシャルは発揮されてないし、マルチスレッドの力技ならGoの方が柔軟で規格追加変更に強そう
2025/03/26(水) 14:06:07.26ID:1e+q4ua7
>>48
Windowsなんて相手にしてないんよ。MS製品使いなよギガジン
MSのDos窓のfindとの比較してもなあ
2025/03/26(水) 14:11:51.14ID:b+j3piho
恥ずかしいの沸いとるしw
msys2知らんのやろな
2025/03/26(水) 14:30:05.79ID:1e+q4ua7
そんなものの上で比較して何が嬉しいギガジンと言っている
LinuxDesktop使わんかい
2025/03/26(水) 14:31:52.57ID:1e+q4ua7
せめてmacOSだな
ドザーしかギガジンにはおらんのかもな
2025/03/26(水) 14:33:11.38ID:Ep1QhWaG
Rustはリファクタリングや変更に強いため
それらでエンバグしやすい言語よりもRustを使うのが好ましい
2025/03/26(水) 14:41:56.21ID:T3pkuVQ+
恥の上塗りすこいな ID:1e+q4ua7
>>34が気にかけてるOsStr/WTF8の影響の話だからな
windowsでやらなきゃ意味ないよ

とは言えRust自体がWindowsなんて相手にしてない節が多々あるので、RustがWindowsで遅いと言われても納得ではある

> LinuxDesktop使わんかい
まずLinuxでこれやって見ては
> time fd --threads=1 > /dev/null と time find . -print > /dev/null
2025/03/26(水) 14:45:41.09ID:1e+q4ua7
ガハハ、Linuxで遅いと残念だから調査してみますか
2025/03/26(水) 14:52:45.05ID:rX+At6OX
一般的にマルチスレッド対応をする時
並列に動作できるようにアルゴリズムを組み替える
シングルスレッドで動かすと最善アルゴリズムではなく最善より不利になったとしても、並列化できることを最優先にアルゴリズムを変える
そういう常識を知らない無知な人が「--threads=1」で実行して速度比較してしまう
2025/03/26(水) 15:01:36.90ID:HFWxx5Om
>>56
そんな保険張らなくても良いと思うよ

数値計算などを含めると分割コストが馬鹿にならないけど、ディレクトリトラバーサルはロスなくマルチスレッドが効きやすい処理だから
自分は昔から自作のMPMCキューとスレッドプールでその手の処理やらせてる
58デフォルトの名無しさん
垢版 |
2025/03/26(水) 15:05:10.71ID:wQYu/WJ8
>>57
第一生命の人にそれ言えるの?
59デフォルトの名無しさん
垢版 |
2025/03/26(水) 15:08:57.08ID:NpEBbPpg
FreeTyoe終了するんか胸熱
2025/03/26(水) 15:10:32.50ID:2W1ljvQ/
あの記事の比較を真に受けるやつはどうかしてるぞ
簡単なベンチマークすらできないのか?
2025/03/26(水) 15:12:31.05ID:NpEBbPpg
>>53
リファクタリングって車輪の再発明のことだよ
2025/03/26(水) 15:33:35.65ID:tAQnxLhJ
>>60
fd vs (gnu)findの記事で、(ms cmd)dir -s をしかも powershell(.net) 上でやるのが良い味だしてるよなw

--threads=1 比較はこのスレでの話
2025/03/26(水) 17:16:48.66ID:+byiBRe6
>>53
そこまで言うなら論より証拠が欲しいな

お題スレで697が型変更(BigInt要件追加703,706)で困ってるかもしれないので助けてあげて
C++の方は難なく型変更出来た、それも(おそらくアルゴリズム内容に感知しない)別人が
https://mevius.5ch.net/test/read.cgi/tech/1691038333/697
2025/03/26(水) 18:28:10.20ID:/yA7e5F+
rustは身内よりも
外からの攻撃に耐えてる感じか
素性がいいからな
ポテンシャルが危険視されてんだろ
2025/03/26(水) 18:45:50.26ID:vEMRQKYf
>>64
あんた>>53と同類だな
>>63の実演は>>64がしても良いんだぜ
2025/03/26(水) 18:47:25.84ID:vEMRQKYf
>>63のこの部分は重要
> (おそらくアルゴリズム内容に感知しない)別人が

アルゴリズムを読み解いて書き直したら>>61の通り車輪の再発明だからな
ましてC++版をRustに書き直すのも車輪の再発明そのもの
2025/03/26(水) 19:03:18.26ID:GKti4th2
再発明禁止したらLispしか書けなくなるぞ
それはそれでいいか
2025/03/26(水) 19:05:21.95ID:fvsJG7TC
>>41,53,64
そのポテンシャル、いつ発揮するの?
2025/03/26(水) 19:06:51.25ID:fvsJG7TC
>>41,53,64
そのリファクタリング、いつやるの?
2025/03/26(水) 19:09:36.76ID:GKti4th2
Ubuntuのcoreutilの一部をRust実装にしてみる予定あるよ
ゆっくりかもだが着実に浸透していく
2025/03/26(水) 19:16:40.14ID:DX3iKWhq
このまんま過ぎる件
>>38
> Rustってlinuxコマンドの焼き直しばかりしてるイメージ
2025/03/26(水) 19:19:09.38ID:/yA7e5F+
>>71
乗っ取ってる最中だな
2025/03/26(水) 19:20:31.32ID:DX3iKWhq
やりがいあるのかね
> linuxコマンドの焼き直しばかり

やらされるようになったら愛され言語陥落
2025/03/26(水) 19:22:06.71ID:DX3iKWhq
>>72
ははw、Linuxはデバドラで軒下貸しただけのつもりだったのかな
2025/03/26(水) 19:33:31.85ID:GKti4th2
Linuxはカーネルだけだから関係ないぞ
置き換えてるのはGNUのコマンドだね
2025/03/26(水) 19:36:49.23ID:1ptNiZfL
>>63
Rustは強い静的型付け言語なのでその手で問題があれば必ずエラーとなり教えてくれる
問題児となる暗黙の型変換や(!Copyの時の)暗黙のコピーがないため優秀
エラーに従いそれらを手入れしてやるだけだ
もちろんコピーせずに済むところは参照を使い必要なところのみclone()する
アルゴリズムの変更は必要ない

ここまで一般的な話だが
BigIntに限ればさらに効率高めるためにxxx_assign系を使うように変えられるとヒープ割り当て抑制でさらに効率が上がるだろう
頑張れ
2025/03/26(水) 19:42:15.95ID:/yA7e5F+
BSDがカーネルからgcc消した時もまずはコマンド(linuxからしたらユーザーランド)からコツコツやってたな
2025/03/26(水) 19:44:59.97ID:WKIoyxAu
でかくて体力あるとこが立ち泳ぎしてる段階
79デフォルトの名無しさん
垢版 |
2025/03/27(木) 00:25:51.02ID:UR4LJQwW
車輪の再発明でもいいからOpenCVのRust版みたいなの欲しい、とは思う
巨大だから作り直しが面倒というのは目に見えてるが
2025/03/27(木) 01:13:52.13ID:Gs7UoxFU
Rustは車輪の再発明に向かないよな。というのもコスパ悪いから。すでにバグ取りして動いてるC++とかライブラリーをわざわざ書き直すなんて俺たちはしないな

どちらかと言うと真新しいライブラリーの設計するときに導入しやすいし、チームにも勧めやすい。俺たちのチームでは一からスキーマ決めて新しい機能追加していこうってなったときテストコード含めて一括で書けるからライブラリークレイトがデグレイドしなくて開発効率上がってる

0->1型開発ならRustでやりますと言っても承認降りるよ。品質保証部とかの人もリリース済み製品の変更は嫌うが、新規開発は好きにやってと言ってくるし
2025/03/27(木) 11:37:12.40ID:vU3T1Sq/
OpenCVのRust版はもうあるんじゃないの
pureRustしか勝たんのなら知らん
2025/03/27(木) 11:43:38.51ID:vU3T1Sq/
>>71 >>69
彼らがどうしてもRustに置き換えるのに拘ってる理由は
善意的に深読みするとGPL汚染からの完全脱却を目指してるとか鴨試練
2025/03/27(木) 12:03:44.42ID:oA1Vk6uc
>>81
bindingはあるけど、>>79は大元のOpenCVインストール&設定が出来なくて「pureRustだったらCargoが全部やってくれるのに!」と愚痴ってるだけと予想
python等みたいにプリコンパイルライブラリも配信パッケージに含めたら良いのにね
2025/03/27(木) 12:07:49.67ID:vU3T1Sq/
>>76
>BigIntに限ればさらに効率高めるためにxxx_assign系を使うように変えられるとヒープ割り当て抑制でさらに効率が上がるだろう
頑張れ

ほんそれ
2025/03/27(木) 12:09:12.20ID:oA1Vk6uc
これとか
https://mevius.5ch.net/test/read.cgi/tech/1698705458/799
2025/03/27(木) 12:12:23.94ID:vU3T1Sq/
>>83
なるほどね
2025/03/27(木) 12:14:17.75ID:vU3T1Sq/
>>85 の 799 に答えるなら「OpenCVは既に入っている」なんだけどね
2025/03/27(木) 12:26:21.40ID:UV4Rce1I
>>80
どの言語からどの言語に移植するのもコスパ悪いので必要ないならする意義はない
しかしそれでもRustへの移植が行われているのは実利があるからでその2大理由は
CPUメモリのリソース効率が良くなる場合
セキュリティ脆弱性を含めた安全性が良くなる場合
もちろん単純な移植ではなく再設計を伴うならばそれ自体がRustを選ぶ理由になる
89デフォルトの名無しさん
垢版 |
2025/03/27(木) 12:35:05.22ID:rSJQMcmU
そこでGoです
90デフォルトの名無しさん
垢版 |
2025/03/27(木) 12:40:56.78ID:rSJQMcmU
つまり簡単に言えばTrait制約は誤訳ってこと?
91デフォルトの名無しさん
垢版 |
2025/03/27(木) 12:49:37.81ID:OnnNAMTi
つまり、英語の単語と日本語の単語は一対一対応ではないということ
2025/03/27(木) 12:58:01.56ID:3vznYkp6
>>90
一貫することが技術用語としては正しい態度なんだよ。
自然言語的な意味で誤訳かどうかは最初から問題じゃなくて「Rust 用語では境界ということにする」という先駆者たちの合意に反して新しい語をあてるのはよくなきだよなって話。
2025/03/27(木) 13:10:41.28ID:tmx8Uwvy
バイナリサイズが大きくならない
も入れておこう。Docker imageなどでは重視される
2025/03/27(木) 13:13:21.28ID:RnRbuasr
>>93
Cと比べて小さかったら、機能がそろってないだけだな
95デフォルトの名無しさん
垢版 |
2025/03/27(木) 13:13:44.07ID:rSJQMcmU
Goはインストールすれば必ず動くから
Dockerの必要なし
繰り返す
Dockerの必要なし
2025/03/27(木) 13:15:12.84ID:3vznYkp6
>>95
docker を何だと思ってんの?
2025/03/27(木) 13:17:24.49ID:tmx8Uwvy
>>94
Rustなら同等サイズで同機能狙えるでしょ。アピールポイントやで
2025/03/27(木) 13:46:24.95ID:3vznYkp6
C の主要な関数は実質的に OS の一部みたいになってる (libc.so) からその分だけ実行ファイルは小さくなる。
工夫すれば Rust でも同等を狙うことは出来るが Rust らしさは失われるよ。
2025/03/27(木) 13:56:42.17ID:tmx8Uwvy
コードの見た目と安全性がRustのままならいいよ
libc使うと変わっちゃうか。unsafeが多そう
2025/03/27(木) 14:21:40.81ID:UV4Rce1I
>>98
>>99
もちろんRustでもlibcを使っているよ
stdでlibcがある環境ならね
no_stdでcoreなら使わない
2025/03/27(木) 14:33:43.34ID:+8xdP46W
RustでUNICODEのicu(icu4x)を使うと肥大化するで
2025/03/27(木) 16:58:03.46ID:EMjUNBdM
>>92
先駆者www
2025/03/27(木) 17:12:14.97ID:2OttSvV1
bounds問題は、もうテンプレに入れておけよ
本によって訳語が違うので注意ってことでいいでしょ
コミュニティ内の合意が、出版社に届くとは限らんのだから
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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