Rust part28

レス数が1000を超えています。これ以上書き込みはできません。
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/
2デフォルトの名無しさん
垢版 |
2025/03/24(月) 19:03:47.22ID:/lNBwDBZ
O2
3デフォルトの名無しさん
垢版 |
2025/03/24(月) 19:10:22.24ID:CX9jwcEn
Boundsを制約と訳すスレ
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問題は、もうテンプレに入れておけよ
本によって訳語が違うので注意ってことでいいでしょ
コミュニティ内の合意が、出版社に届くとは限らんのだから
2025/03/27(木) 17:34:35.49ID:7P69hYA/
境界vs制約について議論してるコミュニティあったの?
2025/03/27(木) 17:37:35.59ID:op3HGEGw
>>92
Rust信者が特にC/C++の先駆者に無礼なのを棚に上げるな
2025/03/27(木) 17:42:30.79ID:2OttSvV1
>>104
無いならなおさら。最初の本の訳者同士で決めた用語がスルーされるとか、普及期なら普通のことでしょ
明治時代ならよくあったろ
2025/03/27(木) 18:37:05.75ID:WB8UVCI6
libcクレートをフル活用すれば、CのようなRustのような変なプログラムを作れる
テキスト出力にprintf()使うとか
2025/03/27(木) 18:43:14.30ID:qPwdpjGN
福沢先生に聞いたら良い
109デフォルトの名無しさん
垢版 |
2025/03/27(木) 19:08:01.78ID:rSJQMcmU
先行者はRustで制御してるってほんとですか?
2025/03/27(木) 19:12:24.22ID:6YJukqSn
GC無いから制御も余裕でしょう
2025/03/27(木) 22:05:08.25ID:yaqaVOpU
どうしても境界を存続させたい勢力(一名)が足掻いてるな
2025/03/27(木) 22:07:59.51ID:ycBRQ3y2
どっちでもいいけどとっとと手を動かせ。

the rust book 現行版の翻訳があればそれに従う。
2025/03/27(木) 22:13:01.55ID:DQS6wNAr
まぁ言われてみれば境界ってちょっとおかしいよな
多分境界エラーとかアウトオブバウンズとか
そっちの直訳に引っ張られたんやろけど
制約がいいとも思わんけど
制約のほうが若干マシ
114デフォルトの名無しさん
垢版 |
2025/03/27(木) 22:20:16.49ID:rSJQMcmU
でも原文が境界の意味で使ってるからね
2025/03/27(木) 23:19:56.80ID:+o4VGdTp
>>114
根拠を提示しなよ
2025/03/27(木) 23:39:29.81ID:evd2Cb0n
トレイト範囲が適訳
制約はアタオカ
2025/03/28(金) 00:38:42.10ID:vUju0k4U
トレイト制限よな
118デフォルトの名無しさん
垢版 |
2025/03/28(金) 11:47:49.50ID:MGLT6E0C
>>116
範囲イイね
119デフォルトの名無しさん
垢版 |
2025/03/28(金) 11:48:49.20ID:MGLT6E0C
制約と言ってる人は意味が分かっていないのでは?
2025/03/28(金) 12:17:15.99ID:oVOs+4++
トレイトをカタカナにしてるんだから、残りもカタカナでいいんじゃないの?
2025/03/28(金) 12:43:54.75ID:T80f2PLT
トレィト博士?
122デフォルトの名無しさん
垢版 |
2025/03/28(金) 12:44:11.20ID:VPiwRdmL
トレイト製薬はCで**をダブルポインタと言うくらい恥ずかしい
123デフォルトの名無しさん
垢版 |
2025/03/28(金) 12:47:15.29ID:VPiwRdmL
>>106
石田晴久ですねわかります
2025/03/28(金) 13:28:02.98ID:v2Oxq7uo
今頃用語に難癖つけてる方が恥ずかしいわ
2025/03/28(金) 13:38:19.20ID:aE2BjRzu
>>118
トレイト視界がしっくりくる
2025/03/28(金) 13:49:09.58ID:pnjW0RJ6
用語も決まらないほど難解なので初心者お断り言語ってことでよろしく
金にもならんぞ
2025/03/28(金) 13:49:56.56ID:pnjW0RJ6
家族連れはGoでもやっときなさい
2025/03/28(金) 14:12:04.04ID:W4IssX7d
RustやC++がカバーするほとんどの利用領域でGoは役立たずで選ばれていない現実を見なよ
他の言語のスレを荒らすという人間としてしてはいけない醜い行為をせずにGoスレへ帰りなさい
今後ここでGoは禁止
どうしてもやりたい人は「Rust vs Go」スレでやりなさい
129デフォルトの名無しさん
垢版 |
2025/03/28(金) 14:21:30.27ID:WrR5QFM2
一般人向けのGolang
孤高の童貞向けRust
という住み分けで
130デフォルトの名無しさん
垢版 |
2025/03/28(金) 14:22:51.39ID:WrR5QFM2
Rustでドライバを書けるようにした時が
Linux凋落の始まりだった
と言われる未来が見える
131デフォルトの名無しさん
垢版 |
2025/03/28(金) 14:24:01.39ID:WrR5QFM2
Trait制約とか言って恥ずかしくないのかな
まるで分っていませんと
自分でいふらしてるようなもの
2025/03/28(金) 16:01:53.44ID:Hod7H+js
C並に標準化が進むと思いますか
2025/03/28(金) 16:12:38.49ID:FITPWZhb
Cはコンパイラ乱立で勝手な拡張方言で標準語を作らざるを得なかった負の側面
2025/03/28(金) 16:19:19.26ID:pnjW0RJ6
そこまで普及したらいいね。しかし人類には早すぎだからね
135デフォルトの名無しさん
垢版 |
2025/03/28(金) 21:41:02.63ID:NeeSelCN
ABIレベルで標準化されてるものはC以外に無いよね
実装はCである必要はない (C++やRustでも良い) けど、FFI用のインターフェースとしてのCの需要は無くならない
正直もう少し表現力のあるものが欲しいけど、これは10年やそこらでは変わらないよなあ
2025/03/28(金) 22:09:12.96ID:iNY6N2sw
cargo build時にlikerオプションとしてスペース込みのパス渡したいんだけど不可能?
137デフォルトの名無しさん
垢版 |
2025/03/29(土) 00:15:10.95ID:s9nxF7WE
不可能です
2025/03/29(土) 00:39:07.23ID:HRez4USp
Ferrous Systems が独自にまとめていた Rust の言語仕様が Rust プロジェクトに寄贈された。
2025/03/29(土) 13:40:51.83ID:CEPWRujK
「トレイト境界」に文句を言っているやつは先んじて翻訳公開して、「トレイト制約」を定着させないとな。
140デフォルトの名無しさん
垢版 |
2025/03/29(土) 13:42:20.41ID:eO4ALMMP
いつまでもうるさいぞ
英語で言え
2025/03/29(土) 14:49:39.18ID:M3jsTRd4
自分で crates 造ったとき(他人のでもいい)
docs.rs とかの項目って基本的に pub したものしか出ないと思うけど
lib.rs に描いてる #[cfg(test)] や #[test] の(pubじゃない) fn の一覧ってどこで観れる?
2025/03/29(土) 15:00:24.95ID:HRez4USp
>>141
cargo doc --document-private-items
2025/03/29(土) 15:28:46.36ID:CpKPYmaM
複オジはことごとく論破されたのがよほど悔しかったんだろう
2025/03/29(土) 19:54:04.74ID:dzNwKezf
トイレット境界
2025/03/29(土) 20:14:42.70ID:3fotbZye
訳を定着させる前に、
公式のRFCなり、zulipなりに「bindingでは意味が分からないconstraintにすべきだ!」というリクエストを上げて、
公式側から「せやな」って言わせるのが先じゃねーの?

失笑買いそうだけど。
2025/03/29(土) 22:48:04.91ID:lEg1YEIS
>>145
bindingは草
「境界関係者 == 何も理解してない」オジさん
2025/03/29(土) 23:00:53.39ID:JbKrf9v4
>>146
bindingを否定してバカにする意味がわからないが?
trait boundsは境界または境界線、境界エリアあたりで良いんじゃないの
議論ばかりだとRustの実装が進まないし、もう日本語にこだわらずに英語のまま行こうぜ
相互に相手が馬鹿だと思ってても時間の無駄なだけだ
2025/03/29(土) 23:05:01.36ID:+pSldpuX
しょうもないことに執着すんの自閉でしょ
2025/03/29(土) 23:05:15.30ID:JKA9Rw0q
ということで訳者の皆さん、予約語+〇〇な単語は無理にやくさんでいいです
2025/03/30(日) 00:24:42.12ID:B270st5L
>>147
trait boundsのboundとbindingが何か関係があると思ってるの?
2025/03/30(日) 09:13:11.97ID:s1RBDSG3
bindの過去分詞はboundだけどtraitboundsのboundとbindingは何の関係も無い別の単語
2025/03/30(日) 11:09:56.57ID:YOjuL2uH
境界関係者にとっては本来の単語の意味とかどうでもいいんだろ
誤訳だろうと先駆者wに従うだけだから
2025/03/30(日) 11:11:48.21ID:4y0c+ddG
まだやってんのか
制約でいいじゃん
オライリーがそうなってんだし
154デフォルトの名無しさん
垢版 |
2025/03/30(日) 11:33:03.21ID:oLFS0Pje
nightlyじゃないとカスタムアロケーターすら使えないんか・・・
Rustって思ったより未完成すぎんな
2025/03/30(日) 12:44:09.91ID:22uPyPsf
GlobalAllocは使えないの?
2025/03/30(日) 17:14:17.40ID:w2PW/L+Y
sbrkは使えないの?
2025/03/30(日) 18:18:08.22ID:qYlvw5QP
ゲーム開発したいんかな
2025/03/30(日) 18:18:10.57ID:VEZofEgk
ゲーム開発したいんかな
159デフォルトの名無しさん
垢版 |
2025/03/30(日) 20:01:37.56ID:XoWLs3od
egui
2025/03/30(日) 23:24:44.75ID:1KOgVEB/
>>156
Cでも普通はmalloc/reallocを呼んでその中で間接的にsbrkが使われる
Rustの抽象化層の下も同様にlibcのmalloc/reallocを呼んでいる
直接sbrkを呼び出す独自のアロケータを作ろうとしているのかな
2025/03/30(日) 23:43:38.72ID:0YGMHJcy
Issue出せばいいでしょ。Cで出来ることが出来ないなら考えてくれる人がいるか。自分で実装しても良し
2025/03/30(日) 23:46:35.01ID:1KOgVEB/
もちろん呼びたければRustからsbrkだろうがmmapだろうが呼び出せる
2025/03/30(日) 23:51:36.82ID:0YGMHJcy
C++みたいにRAIIな基板でお手軽アロケータ実装したいんじゃないの
2025/03/31(月) 09:09:53.86ID:NkWcWpUf
traitのFromを描いたらIntoは描かなくて良い?
Intoを勝手に造ってくれるのは一部だけ?
2025/03/31(月) 11:08:35.12ID:ToWOl/+F
>>164
全自動
Fromを実装すれば以下のコードがあるためジェネリックに逆向きのIntoが自動的に実装される

impl<T, U> Into<U> for T
where
 U: From<T>,
{
 fn into(self) -> U {
  U::from(self)
 }
}
2025/03/31(月) 12:19:01.61ID:lPDrQxU4
blanket implementation というやつ
2025/04/01(火) 11:58:58.47ID:25dpyBej
リファレンスでblanket implementationの定義を確認しようとしたら一つ下にboundの定義もあった
https://doc.rust-lang.org/reference/glossary.html#bound

この定義を踏まえて前スレを読むと境界支持者らの主張はことごとく出鱈目だな
アイツらマジで何なの?
2025/04/01(火) 12:04:22.14ID:gjHbwVK/
Bound
Bounds are constraints on a type or trait. For example, if a bound is placed on the argument a function takes, types passed to that function must abide by that constraint.
2025/04/01(火) 12:14:34.31ID:DWOYlQp7
その話もうええっちゅうねん
170デフォルトの名無しさん
垢版 |
2025/04/01(火) 12:16:55.39ID:fnMFLzbI
一度こだわり始めたら自分でも制御できないんだ
たぶん自閉症とかの障害がある
2025/04/01(火) 12:29:39.99ID:P2vsOxzW
Bounds are constraintsワロタw
制約大勝利やんw
2025/04/01(火) 12:33:32.91ID:rb2Yplrr
>>171
バカだろ
英語をよく読めよ
constraints on a type
つまりいわゆる型制約が正解
トレイト制約になるのはスーパートレイトがサブトレイトに対する時のみに限られる
したがってトレイト制約の訳は間違っている
2025/04/01(火) 12:37:50.50ID:rb2Yplrr
俺はトレイト境界よりもトレイト範囲かトレイト限界がベターと思っている派
しかしトレイト境界で定着していて意味するところは同じなのでトレイト境界で構わない
誤訳のトレイト制約だけはNG
2025/04/01(火) 12:40:33.02ID:rb2Yplrr
訳はこうなる
「トレイト境界は型(もしくはサブトレイト)に対する制約である」
2025/04/01(火) 13:58:37.31ID:PJuk1MUs
やばい、人類が滅亡する!
2025/04/01(火) 14:18:55.81ID:a32Fz+d6
トレイト世界とか宇宙でどうや
2025/04/01(火) 14:20:58.62ID:a32Fz+d6
システムプログラミング用言語であるから簡単な用語がいいんだがね
数学はやめいよ
2025/04/01(火) 14:33:15.61ID:/iF38gH/
この画像を貼る時が来たようだな
https://i.imgur.com/vGcEcQa.png
2025/04/01(火) 15:42:56.21ID:WabwVzC7
グロ中尉
2025/04/01(火) 15:44:46.09ID:WabwVzC7
Trait
A trait is a language item that is used for describing the functionalities a type must provide. It allows a type to make certain promises about its behavior.

Generic functions and generic structs can use traits to constrain, or bound, the types they accept.
2025/04/01(火) 18:32:01.55ID:35V+D+1X
旧約聖書の解釈でさえもこのスレほどバトルにはなってないと言うのに!
182デフォルトの名無しさん
垢版 |
2025/04/01(火) 19:37:06.51ID:heNo9Jy4
>>168
バカの極みやね
Bounds are constraints on a type or trait.
Bounds = constraints ではないぞ
トレイト教会がトレイトを聖約するんだぞ
2025/04/01(火) 19:51:03.44ID:MORrUUwC
Bounds are constraints(境界は制約である)
Bounds are constraints on a type or trait.(境界は、型または特性に対する制約です。)

つまり制約です
2025/04/01(火) 19:53:23.79ID:rb2Yplrr
いわゆる型制約だよ
型制約と同様にサブトレイト制約でもある
トレイト制約は誤用
2025/04/01(火) 19:59:34.21ID:MORrUUwC
DeepL翻訳
Bounds are constraints(境界は制約である)
Bounds are constraints on a type or trait.(バウンズは型や特性に対する制約である。)
2025/04/02(水) 08:01:55.21ID:6WURLMGL
だからとっとと Rust Book最新版翻訳して、好きな方の用語に統一しとけ。

最新版で「トレイト制約」になっていれば文句言わんよ。
2025/04/02(水) 12:57:04.07ID:ku7Mbk5p
境界信者の反知性主義がここまで凄まじいとは
さすがに想定外
2025/04/02(水) 13:00:58.34ID:doxXhnNc
訳者本人じゃないの
信者の素性はニート?
2025/04/02(水) 13:23:48.52ID:ETZ+3G/b
普及率100パーセント、100人中100人が守るルールか
なるほどたしかに法律なら不可能なことが言語なら可能かもしれない
2025/04/02(水) 13:31:04.44ID:k9Y5euIy
境界と描かれてる本は不良品だから法制化して全数リコール
2025/04/02(水) 14:20:43.22ID:5SS1+7gJ
そろそろ凡俗な人達による用語統一議論終わった?
2025/04/02(水) 15:11:44.14ID:hi8l+lAW
では高尚な話題どうぞ
2025/04/02(水) 15:17:23.33ID:J7kQrx92
プロジェクト名に '-' を入れるのって非推奨?
2025/04/02(水) 15:18:40.63ID:Jip2DsUV
では高尚な話題です
原語のboundがまず間違っているのでは?
2025/04/02(水) 15:25:44.81ID:hi8l+lAW
>>193
RFC430にありそうでないや
クレート名は不明瞭
2025/04/02(水) 16:15:00.32ID:kFN7dZ5N
電界磁界より電場磁場が適切である様に
トレイトはトレイト場であるべき
2025/04/02(水) 18:20:52.95ID:ETZ+3G/b
ルビを原文ママにするという高尚テクニックがあったなそういえば
解(イコライザ)とか
198デフォルトの名無しさん
垢版 |
2025/04/02(水) 19:54:18.16ID:7MGV8+qg
制約と訳すと原文の意味が失われるので技術翻訳では避けるべき
もちろん小説を訳すなら過激な意訳も可

今回の件はTrait境界が妥当でしょう
199デフォルトの名無しさん
垢版 |
2025/04/02(水) 19:56:28.56ID:7MGV8+qg
分かりやすく言ってみましょうか

Trait制約は制約である
制約は制約である

どうです?
何かが失われていませんか?

Trait境界は制約である
境界は制約である

これなら意味が分かるでしょう
2025/04/02(水) 20:00:01.91ID:Jip2DsUV
まだ訳の問題だと思っているのか
2025/04/02(水) 20:36:53.45ID:ZXMS8tUt
制約で決まったみたいだね
202デフォルトの名無しさん
垢版 |
2025/04/02(水) 21:03:24.67ID:Guu+GWGm
『ゼロから学ぶRust』という書籍だとトレイト制約だな
訳なんだから複数あることはあり得るし、それ以上でもそれ以下でもない
2025/04/02(水) 21:24:12.08ID:BbIBPK29
まぁ自分の思う訳語を広めたいんなら本を書いたり記事を書いたりすればいいのであって
このスレでレスバして決めるようなことではないよな
2025/04/02(水) 21:33:29.51ID:+3uS3HDF
トレイト制約境界にしよう
2025/04/02(水) 21:56:50.54ID:XDSWIi9m
まぁオライリーからして制約なんでしょそもそも
206デフォルトの名無しさん
垢版 |
2025/04/02(水) 22:06:25.87ID:7MGV8+qg
オライリーも質が落ちたな
2025/04/02(水) 22:25:27.67ID:xGG0i3Qy
境界信者    :「boundsに制約の意味はない!」
公式リファレンス:「boundsとは型もしくはトレイトに対する制約のことです」

境界信者    :「制約という単語は真逆の意味だから使ってはいけない」
公式リファレンス:「boundsとは型もしくはトレイトに対する制約のことです」

境界信者    :「トレイト制約派は本質を理解できていないから制約なんて間違った用語を用いてしまう」
公式リファレンス:「boundsとは型もしくはトレイトに対する制約のことです」


www
2025/04/02(水) 22:47:40.00ID:UyFxJKtn
>>199
そこだよな
少なくとも制約と訳すとおかしくなる

>>207
そこでboundsを制約と訳すと意味のわからない日本語になってしまう
「制約とは型もしくはトレイトに対する制約のことです」
2025/04/02(水) 23:07:01.46ID:eWxvA1Ub
そもそも特定の文脈においてしか「境界」と訳してはいけない単語なのにそれを知らずに誤訳をしてしまったのが間違いの始まり

その後繰り返し指摘があり何度も見直す機会があったにも関わらず自分の誤った判断を修正したくないばかりに「境界」に執着して日本のRustコミュニティの足を引っ張った罪は重い
2025/04/02(水) 23:08:32.45ID:dxnRa7Rm
boundsの訳語を制約としてはいけない理由がようやくわかった
2025/04/02(水) 23:10:03.40ID:ETZ+3G/b
X=X (XはXである) という等式は無意味だとか意味不明だとかいう批判は日本語限定じゃなくて普遍的な話題だ
2025/04/02(水) 23:13:35.48ID:UyFxJKtn
「制約とは型もしくはトレイトに対する制約のことです」
となり破綻する
だから英語でもboundsとconstraintを使い分けているのだ
2025/04/02(水) 23:22:33.90ID:ZXMS8tUt
美味しんぼ「冬のアラは最高たい!」

※ここでのアラはクエのことです
2025/04/02(水) 23:26:13.72ID:dxnRa7Rm
boundsの訳語を制約としてはいけない理由はわかったけど
boundsの訳語を何にすると良いのかな
2025/04/02(水) 23:52:15.22ID:3y9C0Jbf
境界信者:「boundsに制約の意味はない」
境界信者:「trait boundsが何かを制約することはない」
境界信者:「制約の視点で見るやつは本質を理解してない」
(公式リファレンスが指摘されると)
境界信者:「境界は制約である」

www
216デフォルトの名無しさん
垢版 |
2025/04/02(水) 23:53:09.75ID:9mU4kqKI
「トレイト制約とは、ジェネリクスとして受け入れる型をトレイトにより制限する機能です」
とでも書けばいいんじゃないの

単語の繰り返しを避けるのは文章表現の問題であって、それらが理屈の上で異なるものという意味ではない
特に英語だと、同じ単語を避けるための言い換えをよく使う
2025/04/02(水) 23:59:24.49ID:iqeRQBxg
>>216
それは本質を理解できておらず失格
trait boundsは機能ではない
traitのカヴァーする領域を示している
それが型に対する制約となる
したがってtrait boundsをトレイト制約と訳すのは理解できていない証拠
218デフォルトの名無しさん
垢版 |
2025/04/03(木) 00:01:08.33ID:8CqSbYxm
いつまで日本語喋ってんだよ
2025/04/03(木) 00:04:50.72ID:+bCmk9Ai
>>215
やめたれw
2025/04/03(木) 00:15:34.46ID:ZaOVYWDn
他のもので例えるとわかりやすい
「人間は哺乳類である」
これは確かに正しいが人間と哺乳類は意味が異なる
人間と言うべきところで哺乳類と言うのは間違い

「boundsは制約(constraint)である」
これは確かに正しいがboundsと制約(constraint)は意味が異なる
boundsと言うべきところで制約と言うのは間違い
2025/04/03(木) 00:16:55.80ID:yptlPnek
「制約は制約である」という文は数学的には全く問題ないのだ
でも工学的あるいは商業的には、役に立たない(気がする)文は過度に問題視される
2025/04/03(木) 00:20:44.56ID:ZaOVYWDn
人間は哺乳類である
哺乳類は生物である
いずれも正しいが意味が明確に異なる

boundsはconstraintである
これも同様に両者は意味が明確に異なる
だからわざわざ別の単語を用いている
両者を共に同じ「制約」と訳すのは頭が弱い人であると断言できる
2025/04/03(木) 01:01:25.93ID:SsrDHKVx
>>221
なんと進次郎構文だ
2025/04/03(木) 01:08:41.15ID:yptlPnek
>>223
詐欺にも誹謗中傷にもならない、比較的安全な構文だ
225デフォルトの名無しさん
垢版 |
2025/04/03(木) 01:17:18.29ID:fEBWzqBi
Trait制約と言ってる人は理解が足りていない
2025/04/03(木) 01:32:50.74ID:aMSce+h/
文脈を無視して対訳表だけで機械的に翻訳しようとするからゴミ翻訳ができあがる
それも指摘されたそばからやってるんだから始末に終えない
2025/04/03(木) 01:57:47.64ID:jzL1ni2p
Trait BoundsやLifetime BoundsなどでのBoundsは一般名詞ではなくて専門用語として位置付けられてるよ
だからBoundsの日本語訳も常に一貫して同一の訳を当てないといけない
そして使われ方の意味合いがconstraint (制約)とは異なるため少なくとも「制約」とは異なる訳を当てないといけないね
2025/04/03(木) 07:34:50.76ID:x1QSEzan
いつまでもアホなこと言っていないで、まずはRust Book最新版の翻訳を作って統一しとけ。

最新版で「トレイト制約」になっていれば文句言わんよ。
229デフォルトの名無しさん
垢版 |
2025/04/03(木) 07:55:55.24ID:OyObPfFB
機械翻訳みたいに一対一に当て嵌めてるのはどっちなんだか
辞書で引けば constraint = 制限、制約、圧迫、束縛 などいろいろあるよ?

英語だと
bound is a constraint that restricts the type ...
のように、ある概念を伝えるのに複数の語を使うことをよく行う
これは同じ単語の繰り返しを避ける (そういう文章を拙いと見做す) 文化があるのと、単語が誤って理解されないようにというのがある
この例なら、 bound が「飛び跳ねる」などの意味と解釈されないよう、 constraint や restrict などと言い換えることでそれが制限・制約という意味だと伝わるようにする

もちろん用語としては trait bonud が正式な名称だから、これを trait constraint や trait restriction とは呼ばない
けど、意味としてはこれらに近いということ
2025/04/03(木) 11:23:23.08ID:6oWT3dN7
>>226が批判してるのはboundを制約と訳すとBounds are constraints on a type or traitが「制約は制約である」となってしまうからtrait boundsもトレイト制約と訳すべきではないと言ってるやつのほうでしょ
2025/04/03(木) 12:16:36.08ID:v+gtq4Fg
その一文だけ、うまく訳せばいいんじゃないの?
動詞の方を簡易な日本語表現にすれば進次郎構文は避けられる
2025/04/03(木) 12:19:56.95ID:XzSm1dM6
トレイト制約という明らかに間違った別の訳をしつこく持ち出す人はRust界の混乱を狙った荒らしなんだと思うよ
なぜtrait constraintではなくtrait boundsなのかという一番本質的なRustでの概念の違いに興味を持たないことからも
2025/04/03(木) 12:20:15.17ID:v+gtq4Fg
制約を英英辞典か国語辞典で調べて考えよう
2025/04/03(木) 12:23:12.59ID:v+gtq4Fg
英語的にはboundsの方が身近な表現かもしれんな。コンストなんちゃらは共和党支持層が嫌うラテン語由来なのだっけ
2025/04/03(木) 12:33:49.45ID:qiqxc1gJ
さっさとペンキの色決めろよ
2025/04/03(木) 12:34:32.24ID:4NO2Gn5f
どちらが間違ってるかは>>207>>215を見れば一目瞭然だよな
改めて振り返ると境界知能というのはあながち冗談ではなさそう
2025/04/03(木) 12:39:11.80ID:v+gtq4Fg
トレイト緊縛で決まりな
2025/04/03(木) 12:52:17.06ID:66iDY+yi
「トレイトバウンド」よりも日本語話者の理解を助ける言葉じゃなければ意味がないんだよな
その意味では同じ誤訳でも「トレイト境界」より「トレイト束縛」のほうがベターな訳だった
2025/04/03(木) 12:55:25.10ID:v+gtq4Fg
トレイト緊縛。大勝利ってこと
2025/04/03(木) 15:48:03.91ID:+bCmk9Ai
制限でいいよ

Javaの場合は
「Bounded Type Parameters」
https://docs.oracle.com/javase/tutorial/java/generics/bounded.html
google翻訳では「制限付き型パラメータ」
凄くわかりやすいよね
制約よりも境界よりもずっとわかりやすいよね
241デフォルトの名無しさん
垢版 |
2025/04/03(木) 17:10:42.17ID:fy3xRWQw
次スレは
Rust 29constraints
だね
2025/04/03(木) 18:04:14.96ID:g1vkomnK
そういう変なことしだすと隔離失敗するからやめてね
2025/04/03(木) 18:08:12.59ID:LgxNjrJf
Javaの日本語リファレンス終わったのか。Java終了だな
2025/04/03(木) 18:23:21.08ID:CH3VtQpy
>>240
俺の環境では
google翻訳は境界付き型パラメータ
DeepLは制約付き型パラメータだな

ただJavaも>>227みたいにboundには一貫して「境界」という訳を当てないといけない方針でやってたから関連語の訳がどうしようもなく悲惨なものになってたからね
同じ轍を踏んではいけない
2025/04/03(木) 18:30:06.80ID:N2gRzLe2
トレイト制約はトンデモ勘違いだから絶対避けるべきだけど
トレイト境界やトレイト範囲やトレイト領域やトレイト上界やトレイト上限やトレイト限界などの意味するところが合ってる用語ならばどの用語に統一されても構わないよ
もちろんトレイト境界のままでもOK
2025/04/03(木) 18:38:58.21ID:e7eRGvBW
Bound単体を「型制約」と訳したいならTrait Boundsは「トレイトによる型制約」とでも訳せばいいだろ
重要なのは形式よりも意味のほうなんだから
2025/04/03(木) 18:48:27.65ID:6vk0Qg+y
>>236
その2つ面白すぎるんですけど
特に「境界は制約である」がジワる
2025/04/03(木) 19:00:17.94ID:PM+GnFWY
>>246
普通に「トレイト境界は型やサブトレイトに対する制約である」でええやん
2025/04/03(木) 19:07:19.95ID:+bCmk9Ai
サブトレイトって言い続けてる奴一人な件w
2025/04/03(木) 19:13:35.15ID:PM+GnFWY
どういうこと?
みんな使っていてRustのどの記事を見てもスーパートレイトとサブトレイトと訳されてるけど別の訳があるの?
2025/04/03(木) 19:32:15.98ID:yptlPnek
形式主義って、完全情報ゲームなんだよな
オリジナルの原文にない情報が後知恵で追加されたらそれは完全情報とは言えないよね
2025/04/03(木) 19:35:30.32ID:SaeLc9s2
公式ではなくても定着していてカジュアルな場面では当たり前のように使われる用語ってあるからなぁ。
C++ で構造体とかアップキャストとかメソッドとか言ってることは結構あるでしょ。
253デフォルトの名無しさん
垢版 |
2025/04/03(木) 20:32:04.51ID:XfeSNHGY
ほかに話すことはいくらでもあるのに永遠にboundの訳語だけを言い争い続けるこのスレ、終わってるよ
ていうか別スレ立ててそっちでやれや
254デフォルトの名無しさん
垢版 |
2025/04/03(木) 21:30:43.37ID:fy3xRWQw
structのdrop定義したとき
元のstructのmemberに別のstrustがあったら
どっちのdropが先に呼ばれる?
あと元のstructのmemberに自分のstructがあったら?
2025/04/03(木) 21:31:56.02ID:g1vkomnK
>>253
ほかに話すことがないからこうなってるんだって
2025/04/03(木) 21:45:12.33ID:EBCyuD6U
>>254
必ず宣言順にdropされる
つまり入れ子ならば深さ優先
もしdropの順序を変えたいならばManuallyDropを使って自分の好きな順にdropできる
257デフォルトの名無しさん
垢版 |
2025/04/03(木) 21:58:57.73ID:9igU0B0K
>>254
最初に構造体自身の drop が呼ばれて、その後に各フィールドの drop が宣言順に呼ばれる
例えば
struct Foo { bar: Bar, baz: Baz }
なら、最初に Foo::drop が呼ばれて、その後に Bar::drop, Baz::drop の順に呼ばれる

「元のstructのmemberに自分のstructがあったら」はちょっと意図が汲み取れなかった
Rcで自身への参照を子が持つようなケースであれば、drop が呼ばれずメモリリークする
(親がdropしないと子がdropしない、子がdropしないと親がdropしない、という関係になるため)
2025/04/03(木) 22:12:13.45ID:lMDfDaJq
>>248
いやいや「境界」どっから出てきたんだよw
公式が言ってるようにboundsに境界なんて意味はない
関係ない変な単語を持ってくるくらいなら訳さないほうが遥かにいいだろ
2025/04/03(木) 22:12:45.42ID:1N6AvgYL
weekじゃなくてweak
2025/04/03(木) 22:20:03.44ID:a28tTbld
>>258
境界信者:「境界は制約である」
境界信者:「ゆえにboundsは境界である」
境界信者:「ゆえにトレイト境界が正しい」
2025/04/03(木) 22:44:11.30ID:lMDfDaJq
>>260
仮に「境界は制約である」が正しいとしても「制約は境界である」とは限らないので「boundsは境界である」は成り立たないぞ
2025/04/03(木) 22:54:37.51ID:jBjTQcyj
Rustの公式リファレンスを見ればわかるけど
boundsはそのトレイトやライフタイムなどが取り得る範囲を意味している
それがジェネリックな型に対しては制約となるという扱い
例えばCopy bounds等の表現があるがCopyという制約があるわけではない
むしろCopyという特性を持つ
結果的にジェネリックな型に対しては制約となるだけである
したがってトレイト制約というねじ曲がった用語はふさわしくない
2025/04/03(木) 23:11:56.25ID:+bCmk9Ai
彼はたった一人で>>262のような主張を繰り返すのである
逆走老人が「みんなが逆走してる」と主張するかのように
2025/04/03(木) 23:58:29.10ID:nPA8ABXZ
トレイト境界は型パラメータに対してだけではなくトレイトオブジェクトでもdyn TraitA + TraitB + TraitCと指定するけど
機能を列挙していく感じで使うから制約とは真逆のイメージだわ
2025/04/04(金) 00:08:35.54ID:OzC2/LQ/
拡張ってこと
266デフォルトの名無しさん
垢版 |
2025/04/04(金) 00:13:55.18ID:vNtVyPjO
>>264
それは trait object であって bound とは呼ばないんじゃないか?
trait Foo オブジェクト, trait Foo+Baz オブジェクトといった感じ
Rust by example だとそもそも bound の説明はジェネリクスの章の中にある
(14. Generics > 14.4. Bounds という構成。ちなみに trait object は 16. Traits の中)

Boundはどちらかというとジェネリクスの型を制限する用途の方を指すと思う
2025/04/04(金) 00:20:38.53ID:OoQgsVdq
昔は実行時に検査していたことをコンパイル時に検査できるという見方はものすごく理解を助ける
だから検査や制約を強調していい
もしバランスを崩したくないと思ってるなら、単一の言語にこだわること自体がバランス悪いから
Pythonでも使ってみればいい
2025/04/04(金) 00:25:07.15ID:OzC2/LQ/
rubyの方が型無いよ
2025/04/04(金) 00:40:23.72ID:E6ySPclo
>>266
一応それもBoundの範疇みたいだけどね
https://doc.rust-lang.org/reference/types/trait-object.html

まあどっちにしろどちらの視点で見るかの話はジェネリクスとなんら変わりない
Boundの公式定義にある通り
2025/04/04(金) 00:44:33.84ID:E6ySPclo
いやジェネリクスのように好き勝手に追加していけないという制約があるから
トレイトオブジェクトのほうが「機能を列挙していく」という視点にはより無理があるかもな
2025/04/04(金) 00:45:23.73ID:uFTmKMED
そういえば最近use boundとか来てたんだっけ
2025/04/04(金) 00:54:43.92ID:r+OUZNte
>>266
そこに明記されてるね

Trait objects are written as the keyword dyn followed by a set of trait bounds,
トレイトオブジェクトはキーワードdynに続くトレイト境界のセットとして記述される
but with the following restrictions on the trait bounds.
ただしトレイト境界に以下の制限がある
(以下略)
273デフォルトの名無しさん
垢版 |
2025/04/04(金) 10:34:51.57ID:8rdTlYhI
こんな分かりきったことで議論する意味は何なのか
制約ではまるっきり意味が違う
2025/04/04(金) 11:01:51.62ID:OoQgsVdq
トレイト制約(バウンズ)の集合の制限

これ、「ポインタのポインタのポインタ」をいちいちtypedefするやつと同じパターンだな
だから単語の重複が許せないんだな
2025/04/04(金) 11:17:35.72ID:22bgX6/4
AsRefやAsMutはtraitになってるのに
sliceのAsPtrやAsMutPtrがtraitになっていないのはなぜ?
2025/04/04(金) 11:54:32.49ID:Gh2v3Rhy
アホなこと言っていないで、とっととRust Book最新版の翻訳を作って統一しとけ。

最新版で「トレイト制約」にすりゃいいだろ。
2025/04/04(金) 12:57:24.90ID:XamlPiqQ
>>272
その公式の記述ではっきりわかった
trait bounds 自体は制約ではなくて境界なんだな
トレイト境界がジェネリックな型パラメータTに適用される時に「型Tの制約」になるだけだ
278デフォルトの名無しさん
垢版 |
2025/04/04(金) 14:23:46.45ID:8rdTlYhI
>>277
そうなんだけど
なぜか知らんけど
クラスとオブジェクトは同じみたいなことを言い出す輩が居てややこしい
2025/04/04(金) 14:43:55.26ID:eR4DolQd
>>277
これブックマークしとけばええんかの
280デフォルトの名無しさん
垢版 |
2025/04/04(金) 15:06:26.98ID:8rdTlYhI
RustやるにもC++から始めたほうが良いんじゃないかな
なぜそうなってるのか理解が進むと思う
2025/04/04(金) 15:10:43.72ID:eR4DolQd
CやらないとC++分からないからCからオススメ
2025/04/04(金) 16:14:54.75ID:yJNeJM2G
>>277
“Bounds are constraints on a type or trait.”のbe動詞も、
「AはBである」と訳すものではなく、
「AはBになる(Bの特性を持つ)」で、どっちかといえばhasに近い意味合いになるんだよなぁって思ってる。
2025/04/04(金) 19:30:24.62ID:SRZxkDOr
まだトイレ制限やってんのか
2025/04/04(金) 22:39:40.99ID:optItjd0
>>270
トレイトオブジェクトで自動トレイト以外のトレイト境界を複数用いる場合は合成になるね
いわゆるメソッド無し「{}」宣言

// トレイト境界の合成
trait TraitAB: TraitA + TraitB {}

// 合成トレイト境界の実装 (使う型の分)
impl TraitAB for T1 {}
impl TraitAB for T2 {}

// あとは同じ
let x: &dyn TraitAB = &t1;
// または
let y: Box<dyn TraitAB> = Box::new(t2);
2025/04/04(金) 22:42:52.75ID:mQ0/kONA
トイレット境界は難しいよ。いつもスリッパ履き替えるの忘れる
2025/04/04(金) 22:52:47.44ID:saOSS87s
複オジの苦し紛れのクソみたいな言い訳自演も秒で否決されてて草
さすがにみんな複オジ耐性を身につけたか
2025/04/04(金) 23:41:57.03ID:XamlPiqQ
>>284
トレイト境界は制約ではなく使う機能の列挙という理解でいいんだよな
2025/04/04(金) 23:56:38.69ID:Y4yVUbBr
>>282
バカすぎだろw
そんな意味になるわけないじゃん
中学生でも絶対やらない間違いだぞ
2025/04/05(土) 00:41:02.94ID:fzOXtcwa
子供扱いさせてから、大人も子供もどっちもどっちだと洗脳するんだよ
そうやって、自分は大人と同じだと思ってる子供を量産する
2025/04/05(土) 01:02:47.81ID:VKg4cIYU
>>288
>中学生でも絶対やらない間違いだぞ
大の大人が中学生でも絶対やらない間違いをするから「境界」などというトンデモ訳が出てくるわけで
2025/04/05(土) 01:15:11.42ID:a8YBrxtn
>>282
そんなバカげた見方をしなくても英語でも日本語でも同じで修飾語がある時にそれ省けば同等を意味しない
例えば
「彼はわたしにとって味方である」
「彼はあなたにとって敵である」
これは両立しえて対象を抜きに彼自体は味方でも敵でもない

「boundsは型に対する制約である」
これもbounds自体は制約でも何でもない
あくまでも型に対しては制約となるだけだ
それを理解できない人がbounds自体を制約と訳してしまうと、
他の至る所で日本語訳が破綻してしまう例が既にいくつも挙げられている通りだ
2025/04/05(土) 02:11:02.04ID:sg9Ur0Fb
>>284
論理和"+"はベン図で言えばorだけどその複数のトレイトが適用される条件はandだからやっぱり境界じゃないな

traitA * traitBならandだったのに残念
2025/04/05(土) 04:31:02.03ID:UUup59E1
>>292
トレイト境界は必要となる機能を足していくイメージで使うから+がしっくり来るよ
2025/04/05(土) 09:21:38.69ID:7yyM+PYz
+はor
*はand

これが基本

traitA * traitB は traitAが実装されている=1 traitBが実装されている=1 と言う時だけ 1(true)
だからこれが正しい

トレイト境界だと表現が矛盾している
+だと traitAもしくはtraitBでtrueなのでやはりベン図的な境界ではありえない
2025/04/05(土) 09:25:04.62ID:7yyM+PYz
トレイト制約なら+がしっくりくる
条件がtraitAに加えてtraitBとなるので常識的だと思う
2025/04/05(土) 09:31:25.64ID:UUup59E1
>>295
実際にプログラミングすればわかるけど
必要となる機能を加えていくんだよ
制約なんて視点で考えないよ
2025/04/05(土) 09:33:43.02ID:7yyM+PYz
トレイト境界なんて変な言葉使ってるけど実際は集合論的な境界とはかけ離れている
2025/04/05(土) 09:37:39.22ID:UUup59E1
型パラメータTを使う場合でも同じ
例えば型Tをデバッグ表示したくなったら
T: Trait1+ Trait2 既存のここへ
デバッグ機能も使えるように足す
T: Trait1+ Trait2 + Debug
制約なんて発想はどこにもないよ
2025/04/05(土) 09:59:12.29ID:7yyM+PYz
trait境界がベン図的であると言うのはただの勘違いである
2025/04/05(土) 10:05:02.72ID:7yyM+PYz
A or Bはtypsscriptのユニオン型でそっちは |でつなげている
2025/04/05(土) 11:05:30.39ID:FmPOHx1d
「境界」と書かれてる本は読むに値しない
という事だけはよくわかった
2025/04/05(土) 11:17:04.10ID:in25MGhG
可能なら英語の原文を読む方がいいのは間違いない
bound⇔制約みたいな謎対訳を意識しなくて済む
洋書は高いけどね
2025/04/05(土) 11:17:57.15ID:r2N1m9n9
>>301
わかりやすいリトマス試験紙だよね
2025/04/05(土) 11:19:18.81ID:/EY1L6NJ
>>301
境界はどうでもいいが
trait boundsの日本語訳をトレイト制約としてしまうとRust公式リファレンスのあちこちで困ったことになることが今回のこのスレでの調査で判明した
少なくともトレイト制約と訳してはいけないことが明白になった
2025/04/05(土) 11:58:20.02ID:fzOXtcwa
たとえばcobolをjavaに直訳できない問題って

新しい要素を追加した方に原因があるのか?
306デフォルトの名無しさん
垢版 |
2025/04/05(土) 13:46:49.67ID:Ur9Vw4Z1
>>291
ほんそれ

>>292
and にしたいなら TraitA & TraitB だろ常考
&'a TraitB と区別付かなくなるから避けたとかいうのは無しな
2025/04/05(土) 13:48:18.46ID:Ur9Vw4Z1
>>294 == >>292
id変えて御苦労さん
2025/04/05(土) 14:22:39.14ID:fzOXtcwa
>>291
子供医者は一部の患者にとっては敵である??

馬鹿みたいな思想だないつも
2025/04/05(土) 14:29:32.69ID:7yyM+PYz
>>307
日付変わったらid変わるんだよ…馬鹿なのかなあ?
2025/04/05(土) 14:30:52.53ID:7yyM+PYz
と思ったけど同じ日だな
5chがおかしいんだろ
2025/04/05(土) 21:54:28.18ID:kbjS/M49
>>302
洋書のほうが断然安いだろ
2025/04/05(土) 22:12:55.39ID:+mdv7JT9
ものによるよ
具体的に比較せねば
2025/04/05(土) 22:23:17.94ID:JwBnCnrW
日本で洋書を買うなら輸入品だもの。
円安の情勢で高くなるのは仕方ないよ。
314デフォルトの名無しさん
垢版 |
2025/04/05(土) 22:38:25.51ID:gU7LWJwv
TraitやTrait boundsが制約だと思ったんだろな
特性や特性の範囲を示しているだけで
必ずしも制限に使われると限らないのだが
2025/04/05(土) 22:41:49.78ID:+mdv7JT9
オライリーならサブスクで洋書PDF読み放題があったような
316デフォルトの名無しさん
垢版 |
2025/04/05(土) 22:54:56.00ID:UT8OnkGd
Lifetime boundは?
2025/04/05(土) 23:36:18.07ID:yh9xzdzz
>>284
>>let x: &dyn TraitAB = &t1;

その合成したトレイト境界によるトレイトオブジェクトを、
一昨日リリースのRust 1.86からこのようにスーパートレイトへアップキャストできるようになったという理解でいいんだよな。
let xa: &dyn TraitA = x;
let xb: &dyn TraitB = x;

結局この+によるトレイト境界の合成も、制約したと考えるより、両方の特性(機能)を持たせたと考える方が理に適ってるよな

>>// トレイト境界の合成
>>trait TraitAB: TraitA + TraitB {}
2025/04/06(日) 01:02:23.74ID:upKL4j/Q
境界の合成ならorでしょう?なんでandになるんだよ
2025/04/06(日) 01:05:52.29ID:1+4HzuoN
その特性を持つか持たないか
両方の特性を持つようになるから'+'がふさわしい
2025/04/06(日) 01:12:53.80ID:upKL4j/Q
質問
トレイト境界と言う言葉があまりしっくりきません

chapGPTの答え

「トレイト境界(trait bound)」っていう言葉、ちょっとピンとこないというのは自然な感覚です。
むしろ「型に課す条件」とか「型パラメータの制約」というようなイメージの方が、Rustの使い方としてもしっくりくるかもしれませんね。


「trait bound」という言葉は英語の「bound(拘束、制約、限界)」の訳で、おそらく「型に制約を課す」という意味から来ています。
ただ、日本語で「境界」というと、物理的な境目やある範囲をイメージしやすく、それが逆にわかりづらくしているかもしれません。

しっくりくる言い換え候補いくつか
表現 ニュアンス

トレイト条件 Tに必要な条件、論理的に「T ∈ Debugを満たす型の集合」

トレイト制約 Tにかかる制限。構文的にも意味的にも合ってる

トレイト必須要件 必須で満たさなければならない要件

実装条件 implが意味する「Tは〜を実装していないといけない」

実装制限 実装可能な範囲を制限する
2025/04/06(日) 01:15:32.61ID:upKL4j/Q
トレイト境界は誤訳で言いたいならトレイトバウンドでいい
これがFA
2025/04/06(日) 01:23:12.69ID:upKL4j/Q
欧米でのboundと日本の境界は必ずしも同じ意味ではない
そもそもの単語の概念が違う

boundの制約部分の意味合いを翻訳者が取れずにboundの一番目に来る訳語の境界を当ててしまった
これが結論
2025/04/06(日) 02:18:12.24ID:n88cNHgB
うっかりミスをしただけなら喧嘩にはならんがな
原作を改変することは許されない的なルールを守る意志があるだろ
2025/04/06(日) 03:03:56.95ID:6x/xr+p4
安いな
https://www.rustinaction.com
https://www.manning.com/books/rust-in-action
高いな
https://www.ama損.co.jp/dp/1617294551
輸入だとしてもなんでこんな値段になるんだ
2025/04/06(日) 08:58:25.67ID:2WEREMbe
つまらん言い争いする前にとっとと Rust Book最新版翻訳して、好きな方の用語に統一しとけ。

最新版の翻訳も無いのに日本語和訳とかゴミみたいな話しても無駄だろ。
2025/04/06(日) 14:12:55.00ID:n88cNHgB
無駄は利益でも損失でもない
つまり有益でも有害でもない
2025/04/06(日) 14:48:28.98ID:MSyTNjpB
ゴミ翻訳が何万人ものユーザーに悪影響を与えてるんだから単なる無駄どころかガチ害悪
2025/04/06(日) 18:52:05.55ID:n88cNHgB
でも、あなたの影響は0だった
2025/04/06(日) 21:35:24.97ID:POwi82Q3
>>320
すげーまともだな
330デフォルトの名無しさん
垢版 |
2025/04/07(月) 17:37:54.88ID:Hr3jPqkP
Trait制約では意味が全く違う
2025/04/07(月) 17:41:13.06ID:Ww5VQZEx
Javaのインターフェイス程度の代物にそんあ小難しい概念いらんけどな
2025/04/07(月) 17:42:09.21ID:SejWwHdL
「トレイト制約」が正しい!
2025/04/07(月) 18:06:19.68ID:tzb+Pi1x
Trait boundsが正解
無理に日本語にすんな
2025/04/07(月) 18:31:33.33ID:H5zq3RB8
>>330
どう意味が違うの?
2025/04/07(月) 22:20:40.10ID:dUVt/NLM
ジェネリクスは小難しいから普及が遅かった
Javaのインターフェースはそれ自体はジェネリクス普及前からあった
Javaのインターフェースはそれ自体はジェネリクス引数の制約ではない

ここで重要なのは、主語を変えても同じことが言えるなどといった保証はないってことだ
2025/04/07(月) 23:52:56.67ID:RGwsG0mw
ジェネリクスはAda発祥やで
2025/04/08(火) 00:14:35.10ID:2Ld3Figm
CLUやろ
2025/04/08(火) 10:44:56.88ID:fi2+odQD
Java界隈も「境界」という訳の異常性に気付いて徐々に避けるようになってる
339デフォルトの名無しさん
垢版 |
2025/04/08(火) 14:07:35.74ID:hfo/+BmV
制約とか言ってる低能
2025/04/08(火) 14:17:58.70ID:TmSh0jTk
traitも日本語訳すべきだろ
大陸中国語では「特質」と訳してるらしい
ただし漢字は簡体字で
2025/04/08(火) 14:31:57.06ID:dbg0dckm
特質系とか漫画の読みすぎかよ
漫画の語彙を訳に使うのあるかもしれん
無量空所
2025/04/08(火) 15:12:55.89ID:shzc/EQE
boundが”trait bounds”のような名詞のでしか出てこないのであれば”トレイトバウンド”で十分なんだが動詞としてもその過去分詞が形容詞としても使われるから意味の通じる日本語にする必要はあるだろうな
2025/04/08(火) 15:13:35.03ID:BOqdaM8X
君らの議論見てると日本語と英語の意味が完全には一致してないからもめてるんだろ
適切な言葉が日本語にないのなら原語そのまま使えよ
どうしても日本語にしたけりゃ新語つくっちゃえよ、トレイト制界とかトレイト境約とか
2025/04/08(火) 15:25:59.18ID:bT7tyFQB
完全には一致してないではなくて
境界は完全に間違ってるからな
2025/04/08(火) 15:32:05.13ID:dbg0dckm
ワッチョイつけようぜ
2025/04/08(火) 15:32:48.21ID:y+3ouVjs
10人中8〜9人がおおよその意味を想像できるような新語ならともかく想像できないような新語なら訳さないほうがよっぽどマシ
2025/04/08(火) 15:37:41.98ID:0DGOjuLN
トレイト境界(trait bounds)のboundsは境界・領域・範囲などどれでもいいんだけど、
境界はもちろん二次的な意味の二者間の意味ではなく単独の意味の方で、
どうしても二者間に固執したい人なら内と外の二者間の境界と考えて。
2025/04/08(火) 15:47:16.64ID:Spaoq+uw
なんでもいいというのが一番困る、という寓話があるが、その寓話には名前がない
2025/04/08(火) 15:59:24.30ID:v0gybFAh
題名も何でもいいからか
2025/04/08(火) 16:48:31.19ID:zjl9w56y
道?
2025/04/08(火) 17:08:27.56ID:lq55yQzg
トレイト執着
2025/04/08(火) 17:19:56.75ID:dbg0dckm
粘着やな
2025/04/08(火) 17:56:08.61ID:2okZDSQp
>>254-257
現象的にメンバの方のdropが先に呼ばれて
最後に自分のdropが呼ばれているようなのですが
これって仕様?
2025/04/08(火) 20:49:57.66ID:0DGOjuLN
>>353
Drop::drop()が呼ばれるのは親が先で子が後になるけど、
実際のptr::drop_in_place()が自動で呼ばれるのはもちろん子の処理を終えた後に親が後になる。
そのため安全に全自動で任せつつ、子の処理の前に親がやっておきたいdrop以外の前処理だけを親のDrop::drop()に書くことができる。
複数の子どもの処理の順序や自動の有無も含めて制御したい時はManuallyDropをつかう。
2025/04/08(火) 21:53:23.33ID:Spaoq+uw
The impl Trait syntax ... is actually syntax sugar for a longer form known as a trait bound

構文糖じゃない方のトレイト
実際のトレイト
356デフォルトの名無しさん
垢版 |
2025/04/09(水) 12:19:06.96ID:KZk4pTLo
トレイト制約などといってる輩は全く理解できていないと自白してるようなもの
2025/04/09(水) 15:01:13.51ID:SwtFlD5e
糖質境界
2025/04/09(水) 18:04:17.50ID:3/XtwXUj
もうちょっと正義感が強かったら
べつにカジノ経営者が自白しなくても、カジノは特殊詐欺とほぼ同じというのは確定事項として扱えるようになる
2025/04/09(水) 18:54:36.47ID:NcLuCgfe
三店制約
2025/04/09(水) 18:55:51.86ID:PAP9iIr7
パチ屋
2025/04/09(水) 19:16:50.12ID:8s5+aT/q
インターフェース統一協会
2025/04/09(水) 19:33:46.61ID:a0uoZNgJ
言語仕様らしきものに忠誠心を示すのはわかるけど
誤訳された用語にすら全面的に支持して従うってどういうことなの?
2025/04/09(水) 19:34:49.38ID:PAP9iIr7
開発してない人なんでしょう
評論家
2025/04/09(水) 19:44:27.38ID:eKbqXV9X
仮に誤訳だとしても理解を妨げるほど害悪あるほどじゃない
通じれば用は足りてる
他分野でもそんなのはいくらでもある
ひっくり返さないと気がすまないのは幼稚なだけ
2025/04/09(水) 19:59:28.62ID:a0uoZNgJ
拘るほうが幼稚

普及を目指すなら誰にでも理解しやすい用語を選ぶのが唯一の正義
2025/04/09(水) 20:09:07.64ID:PAP9iIr7
普及目指してないよ
分かるやつだけ使え
一般人はPHPでも使っとき
2025/04/09(水) 20:15:02.42ID:a0uoZNgJ
前はトレイト境界やライフタイム境界でググったらもしかしてトレイト協会とかもしかしてライフタイム協会って出てた
368デフォルトの名無しさん
垢版 |
2025/04/09(水) 20:29:27.44ID:KZk4pTLo
>>364
Trait境界は正確な訳と言って良いと思います
369デフォルトの名無しさん
垢版 |
2025/04/09(水) 20:33:30.34ID:KZk4pTLo
Trait制約は、引数を関数というような感じですね
全く意味が違います
2025/04/09(水) 20:35:28.68ID:PAP9iIr7
どうでもいいーー
2025/04/09(水) 20:41:17.16ID:KXz/CDBQ
Rustが嫌いだってblogがバズってるらしい
たぶん訳語がおかしいせいだろうな
しらんけど
2025/04/09(水) 20:43:27.68ID:PAP9iIr7
あれはCやったことないからRustの恩恵がわからないちゃんだろ
GC言語だけ使っておけ案件
2025/04/09(水) 21:32:51.79ID:a0uoZNgJ
GC言語でいい人はRust使うメリットはないからな
2025/04/09(水) 21:42:42.42ID:OL648qCg
>>371
見たけどあまりに初心者で慣れてなくて知らなかった話が話が大半だった
結局どの言語でも同じで慣れたら何ら問題ない話ばかりだった

コンパイルが多少遅いのは仕方ないが
初心者コピペで以下の状況だったのが笑えた

>>[profile.release]
>>lto = true
>>codegen-units = 1
>>opt-level = 3
>>panic = "abort"
>>strip = true

>この設定ですが意味を理解して書かれてます?
>LTOはリンク時最適化なので有効にすればビルドは遅くなります。
>codegen-units は最大何並列でコード生成するかなので1にすれば当然ビルドは遅くなります。
2025/04/09(水) 21:45:24.08ID:a0uoZNgJ
初心者相手に俺つえーしてる時点でカッコ悪いとしか…
みじめなのはどっちなんだろう
2025/04/09(水) 21:49:28.76ID:OL648qCg
>>373
GCの有無なんて慣れの問題
慣れれば設計やコーティングで躓くような部分ではない
無理なことはGC言語で書かれたものを再設計することなく移植しようとすることくらいだ
2025/04/09(水) 21:54:31.24ID:EdteNgmQ
人によるから分からんぞ。PHPのスレ行って聞いてきな
2025/04/09(水) 21:57:14.91ID:KXz/CDBQ
PHPerはあまりにユーザー層が違うので、同じ言葉で語り合うことはできない
2025/04/09(水) 22:02:44.82ID:a0uoZNgJ
大多数のGCあり言語だとほぼ意識しなくていいノイズみたいなところをC,C++やRustは意識しないといけない
2025/04/09(水) 22:03:09.70ID:ad8YJVBj
だろ。Rustに慣れる前に使い出せない人種が沢山いるということさ
普及は諦めよう
2025/04/09(水) 22:05:24.58ID:a0uoZNgJ
ちゃんとメリットをしめして脱落者を出さなければプログラマの一般教養的なところまで
押し上げることは出来ると思うけどねえ

今は動機付けが薄い
学習のハードルが高い
2025/04/09(水) 22:08:21.15ID:3/XtwXUj
自動車の作り方も普及させる気ないじゃん
現に、自力で自動車作れなくなった人達が反乱を起こしている
2025/04/09(水) 22:10:28.34ID:a0uoZNgJ
自分は最初伝統的なenumの比較すらできなくて困った覚えがある
わかればわかったになるけど他の人がすんなりとそのことについて知識を得て使えるのかどうかと言えば
使えないで脱落するんだろうなと
2025/04/09(水) 22:10:51.20ID:ad8YJVBj
作り方は分かるけど給料が高いから作っても売れないという問題だったような
2025/04/09(水) 22:12:01.49ID:ZMWXeYiA
>>379
その違いは慣れてしまえば大した問題ではない
慣れて対応できるようになるだけでGC言語のデメリットから解放される
特にRustなら扱いを間違えていればコンパイラが指摘してくれるので困ることもない
2025/04/09(水) 22:14:58.46ID:a0uoZNgJ
扉が開かない限り入ってこないで回れ右して帰っていくよ
そういう人が悪いのではない
違うなら違うと言う説明を気づかせないとダメかな

知ってる人は知ってるだけなのでそれが偉いと言う話ではない
2025/04/09(水) 22:15:05.70ID:ZMWXeYiA
>>380
Rustごときを使えないようならプログラマとしてはかなり能力が低い人か頭が硬くなってしまった人のどちらか
2025/04/09(水) 22:16:00.82ID:13Xj1tSa
名前忘れたけど、構文がRustでGC付きの言語が発表されてたよね
2025/04/09(水) 22:16:14.95ID:a0uoZNgJ
もう一度言うけど
知ってる人は知ってるだけなのでそれが偉いと言う話ではない
2025/04/09(水) 22:18:40.23ID:ZMWXeYiA
>>386
基本的なことを知ってるか知ってないかはどの言語でも慣れの問題だからどうでもいい話
一定の能力差さえあればRustは難しくない
もし難しいと感じた人は能力が低いか頭が硬くなってる
2025/04/09(水) 22:20:09.93ID:a0uoZNgJ
その硬くなっていない頭でtsもjsもpythonも日常的に使えているのかなあ???
2025/04/09(水) 22:25:09.60ID:ad8YJVBj
>>387
98%がそっち側だよ
こんな所で話せる人は先鋭的な2%
393デフォルトの名無しさん
垢版 |
2025/04/09(水) 22:27:48.21ID:czqUXFNF
GCって多少のパフォーマンスと引き換えにC/C++の面倒を大きく減らすものだからな
Javaが流行った理由もそれだし

Rustなら借用チェッカが安全性の問題をうまく解決するといっても、GCに慣れてる人からすれば、他の言語ではそもそも問題にならないようなものを課題として取り上げて解いてるだけに思えるかもしれない
C/C++の速度が必要な分野ならRustは強力だけど、それ以外の分野だと学習コストや面倒くささが上回ると思うのもまあわかる
2025/04/09(水) 22:31:27.91ID:ad8YJVBj
ワイの周りにもRustは勧められないんよな。趣味でやるベエ
395デフォルトの名無しさん
垢版 |
2025/04/09(水) 22:33:41.47ID:czqUXFNF
>>388
Gleam?
あれはRustの構文 + Erlangなので、「GCあり」よりも「並行処理に強い」の方をウリにする言語だと思う
2025/04/09(水) 22:51:34.96ID:ad8YJVBj
Beam VM上のか
2025/04/09(水) 22:57:26.37ID:vrO9vcWo
>>364
通じてないでしょ
境界って何?
何と何と境なの?
2025/04/09(水) 23:23:57.52ID:huhl+UxL
>>397
「境界」は辞書を引くとわかるけど
「何かと何かの境界」という二者間の意味二次的であって
「対象となる範囲の境界」が原義なんだよ

これは古語辞典だとよりはっきりして
境界は「自分の認識の及ぶ対象・範囲」が原義で
更に「自分の能力の及ぶ範囲」という意味が加わってくる

トレイト境界はもちろん二者間ではなく原義の方
2025/04/09(水) 23:26:38.18ID:p9TCxcQX
古語辞典?w
2025/04/09(水) 23:32:36.15ID:3/XtwXUj
意味が全然分からないレベルになるともう実質的に名前がないのと同じ
名前がないものは世の中にいくらでもある
2025/04/09(水) 23:32:43.95ID:huhl+UxL
これは一般生活で使われる境界も同じ例えば「土地の境界」といえば(自分もしくは対象の)土地の境界であり
特定の誰々さんの土地との境界ではない
「市の境界」も同じでその市の範囲を意味していてどこか特定の市町村との境界ではない
トレイト境界も同じでそのトレイトの効力やカバーする範囲や領域
2025/04/09(水) 23:35:09.82ID:p9TCxcQX
なんか自他境界なさそう
2025/04/09(水) 23:36:43.93ID:D9djoT/y
領域展開
2025/04/10(木) 01:14:23.84ID:BQ7YpPB/
>>398
>境界は「自分の認識の及ぶ対象・範囲」が原義で
>更に「自分の能力の及ぶ範囲」という意味が加わってくる
それは仏教用語でキョウガイと読む
現代日本語の境界(キョウカイ)にはそのような意味はない
境界(キョウカイ)の原義でもなく違う言葉

仏語を当ててトレイトキョウガイと読ませたかったのか?
2025/04/10(木) 01:18:20.37ID:BQ7YpPB/
boundsも古典英語なら現代日本語の境界(キョウカイ)の意味もあるが
現代英語には境界(キョウカイ)の意味は基本的にはない
日本語の境界はboundary

現代英語でboundsを境界と意訳してもいいのは
out of boundsやwithin boundsなど
前置詞を伴って範囲の内か外だけに焦点があたっている状況のみ
2025/04/10(木) 01:24:45.88ID:WYZDSkTO
飽きたからXで訳者に凸してきなよ
2025/04/10(木) 01:29:38.95ID:BQ7YpPB/
>>401
これもなんとも無理やりだなぁ

現代日本語における境界は境・境目・境界線のことで基本的に「線」の概念
境界という線により区切られた結果としてその内側の範囲や領域ができるが
境界という言葉が区切られた結果としてできる内側の範囲や領域を示すわけではない

境界(キョウカイ)という概念は境界を通して接している二つのものがなければ成り立たない
408デフォルトの名無しさん
垢版 |
2025/04/10(木) 09:28:59.90ID:sl4+KigV
>>381
そんなことしたらゴミが増えるだけ
409デフォルトの名無しさん
垢版 |
2025/04/10(木) 09:34:45.39ID:sl4+KigV
>>398
水平線地平線がしっくりくる
410デフォルトの名無しさん
垢版 |
2025/04/10(木) 09:37:18.05ID:V2R2z6S+
で、結局Windowsアプリ用としてのGUIフレームワークは どれがおすすめなん?
2025/04/10(木) 10:02:20.15ID:sl4+KigV
新参発見したわ
https://aquasoftware.net/blog/?p=2223
2025/04/10(木) 11:31:17.20ID:sl4+KigV
>>324
>Rust での解説はこれから市民権を得ていくでしょうか。もしそうなるとすると、自分が一番馴染みがある言語で学べることになりとてもワクワクします。

今後こんな糞スペックのが増えてくるんだろうな
2025/04/10(木) 11:43:14.72ID:Qbt6Bavv
>>410
Tauri以外にあるの?
2025/04/10(木) 11:46:18.80ID:5Ye07Eg9
>>410
いつの間にか、eguiで日本語インライン入力できるようになっている
2025/04/10(木) 12:11:08.05ID:Vy3uEQTj
>>410
個人的には slint が使いやすいとは思ってるが、 Windows の知識が充分にあるという前提なら windows-rs 経由で API を直接に呼ぶのが楽という人もいると思う。
2025/04/10(木) 16:33:28.17ID:SZxFOwGT
>>369
その通り
ちなみにRustには4つの関数があり
{fn} キャプチャのない関数 
Fn - {fn} キャプチャ時の値を参照してしまう関数
FnMut - Fn キャプチャ時の値を書き換えてしまう関数
FnOnce - FnMut キャプチャ時の値を消費してしまい1度しか呼べない関数
2025/04/10(木) 18:07:01.46ID:P/kW37Nh
自分と会話し始めちゃったよw
それも全く意味がない会話を
2025/04/10(木) 18:27:16.96ID:mUlJ1kr4
foo.bar()はfooを移動したのか参照したのか見た目で区別できない
移動かと思ったらじつはCopyだったりするし
foo()も同じ
2025/04/10(木) 19:11:04.12ID:6uiVDoq6
>>418
CopyされうるならCopyトレイト実装型なのでムーブされることはない
ムーブされたらその後に使われていないため誤読することもない
2025/04/10(木) 22:19:50.16ID:5Ye07Eg9
>>418
そういうのはIDEがやる仕事でしょ
421デフォルトの名無しさん
垢版 |
2025/04/10(木) 22:42:29.86ID:mBJ9AdtP
オープンソースの翻訳にいちゃもん付ける活動してるのは技術評論社だっけ?
本買え本って言ってたよな
2025/04/11(金) 11:22:05.80ID:7EX5STKN
>>397
型の世界において、
ここまて型の抽象性を広げて戻り値として返す。
少なくともここまで狭めた具体的な型を引数として要求する。
その境。
2025/04/11(金) 11:46:40.40ID:HX71i0gu
共感できることに共感するのは有能だがどんな妄想にも共感するやつは無能だ
2025/04/11(金) 12:20:13.15ID:yx7ZxPSb
いいかげん中身のない主張やめて、とっととthe rust book 最新版を翻訳して用語を統一しろ。

the rust book 翻訳を古いまま放置して、偉そうに翻訳を語るなよ。
2025/04/11(金) 12:57:51.71ID:mXJpW1vK
Rust bookみたいな聖書があるのに聖書の翻訳が気に入らないからと文句つける奴は頭おかしいわ
トレイト境界でもういいだろ。聖書にそう書いてあんだよ
426デフォルトの名無しさん
垢版 |
2025/04/11(金) 13:02:09.03ID:/8vt7NNX
今の時間crates.ioメンテでもしてんのか?
反応クッソ遅いんだが
2025/04/11(金) 16:09:31.37ID:Dvk3nAyu
日本語の本読んでる時点でダメだ。原書の話題だけ頼む
2025/04/11(金) 16:29:00.90ID:9opbn0me
>>427
原著が日本語ならこんな翻訳の問題起きなかったって言いたそうだけど違うぞ
どの言語だろうと聖書に書かれた内容に食ってかかる反体制派とか左翼っぽいのが生まれる社会土壌の問題だ

英語が母国語でもこういうタイプの輩は、boundsという用語を使ったことに対して反抗してconstraintsで統一しろとか騒ぐ
言語の問題なんかじゃ無い。心の問題であり態度の問題だ
2025/04/11(金) 16:32:35.54ID:Dvk3nAyu
いや、面倒だからフィルタになるでしょ
って程度だよ
このスレ自体を英語だけにしてもいいぞ
2025/04/11(金) 16:50:22.75ID:UKjoRWuA
>>422
>その境。
その境って何の境?
その説明じゃ全然分かんない
2025/04/11(金) 18:38:06.51ID:nsFUcEzJ
境界信者はやっぱり宗教詳しいんだね
学会や壺も他宗教について詳しいもんね
432デフォルトの名無しさん
垢版 |
2025/04/11(金) 18:43:51.54ID:Lf3Jev+n
rustの仕様見たけど肝心なlifetimeの情報が網羅されてなくて本当にこれが仕様として働くのか疑問に思った
2025/04/11(金) 19:27:00.96ID:HX71i0gu
なんでも動的にチェックする簡易な実装を考えたほうがわかりやすい
2025/04/11(金) 21:09:53.34ID:dq5UKFva
>>432
こないだ寄贈されたやつ?
叩き台にする程度でしょ。
まだ決定版というわけではない。
2025/04/11(金) 22:11:47.10ID:cSKsCytU
>>434
とはいえあれでISO 26262とかの認定は通ってるんだよね
ああいう審査って何を見られてるんだろ
436デフォルトの名無しさん
垢版 |
2025/04/12(土) 06:43:32.65ID:IMDrBc8a
USO-800
2025/04/12(土) 11:10:12.54ID:mEwUzKIx
Rust境界例
2025/04/12(土) 12:46:42.80ID:G/Z86Z6L
>>430
トレイト境界はあらゆる観点で間違った訳語なのでまともな回答を期待しても無駄だよ

難しい概念ではないのに「境界」を使った途端に簡潔な説明ができなくなるんだから訳語としての用を成してない
439デフォルトの名無しさん
垢版 |
2025/04/12(土) 13:53:53.64ID:Mda8ZghK
このスレの結論
trait boundの翻訳の議論を除けばRustには欠点がないと思っていいかな?
2025/04/12(土) 13:55:52.66ID:0buiik+f
GC言語経験者には、難しいというのは欠点かも
2025/04/12(土) 14:14:59.77ID:6rJMqtUM
文字列処理の経験者は案外GCを使わない経験をしているはず
だが文字列指向を捨てるよう訓練された人が一番苦労する
2025/04/12(土) 14:32:57.78ID:fDddIcJn
toastyっていつになったら使えるようになるの?
2025/04/12(土) 16:12:49.92ID:l+qhzSG7
>>442
toastyがどこまでやるのか途上でわからんけどさ
O/Rマッパーを名乗ってるから単純なものには使えても一般的にはORMの様々な欠点を抱えるっしょ
だからORMではないSQLxが人気だけど非同期ORMの需要もあるから既にSeaORMやDiesel-asyncがある状況で
新たにtoastyをtokio直下プロジェクトで進めようとしてるのはRDBよりむしろNoSQL対策がメインと見ていいのかね
2025/04/12(土) 16:14:41.99ID:kMx1QAlk
>>435
品質管理系の規格 (ISO9001) だと「発生したトラブル (不良品) に対して対策をする手続きが存在していてその手続き通りに実施しているか」を審査されるが、対策の効果や妥当性は審査対象ではない。
実際問題として作ってる製品の性質によるから審査しようがないし。
26262 がどういう性質のものなのかググったくらいでは全然わからんが 9001 と同じようにメタな部分を審査するんじゃないかな……。
ダングリング防止の機能があることなどは審査されてもどういうメカニズムで実現されるかは審査対象外なのかもしれん。
2025/04/12(土) 17:46:03.85ID:GwdhqqDc
>>438
まともな回答じゃなくても妥当性を判断する材料にはなる
2025/04/12(土) 20:51:24.81ID:6rJMqtUM
ニューメディアには二種類ある
知りたいことだけを問い合わせるメディアと
従来は網羅できなかったことを網羅するメディア
447デフォルトの名無しさん
垢版 |
2025/04/13(日) 10:15:42.59ID:9+E6vnhP
これよな

そう思えるのはお前も信者だからだろ

結局のところRust信者はポリコレ過ぎる
これも「政治的に」Linusにチクって解決しようとしたところ、ブチ切れられただけ
記事の話が全部本当だとして総合的に推定すると、
Rustから叩く為のラッパ的な物を用意しようとしたところ政治闘争となり、両者辞任の痛み分け、
カーネル自体のコードには今後ともRustは無し、という所ではないかと
これは「支持」ではなく「容認」だろうよ

ただまあ、何でそんな物が『カーネル側に』必要なのか技術的に疑問ではあるがな
RustからCのAPIを叩けないなんて事はあり得ないだろうし、仮にそうだとしても、API変換をRust側でやればよかっただけの話
俺はHellwigの方が正しいと思う。まあLinus案も落とし所としてはありなだろうけど
(というかLinusはこの辺が断然上手い)

Rust信者は、技術的理由ではなく、非Rust話者を排除する為にRustを使う
TypeScriptにも似たような奴はいると思うけど
448デフォルトの名無しさん
垢版 |
2025/04/13(日) 13:34:29.88ID:2lLYGSci
ボランティア翻訳に訳の分からんいちゃもん付けるのはたいてい技術評論社
奴らは本を売りたいだけだから無視して良いと思う
2025/04/13(日) 13:40:39.46ID:4yNzrwxr
抽象化モデルが非効率だったと何年もたってから発覚したときにはそのモデルに依存しきっていて全体の書き直ししか修正しようがないということをリーナスは書いている。
プログラムを凝らずに書けることが良いというよりは、凝ったプログラムが柔軟性がない (修正しにくい) ことを問題視してるように見える。

実行効率はやってみないとわからん場合もあるし事情が変わる場合もあるから、ある時点で設計として真っ当であってもずっとそうだとは限らんのだな。
2025/04/13(日) 15:14:15.49ID:1Z67A7m7
>>448
問題のボランティア翻訳に深く関わってる人達が書いた本を出版してるのが技術評論社だぞ
jp.mercari.com/item/m61131849914
451デフォルトの名無しさん
垢版 |
2025/04/13(日) 15:55:50.50ID:c6Sg9WHG
突然メルカリのリンクを貼られてドン引き
2025/04/13(日) 16:47:42.50ID:h93U4QKi
会社もメルカリで売ってるのかすごいな
2025/04/13(日) 17:58:50.92ID:gxlD4b+C
SDGsの時代だからね
454デフォルトの名無しさん
垢版 |
2025/04/14(月) 14:43:52.73ID:NMEkC5si
ますます怪しいな
455デフォルトの名無しさん
垢版 |
2025/04/14(月) 16:15:10.37ID:w0ewOdij
ボランティアは文句つけられるけど
うちから出せば金が出るよってことか
456デフォルトの名無しさん
垢版 |
2025/04/14(月) 16:17:16.70ID:w0ewOdij
ボランティア叩き企業なのに
指摘されて即座に擁護が湧くのが怪しいと思う
2025/04/14(月) 23:45:08.90ID:5Y8yian5
>>447
そうではなくて、
既に進みつつある(デバイスドライバを含めた)カーネルモジュールのRust化の利便性のために、
Rust用のAPIをLinux公式としてサポートする方針でLinusもOKを出したんだよ。
カーネルのコア部分はC言語のままだけど、各カーネルモジュールは新規分からRustへ置き換わっていってる。
2025/04/14(月) 23:48:27.55ID:bfiqihn+
マジかー
お爺ちゃん達Rustやりだすの?
2025/04/15(火) 10:08:30.99ID:CbsPdu2a
Option<Ordering> を得たいときに i64 とか i32 の integer 型の condition があるとして
let hoge =
if condition == 0 { Some(Ordering::Equal) }
else if condition < 0 { Some(Ordering::Less) }
else if condition > 0 { Some(Ordering::Greater) }
else { None }
;
で hoge に Option<Ordering> が得られるのですが
hoge を反転させた状態を hoge から直接得るにはどうすれば良いのでしょうか
上の例のコードで -condition に置き換えたときに得られる結果と同じものを
コードの重複を避けて hoge から !hoge みたいに取得したいのです
2025/04/15(火) 10:42:57.35ID:5gq1dzTA
hoge.map(Ordering::reverse)
2025/04/15(火) 10:51:02.82ID:b7lMQ02q
>>459
反転はreverseすればいいとして
普通にcondition.cmp(0)したほうがいい

事情があってOption化したいとしても
cmpできる場合とそうでない場合の2つに分岐させる
462デフォルトの名無しさん
垢版 |
2025/04/15(火) 11:01:31.96ID:l4YFawe/
【脳科学】「政治行動の激しさ」に関連する脳回路の存在が研究で判明 [すらいむ★]
http://egg.5ch.net/test/read.cgi/scienceplus/1744637408/

上記のリンクをたどったリンク先の本文とコメントを読まれると・・・
余裕ありますか・・・
大々的にインターネット上にばらまかれました!
2025/04/15(火) 17:11:35.23ID:8Z5eSApz
PartialOrdを実装してるようには見えんよな
2025/04/15(火) 21:09:18.10ID:r3aLc7OM
XY問題っぽいけど本人がいいなら別にいいんじゃね
2025/04/15(火) 23:20:57.63ID:I/RUKS+a
>>459
それらi32やi64はOrd境界を満たしている
そしてOrdにはsupertrateとしてのトレイト境界PartialOrdがある
まずそのifの4分岐を使わずともx.partial_cmp(&0)でOption<Ordering>を得ることができる
ただしOrdも満たす整数型では常にSomeとなりNoneになることはない

一方でf64などの浮動小数点は!Ordなのでpartial_cmpでNoneが返りうる
自分でstruct Pair(i32, i32)を作り二つのi32のcmpが同じ時のみpartial_cmpをSomeにする型等も同様にNoneが返りうる
そのためにPartialOrdとOrd(: PartialOrd)の二段階に分かれている

今回のi32型やi64型はOrdも実装されているためNoneが返ることは絶対にない
したがって今回はx.cmp(&0)でOrderingを返すのが正しい
2025/04/16(水) 00:32:42.55ID:BZ2/m9bV
>それらi32やi64はOrd境界を満たしている
トレイト制約とトレイト実装の区別ができてないやつをちょくちょく見かけるけどあれ境界本の影響だったのか
2025/04/16(水) 00:40:00.05ID:nlneFEtY
ある型がXxx境界を満たすこと=その型がXxxを実装していること、だから正しいよね
2025/04/16(水) 09:39:47.23ID:VD2CYluq
境界を満たすことって表現が気持ち悪い
日本語的じゃない

区域に含まれるようでいてそういう話でもない
2025/04/16(水) 10:00:02.42ID:kz9c6vLk
>>468
英語的にも自然ではない。 でも Rust 用語ではこう言うことになっている。
テクニカルタームってのはそういうもんなので自然かどうかを論じるのは無意味。
2025/04/16(水) 11:16:05.15ID:DaU8fra8
明らかに間違った言葉を使っていても”テクニカルタームってそういうもんなので”で済ませるメンタリティの持ち主が誤訳を生み出して広めるってことだな

役に立つ誤訳ならいいけど>>465からも分かるように境界は足を引っ張る誤訳だから早く止めるに越したことはない
2025/04/16(水) 11:28:23.19ID:aXNp1hi+
traitボヨヨ~ンでいいよ。
2025/04/16(水) 11:30:24.19ID:PbGbU7xO
普通にC#/TypeScript/Kotlinあたりで採用されているconstraint: 制約 でよかったと思うけどね
Rustは変な選民意識が足を引っ張っている
2025/04/16(水) 11:33:26.57ID:aXNp1hi+
Cの置き換え言語に高尚な意識は要らん
2025/04/16(水) 11:34:30.78ID:aXNp1hi+
組込みやってる人達と接点は持ったほうがいいね
2025/04/16(水) 12:15:29.62ID:zTEGEKkW
くだらない議論する労力あるならとっととthe rust book 最新版を翻訳して用語統一しろよ。
2025/04/16(水) 12:22:24.48ID:D06utXB5
プログラム という単語自体がもうおかしいからな
そこに目を瞑ってる時点で同じ穴の狢よ
2025/04/16(水) 12:41:52.97ID:ApyifYby
>>460
Option<Ordering> に .map(Ordering::reverse) ってゼロコストなんか
可読性がどうでも良いなら
>>459 でそのまま -condition した方が速いんじゃね
2025/04/16(水) 12:48:16.89ID:QI1tlKT9
>>469
>英語的にも自然ではない。
CPU boundsとか聞いたことないの?
2025/04/16(水) 15:44:17.59ID:PbGbU7xO
意識高い系プログラミング言語界隈はbindを多用しすぎていて曖昧になってしまっているのは問題
ネイティブにとってクールで知的な語感なのか知らんがどんだけ束縛プレイ好きなんだよ
2025/04/16(水) 16:00:15.57ID:aXNp1hi+
緊縛緊縛
2025/04/16(水) 18:39:21.33ID:VD2CYluq
AとBの境界を満たすって意味がもうすでに訳が分からないので気持ち悪い
2025/04/16(水) 19:25:04.78ID:vwXsH1ob
上界下界
2025/04/16(水) 19:28:02.69ID:VD2CYluq
AとBの条件を満たすならわかる
AとBの境界を満たすのは意味不明

Aの境界を満たすですら意味不明
2025/04/16(水) 19:31:37.92ID:vwXsH1ob
簡単な概念に難しい言葉使いすぎ。共和党党員でも理解出来るdealみたいな簡単な単語にする
computerとかラテン語っぽいのは嫌われちゃうぞ
2025/04/16(水) 21:14:58.28ID:kz9c6vLk
テクニカルタームってのは「その分野に固有の定義がある語」なので日常用語の意味で解釈されないようにしなきゃならないんだよ。
その分野を学んだことがない初心者でも自然に読めてしまうのは用語の選定が失敗した証だとも言える。
法律用語の「悪意」「ないし」あたりは日常用語とは明瞭に意味が異なるのに日常用語としても解釈できてしまうので良くない例だ。
その一方では全く由来のないデタラメに作り出した語は単純に言いにくいし覚えにくい。
境界と言うかわりにププイータとかフニャコソとか言ったって (それで統一されるなら) 辻褄は合うが、さすがにそれはあんまりというものだろう。
そういう微妙な機微を踏まえて選定するものなんだよ。
2025/04/16(水) 21:17:18.07ID:Owp+m7kF
ボヨヨ~ン一択
2025/04/16(水) 21:24:19.59ID:nlneFEtY
>>477
それは最適化されるので大丈夫
「-condition」を使ってはいけない
これはi32::MIN時にoverflowする
したがってそのif文で書くならばGREATERとLESSを入れ替えるか
「condition > 0」と「condition < 0」を入れ替えることになる

しかしOrderingについて「if文で多分岐させる」こと自体がいけない
可読性に劣るとともにケアレスミスも起きうるだけでなく
生成コードを見ると以下の正解よりも少し長くなりえて遅くなりうることがわかる

正解はこれ
普通のまま: condition.partial_cmp(&0)
逆にする時: condition.partial_cmp(&0).map(|x| x.reverse())
逆にする時: condition.partial_cmp(&0).map(Ordering::reverse) 【上記と同じ】
いずれも生成コードがそのif文より短くなりうる
そして可読性も優れている

ただしconditionにi32やi64の整数型を使うとpartial_cmp()がNoneになることはない
Option<Ordering>を使う必要はなくcmp()でOrderingを得れば十分
真の正解はこれ
普通のまま: condition.cmp(&0)
逆にする時: condition.cmp(&0).reverse()
488デフォルトの名無しさん
垢版 |
2025/04/16(水) 22:12:59.22ID:talPcQtH
てすと
2025/04/16(水) 23:55:34.09ID:4m7V5jbh
Rustでの抽象化したコードの方が可読性の良さだけでなく速いんだよな
様々な抽象化したコードの連鎖もRustでの最適化と下請けのLLVMでの最適化のおかげで速くなってる
2025/04/17(木) 00:27:01.07ID:IaMMIkKx
エイリアス解析は最適化の重要な要素だから参照関係を明瞭に追える Rust は有利。
2025/04/17(木) 06:01:08.25ID:KpBsw54w
Rustはオワコン
2025/04/17(木) 11:32:45.05ID:W4vMp3MB
>>485
bind (bound, boundary, 等々)なんて、特に固有の定義を持たない雰囲気ワードの最たるものだろう
なんとなくオシャレだからというだけで乱用されすぎてもはや意味不明
2025/04/17(木) 11:47:53.19ID:pEkBySlv
>>477
反転するコストがあるんだからゼロコストではない
でも反転前の値が既にある前提なら.map(Ordering::reverse)より速くするのは無理
conditionから新規に反転した値を取得したいのなら当たり前だけど.map(Ordering::reverse)を使わないほうが速い
(ただし>>459の実装ではなくstdと同じ実装を使わないと最適化の度合いで差が出る)
2025/04/17(木) 12:04:31.60ID:tER9i4ve
これは嘘です
その場合でも.map(Ordering::reverse)が一番速いです

>>493
>>conditionから新規に反転した値を取得したいのなら当たり前だけど.map(Ordering::reverse)を使わないほうが速い
495デフォルトの名無しさん
垢版 |
2025/04/17(木) 12:20:41.10ID:Yukgj1cx
ところがRustならゼロコストなんだなあ
2025/04/17(木) 13:46:18.29ID:oKypZfow
ユースケース説明してくれないのに速いとかなんとか言っても不毛だし境界の話に戻ろうぜ!
2025/04/17(木) 14:21:55.09ID:fw0OLUjq
>>487
論理的に反転したいときにreverseって一般的なのかな
negateの方がふさわしいと思うが
498デフォルトの名無しさん
垢版 |
2025/04/17(木) 15:59:50.14ID:szbpCwWd
【AI】OpenAIが「GPT 4.1」のAPIを公開、100万トークン対応と実用性能で飛躍的進化を遂げた次世代AIモデル [すらいむ★]
http://egg.5ch.net/test/read.cgi/scienceplus/1744724723/


上記のリンク先のコメントを読んでもまだ医者の威厳を保てるのか?
2025/04/17(木) 18:53:03.37ID:47PJMP+S
>>459
それと全く同じ動作をする関数fはこれが速さも簡潔さもベスト

fn f(condition: i64) -> Option<Ordering> {
 condition.partial_cmp(&0)
}

Less/Greaterを反転させた関数f_revはこれが速さも簡潔さもベスト

fn f_rev(condition: i64) -> Option<Ordering> {
 0.partial_cmp(&condition)
}

アセンブリ手書きでもこれらの生成コードより速くできないことをx86-64で確認した
500デフォルトの名無しさん
垢版 |
2025/04/17(木) 19:35:44.38ID:Yukgj1cx
>>497
Rustではサイドエフェクトが無いことを保証できるので
どちらでも同じコードに落ちます
2025/04/17(木) 19:48:15.83ID:47PJMP+S
>>497
論理反転ではないからreverseだと思う
論理反転ならlt⇔ge gt⇔le eq⇔neだろうけど
Orderingはlt,eq,gtの3種
そしてOrdering::reverseはlt⇔gtだから
2025/04/17(木) 22:47:28.82ID:wYSSkCRf
結局RustではC風に書くより抽象的に書いた方が、
可読性が良いだけでなく実行速度でも有利なんだな。
2025/04/17(木) 22:49:00.49ID:p3EBjLeO
>>499
でも>>494
condition.partial_cmp(&0).map(Ordering::reverse)のほうが
0.partial_cmp(&condition)より速いって言ってるけどどっちが本当?
2025/04/17(木) 23:42:56.97ID:oLU/r15m
simple is best
505デフォルトの名無しさん
垢版 |
2025/04/17(木) 23:59:58.22ID:VFw/RNHq
この本の帯すき

https://i.imgur.com/gVFQctS.png
2025/04/18(金) 06:24:24.51ID:cH2b3I6U
なんでビルドのときからボコボコボコボコDLさせるの?

なんでアクセスさせようとするの?
2025/04/18(金) 07:02:30.53ID:AZglsXQc
他の言語も同じ
2025/04/18(金) 07:04:06.26ID:5hEkFobl
>>506
標準ライブラリだけ使っていればDLしないよ
他のライブラリを使うなら自動的に依存関係がDLされるのは当たり前
もちろん事前にDLしておけばオフラインでも cargo build −−offline できるよ
2025/04/18(金) 07:57:54.21ID:x/7ySqvh
>>505
ScalaやHaskellとかと同じ道を歩んでるな
2025/04/18(金) 08:25:24.05ID:P5voSsBY
>>509
それらはRustのように速く動くわけではなく
Wasm上でもランタイムによるバイナリサイズ大きくてメリットが何もない
2025/04/18(金) 09:03:11.60ID:mYy6SV15
>>503
わざわざ人に聞かなくてもわかるでしょ
某オジのレスはほぼフェイクと思っておくくらいで丁度いい
2025/04/18(金) 09:55:44.96ID:D+dZTohS
.partial_cmp(&0) ってダサくない?
なんで
.partial_cmp(0) に出来ないの?
2025/04/18(金) 10:28:07.41ID:ZAhA/Z3u
0と比較した結果をOrderingで返す関数とか無用の長物じゃね?
2025/04/18(金) 10:32:03.94ID:D+dZTohS
確かに >>499 は無駄そのもの
2025/04/18(金) 10:47:04.28ID:OYio1Suj
>>512
出来ない
2025/04/18(金) 10:47:35.98ID:FSJ/87pm
>>514
話の流れを理解できてなさそうだな
if文で4分岐する関数を作るのはコードが見にくく実行も遅くなる可能性があって無駄だから素直にpartial_cmp()を使おうって話だろ
2025/04/18(金) 11:56:29.53ID:iABbAYzg
>>494>>499も複オジだった件w
この嘘吐きおじさんの振る舞いはいくらなんでも酷すぎるだろ
2025/04/18(金) 12:06:41.66ID:l4HkHLRc
>>512
初心者っぽいから説明すると
大きな構造体や文字列やBigIntなど含めた様々なデータを比較する関数だよ
参照を渡す方が良いことを理解できるよね?
もちろん数値の場合はコード上は他のデータと同じく参照を渡していても最適化で参照を使わずに数値同士が比較されるから心配しなくていい
2025/04/18(金) 12:21:49.30ID:9tQNo+Cx
gpt o3がバックエンドはRustがオススメです。
みたいに推してくるから、理由を聞いたら、「何にでも雑に強い」からだって開き直りよった
2025/04/18(金) 12:25:55.76ID:LTc7knjt
可読性ですね判ります
2025/04/18(金) 12:29:26.06ID:LQ9k+WsD
政治を嫌うやつがほしがるのは共感でも最適解でもなく、政治的ではないことが保証された解だな
だから乱数や賭博を嫌いになれないのか
522デフォルトの名無しさん
垢版 |
2025/04/18(金) 20:38:04.94ID:8ipzMSW5
Rustで書くとLLVMが最適化するので事実上最速のコードであることが保証されます
2025/04/18(金) 21:32:44.78ID:LQ9k+WsD
単に競争を回避するだけならできなくはないと思うが
政治家の競争と民間企業?の競争を区別するのは無理ゲーだ
2025/04/18(金) 21:55:39.18ID:U7NtBk6M
>>514
それコンパイルしたらSETccとCMOVcc使って最短最速の分岐していて無駄ないよ
525デフォルトの名無しさん
垢版 |
2025/04/19(土) 04:04:16.66ID:FhCqpqMY
【2025年最新】自然な声の音声読み上げソフト5選!AI技術で ...
https://ondoku3.com/ja/post/natural-voice-software/
※無料で5000文字まで音声合成エンジンで読み上げ可能
※音声合成エンジンは人間の声のサンプルから声質が作成されている
「Grok」が過去の会話を覚え続けるようになった--ChatGPTに追従 オフにする方法は?
2025年04月18日 05時20
http://japan.cnet.com/article/35231959/
>>「ChatGPT」やGoogleの「Gemini」も同様の記憶機能を導入している。これらのサービスも、長期的な会話履歴を保持し、ユーザーに合わせた回答が可能となっている。
※GrokはChatGPTで規制されていることも返答するようになっている
統合失調症の幻聴で半分人間半分AIと申されていた
統合失調症の幻聴で宇宙人とも話されていたのでかなり昔からできていたと思われる
※対象者【統合失調症】の考えに対しては何を考えているかは対象者【統合失調症】に聞いてみないことには意味不明⒮
2025/04/19(土) 21:57:19.62ID:fY+o1xZs
>>524
それRustのOption<Ordering>が速い理由がわかったわ
Orderingが8bitであることに加えてOption<Ordering>も8bitに抑えてる
しかもOrderingとSome(Ordering)が同じ8bit表現になるようにしている
それらにより8bitしか変化させてくれないsetCC命令をゼロ拡張や事前ゼロクリア無しに使えるわけだ
2025/04/19(土) 22:46:36.80ID:cJmAkIgz
Option が特別扱いなわけではなく、全般に空いているビットに詰め込む仕組みがあるのでいろんなところで効いてくる
2025/04/19(土) 22:55:31.71ID:vmwnv5nR
Option持たない言語や持っていても使われない言語は別途bool値などで表すしかないためOptionのような対応処理ができずに不利だね
2025/04/19(土) 23:14:20.43ID:cJmAkIgz
詰め込む分だけ取り出すコストが生じる場合もあって、どちらが良いとは一概には言えないんだけど Rust は上手くやれてるみたいだね。
2025/04/19(土) 23:27:11.24ID:9Z8ZvqW5
Optionを持たない流派とかどうでもいい
相性に依存したくないし
2025/04/20(日) 02:35:00.94ID:q3Yzhl/7
Some(Equal)
どちらが良いとも言えない

None
どうでもいい
532デフォルトの名無しさん
垢版 |
2025/04/20(日) 08:28:25.78ID:8i8LLpN+
ぬるぽ
533デフォルトの名無しさん
垢版 |
2025/04/20(日) 10:53:41.23ID:stub9h6D
今どきの言語だと大体は string? みたいな記法はあるし
unwrap_or や map, and_then に相当する操作も普通にできるから、 optional は実はあまり困らない
(演算子で書けるぶん、こちらのほうが記述も簡潔)

Resultは無いから、欲しい場面は結構ある
534デフォルトの名無しさん
垢版 |
2025/04/20(日) 11:10:13.02ID:stub9h6D
HaskellはリストやOption (Maybe), Tree などをモナドという構造として抽象化できると考えた
これは理論的な美しさはあるけど、実用的にはエラーハンドリングのための専用の構文があつた方が多くの場面で便利

Optionに限れば、C#やTS, Kotlin などにもそういうものがある
Resultも含めるとRustの?演算子はバランスがいいと思う
(これを monadic bind と説明せず、エラーの場合の早期リターンとして説明してる点も含めて)
2025/04/20(日) 12:25:33.06ID:q3Yzhl/7
構造ってのはコタツから出なくても向こうから勝手に押しかけてくる
たとえばCではOOPができないって言って、本当のOOP探しをする必要は全くない
それと同じ
2025/04/20(日) 12:55:01.09ID:9sumJC+c
錆みたいな名前なんとかならなかったのかね
システムに使うには縁起が良くない
2025/04/20(日) 13:52:39.43ID:q3Yzhl/7
とりあえず占い師をクビにして、祟りが起きたらその時に考える
これが効率化だ
2025/04/20(日) 14:06:28.40ID:Y0fKmU/t
名前の由来もちゃんとあるから調べたらいい
2025/04/20(日) 14:07:44.47ID:Y0fKmU/t
枯れたものでシステム作ろうとするくせに生意気な
お似合いの名前の由来じゃん
540デフォルトの名無しさん
垢版 |
2025/04/20(日) 14:13:49.78ID:RiHDJnuQ
糖分多め
2025/04/20(日) 15:51:30.56ID:9sumJC+c
・さび菌よる多くの病害はさび病と呼ばれ、農業・林業において重大な病害を含む
・サビの進行度によっては、チェーンリング強度低下、チェーン張力の低下、チェーン断裂のリスクなどの可能性がある

2025/04/20(日) 15:53:22.75ID:deXhde/G
鉄は表面だけ錆びさせることで破壊が起きるような深い錆びを起こさないように出来るのだ
543デフォルトの名無しさん
垢版 |
2025/04/20(日) 16:27:55.26ID:2QlbS353
このスレに巣食っている信者が喧伝しているような「メモリ安全でコンパイルが通れば
バグがないことが保障される」信頼性が高い言語だから名前はTrustだ!とドヤ顔で言い切る
自信が開発者にはなかったんだろうな。
2025/04/20(日) 16:32:59.12ID:LRWB5aQw
開発当初にそこまで自信ないだろ
1人で作り出したのでしょ
2025/04/20(日) 16:35:34.71ID:LRWB5aQw
ロジックのバグは開発者の責任だからね
あとCよりマシと言う所が抜けてる
Cの地獄はやったものしかわからないだろ、あれから比べたら劇的に楽に違いない
2025/04/20(日) 16:38:39.63ID:LRWB5aQw
フレームワーク上でビジネスロジックしか組んでないアプリレベルの開発者には無用の長物なんだよ。
業界的にはアプリレベル開発者が80%だろうし、違いの分かり恩恵がある開発者は20%だからね
2025/04/20(日) 17:07:39.21ID:C+zI7Cbk
このスレの今盛り上がってるこのお題

プログラミングのお題スレ Part22
https://mevius.5ch.net/test/read.cgi/tech/1691038333/712

Rustだと桁違いに速く解けるみたいだけど
これは言語の差なの?
2025/04/20(日) 17:59:03.47ID:q3Yzhl/7
ハードウェアを固定して言語を色々変えるなら
ハードの差には絶対にならない
2025/04/20(日) 20:56:57.67ID:3sgfyr+I
>>547
見たけど言語の差ではない。モダンな言語であればほぼ同様の記述が可能。
この手の小さなアルゴリズム実装程度の課題ではRustの面倒臭い面が表に出ることはない
2025/04/20(日) 22:09:40.01ID:q3Yzhl/7
課題を変えたら課題の差が計測されてしまう
既に、良い課題と悪い課題があるみたいな空気になりかけている
2025/04/20(日) 22:12:48.98ID:C+zI7Cbk
>>549
他の言語で速いプログラムが出てこないのはなぜなのかなと思って
2025/04/20(日) 22:45:33.70ID:zDf/Vo48
速度に固執してる奴がたまたまRust信者だっただけだな
まだアルゴリズムの改善でオーダーが変わっている段階であり、細かい最適化とかの次元ではない
遅くない言語であれば十分
2025/04/20(日) 22:51:31.25ID:ACqBfiTY
clangでも同じにできるよね
どちらもLLVM
2025/04/20(日) 22:53:22.13ID:BStMFpBy
rustが本当に速かったらもっと普及したと思う
2025/04/20(日) 22:57:10.24ID:ACqBfiTY
CやFORTRANより速くはならんからな
2025/04/20(日) 23:05:02.71ID:3sgfyr+I
こういうミクロなベンチマークは速度を追求すると最終的には拡張命令等によるハードウェア依存の最適化に行き着くから、Rustに勝ち目はない
一応Rustコンパイラを使い続けながら最速に到達することは可能かもしれないが、もはやRustとは呼べない何かになる
2025/04/20(日) 23:16:39.25ID:fDFjIRaB
インラインでsseして頑張ろう
2025/04/20(日) 23:24:22.62ID:R/7Xf2QC
>>555
Rustは同じ速さにできる

>>556
CPU依存でいいならRustはインラインアセンブラに対応していてRustの変数をそのまま渡すことができるためそのクリティカルな部分以外をそのままRustで記述できるRustは有利
2025/04/20(日) 23:37:04.43ID:fDFjIRaB
知ってる知ってる
2025/04/20(日) 23:51:55.62ID:cSEBA2fB
お題スレでノッてくれる人が少ないからってこっちに持ってくんなよって一瞬思いかけたけど
ある意味最初からこっちでやるべきだった話かもしれん
2025/04/21(月) 00:30:33.79ID:7JbXAl3S
Rustを叩きたいならばRustのコードより速く解を出す別言語のコードを実際に示さないとな
2025/04/21(月) 00:34:48.87ID:i9cdiUcL
ビット演算とか負けそう
2025/04/21(月) 02:27:05.65ID:+vt/r7vG
ローテートとか多倍長計算出来るのけ?
2025/04/21(月) 12:26:55.06ID:M3LNhDSR
調べたらRustはなんでもあるんだな
reverse_bits
count_ones
leading_ones
trailing_ones
rotate_left
rotate_elements_left
carrying_add
carrying_mul
carrying_mul_add
widening_mul
2025/04/21(月) 14:43:44.89ID:Yit9TUrJ
直交性は無いよ
2025/04/21(月) 18:14:51.15ID:kMaH7s+f
どれについて何の直交性が必要とされてる話だろうか。
全てに該当するレジスタの直交性関連の話だと、制限のあるCISCでは必要があればmov命令の前置きコードが生成される場合もあるかもしれないが、Rustの変数や式で気にする必要はないか。唯一型について、ビットのカウント数/シフト数やilog/power指数はどの型に対してもu32型となるくらい。
2025/04/21(月) 22:52:58.94ID:8M5kDrcZ
>>552
じゃあRust以外の言語でゼロから作ってみせてよ
2025/04/21(月) 23:26:48.36ID:+8SUWDlR
しかし、裁判所の言う事を聞かない人間が世界中に出没しているから
法廷では、物的証拠が、っていうの時代錯誤だよな
2025/04/21(月) 23:35:15.33ID:p/ZevgM0
ひろゆきの悪口か
いいぞもっとやれ
2025/04/21(月) 23:36:25.44ID:p/ZevgM0
>>567
アセンブリ吐かせれば、あら不思議
意味不明のニーモニックから同じ結果がでましたよ
2025/04/21(月) 23:57:43.20ID:Aow9BV7f
そのRustのコードはCで書けば速くなるような部分もなさそ
2025/04/22(火) 00:16:50.91ID:ZQ5oZMZY
>>571
興味があるならハイパフォーマンスコンピューティングという魔界を覗いてくるといい
実はあまり言語は関係なくてRustで同じことができないわけでもないが、Rustの抽象化云々とはかけ離れた異次元の世界だ
573デフォルトの名無しさん
垢版 |
2025/04/22(火) 00:26:30.67ID:8hwhaSPF
HPCのライブラリなんかなんの言語で書かれていても良いけど、インストールだけはCargoで楽にやりたいものだ
2025/04/22(火) 00:35:43.68ID:d/X8b3ZB
アーキテクチャの性能を引き出すためのチューニングというのは高速化できるパターンの蓄積だったりするんだよ。
いいかんじのアルゴリズムを使えば全部綺麗に高速になるなんていうシンプルな世界ではない。
コンパイラは単純に巨大な辞書を持ってる。

分量が強い。
投資が多いほうが強い。
同程度に活発なら歴史が長いほうが強い。

素人がちょっと画期的なことを思いついたくらいでは覆せない物量の世界。
2025/04/22(火) 00:38:12.62ID:9wLhNa5g
HPCのライブラリがなんで書かれていても良いと言うのはどういう意味なのか
利用する側として現状c,c++でしか使えない物が主流だと思うんだけど
CUDAカーネルもrustで書けるようだけど今のところ利点がない
2025/04/22(火) 00:50:02.20ID:F18K4UsR
入出力用言語ということか
577デフォルトの名無しさん
垢版 |
2025/04/22(火) 08:24:52.50ID:YssDApDh
Rustは清書用
2025/04/22(火) 09:00:24.01ID:S18G88V1
HPCは、行指向のデータ構造、動的アロケーションを避ける、データ並列、といった性質があるのでRustと対極なんだよね
Rustがそれらを苦手とするわけではないけど、特に強みがない
579578
垢版 |
2025/04/22(火) 09:02:46.96ID:S18G88V1
失礼、列指向の間違い
2025/04/22(火) 10:00:51.24ID:5HMV43CK
Rustで作られたOSとかwebブラウザとかないの?
2025/04/22(火) 10:01:41.11ID:lO2L/Kdb
HPCとRustという別の階層のものを比較してるのは滑稽だ。
HPCは大昔からあるものであって、システム構成もGPU時代になってどんどん変わっていってるし、 使用言語もFortranから最近はPythonまであり、そしてRustでの試みもある。
2025/04/22(火) 10:38:41.79ID:AOKbZsXj
クリエイターと消費者がよく比較されるのも滑稽すぎてウンザリする
2025/04/22(火) 12:00:21.29ID:suLLda9X
比較のレイヤーがごっちゃになってカブトムシとライオンを比較するような意味不明な記事が投稿されるのが問題
日本語特有の課題なんだけどね。外国語だったら比較対象が厳密だからこんな比較はされない
外人に生まれたかった
584デフォルトの名無しさん
垢版 |
2025/04/22(火) 12:04:09.96ID:VDU9dGyn
>>580
OSはLinux
ブラウザはFirefoxが
Rustで作られています
2025/04/22(火) 12:21:14.17ID:lkDatlsU
>>584
Chromeもこの前のバージョンからRust
586デフォルトの名無しさん
垢版 |
2025/04/22(火) 14:56:33.88ID:CQcCOa17
WindowsもRustです
https://forest.watch.impress.co.jp/docs/serial/yajiuma/1536253.html
587デフォルトの名無しさん
垢版 |
2025/04/22(火) 15:01:02.62ID:z9I6mhsO
>>584
USO-800
2025/04/22(火) 23:38:16.08ID:gOfYIqHC
ほとんどの分野でRust化が進んでいるといってもOSとブラウザは巨大すぎてRustへの部分置き換えの領域が広がっていく感じだろう
2025/04/22(火) 23:40:56.68ID:uv87i4ng
LinuxはカーネルモジュールがRustでも作れるようになっただけね
ごく一部の置き換えが始められるかどうかってところだけ
2025/04/23(水) 00:32:40.73ID:fW7CNVPb
なんかい同じ話しとんねんきみら
591デフォルトの名無しさん
垢版 |
2025/04/23(水) 07:26:01.78ID:aWedmqOO
現状でLinuxやFirefoxのコードベース中のRustの割合ってどれくらいなん?
2025/04/23(水) 07:40:34.19ID:Uy1fHQTV
そろそろChromeの方がFirefoxよりRustの割合高くなってるだろ
2025/04/23(水) 07:45:28.98ID:FseCbehs
PythonでもRust製のuvが今後天下を取りそうな流れになりつつある
爆速すぎる
594デフォルトの名無しさん
垢版 |
2025/04/23(水) 07:50:08.26ID:yb1dQj0Y
CPythonのRust版まだー?
2025/04/23(水) 08:11:24.03ID:l+v1pS2m
>>591
%1ぐらいじゃね
2025/04/23(水) 08:34:59.19ID:Uy1fHQTV
uvは開発速度が異常に速いな
どうなってるんだ?
2025/04/23(水) 08:51:58.21ID:P67C9oqU
uvが速いのはパッケージをインストールする際のダウンロードとコピーを避けてるからで、別にRustだから速いわけではないんだけど、
Rustの速そうなイメージを利用してPythonに群がる雰囲気コーダー達にうまく売り込んだよね
シングルバイナリだから細々とスクリプトを読むより起動時のロードが速いくらいの効果はあるかもしれんが
2025/04/23(水) 09:25:47.00ID:4v1FSs9u
Rustが速いはCが速いというのと同じぐらい実装依存でしょ
正しくはuvの実装が良くて実行速度が速いだけじゃん
2025/04/23(水) 09:26:47.77ID:yoO2Q6CW
>>590
AIの出力のコピペ繰り返してると
Echo Chamber Effect で発散するお
2025/04/23(水) 09:42:39.16ID:FBWMxycZ
>>598
そう、だからRust最強したいだけの層はuvのようなアーキテクチャの根本的な見直しではなく単純な書き換えばかりに傾倒する
Rust界隈はトランスレートばかりやってて何も生み出してないと揶揄されることが多いが、その原因はまさにこれ
(念を押すが、uvはそれには該当しない)
2025/04/23(水) 10:37:52.74ID:PSneroc7
>>597
596は開発速度の話だろ
2025/04/23(水) 11:18:25.26ID:7LPwNZei
Rustは開発効率が良いもんな
2025/04/23(水) 11:41:00.34ID:nIc2Gxfq
uvの人がシゴデキで暇なだけじゃね
604デフォルトの名無しさん
垢版 |
2025/04/23(水) 11:43:34.82ID:nbgWWj+a
あの人普段何して収入を得ているんだろうな
2025/04/23(水) 11:47:44.34ID:uqhnESs+
アーキテクチャを変えればアーキテクチャの差が評価される
言語以外何も変えなければ言語の差が評価される
2025/04/23(水) 11:50:43.26ID:FBWMxycZ
uvの開発元はスタートアップ企業としてVCから多額の出資を受けてるから開発者の生活は安泰
いずれビッグテックへの買収でイグジットか、Anacondaみたいにエンタープライズ向けのサポートで金取るんだろう
607デフォルトの名無しさん
垢版 |
2025/04/23(水) 11:52:11.03ID:nbgWWj+a
uvもそのうちAnacondaみたいになっちゃうってコト!?
2025/04/23(水) 11:52:38.07ID:nIc2Gxfq
おお、会社なんだ
CLIツールで企業できるとか夢のようだな
2025/04/23(水) 12:12:50.41ID:FBWMxycZ
>>607
可能性はある
VCから出資を受けている以上、必ず資金回収のタイムリミットがあるため、
最終的にどのような形になるにせよ今の状況を続けられるのは数年だけ
2025/04/23(水) 12:16:36.99ID:nIc2Gxfq
デファクトになったらボランティアベースでも回るかね
2025/04/23(水) 20:50:51.07ID:uqhnESs+
ディール だけ で回るかどうかの方が知りたい
2025/04/23(水) 21:20:01.21ID:TDm/u4ft
>>609
uvはRustで書かれたオープンソースでライセンスはApache2&MIT
つまり自由にフォーク可能
したがってuvでサポート契約サービスはありえても
uvを使用料でお金を取る可能性は低く
もしそうなれば有志たちがuvをフォークして無料提供を続けるパターンとなる
したがってuvを気にせずに使っても問題ない
2025/04/23(水) 21:38:33.95ID:WPvg2tW3
>>612
元々書いた人なり団体が一つでそこが今後クローズドにしますと言えばそこからは普通にライセンス変更はできるよ
そういうのはたまにあるし
2025/04/23(水) 21:40:20.32ID:WPvg2tW3
GPTに聞いた答え
実際に「Apache 2.0で公開 → 後にクローズドライセンスで商用展開」する事例はかなり多い
2025/04/23(水) 21:45:14.93ID:TDm/u4ft
もちろんライセンス変更後はフォークできないけど
ライセンス変更前はフォークできるためそれは問題とならない
2025/04/23(水) 21:46:24.20ID:PSneroc7
>>606
uv怪しいよな
Pythonをバイナリで配布してるあたりが金取ってきそうな予感
2025/04/23(水) 21:49:14.92ID:WPvg2tW3
企業向けは有料でクローズドで個人向けはオープンのままに変わることもよくある話
2025/04/23(水) 21:53:14.31ID:uqhnESs+
何言ってんだいニューメディア
紙の本はみんな有料さ
2025/04/23(水) 21:54:56.18ID:TDm/u4ft
>>617
それはフォーク側でなく元の側な
フォーク側は企業であろうと個人であろうと無料で利用できる
2025/04/23(水) 21:58:30.25ID:WPvg2tW3
実際開発してるのはその団体でソースがあってもそれからフォークして新たに開発しながら使うのは少ない
mariaDBとかみたいに開発者が分裂してるなら開発者がフォーク先にも残るけど
2025/04/23(水) 22:20:06.96ID:gHP82hJN
これまでの有力筆頭だったRyeもuvに統合となったし
Pythonで最強静的解析ツールのRuffもuvと同じところで作られていてRust製だよ
2025/04/23(水) 22:26:23.93ID:P67C9oqU
クラウドサービスは有償クローズドでCLIはOSSのままというのはよくあるパターン
自然に課金に誘導できOSS乞食も納得させやすい合理的な形なのだけど、
uvやruffって今のところ囲い込みというより既存のPythonツールセットを一部置き換える形で容易に導入できることを売りにしてるから、
クラウドサービスと統合されたPython開発スイートみたいな方向へ行くのはユーザー離れを招きそうだね
2025/04/23(水) 22:45:26.71ID:WPvg2tW3
そこに資金回収のフロンティアが残されている
2025/04/23(水) 22:51:38.64ID:Pf4IRGe7
Ruffもuvもgithub上でコミュニティによってIssue/Pullベースで開発されているのを知らない無知なやつが有料化されるぞ!とか見当外れな批判していてワロタ
2025/04/23(水) 22:52:58.24ID:fW7CNVPb
複おじ頻出単語集
となる
2025/04/23(水) 22:56:52.19ID:b6DagpWu
つまり、uvの作者は霞を食べて生きてるってことでいいの?
2025/04/23(水) 23:08:49.69ID:N+tdJcQb
開発チームにはripgrep, bat, hyperfine, maturinの開発者にCPythonのコア開発者たちがいると書かれてるな
つまりRust&Pythonの開発者たちの本流だ

>>626
企業がサポートをお願いしたい時の筆頭候補になる
2025/04/23(水) 23:09:00.88ID:uqhnESs+
いつの価値観で断罪したいのか知らんけど、どうせ現在の価値観ではOKだろ
629デフォルトの名無しさん
垢版 |
2025/04/23(水) 23:23:47.07ID:aWedmqOO
>>624
GitHubでOSSとして公開されてたものが後に有償化するのは普通にあるぞ
C#のPrismとか、PythonのPySimpleGUIとかがその例
2025/04/23(水) 23:33:07.28ID:ASKXB7Kt
PythonのRuffとuvのAstralはサイトのトップページにオープンを理念とすると掲げているとともに信頼があり多くの有能開発者たちが協力しているプロジェクト
2025/04/24(木) 01:17:00.64ID:2X7oX7JP
Don’t be evilとか言ってた企業が世界一evilな企業になるみたいな話だね
2025/04/24(木) 01:49:00.09ID:x6sR980L
anacondaがやばすぎて疑心暗鬼になってる人たち
俺も一員
2025/04/24(木) 02:13:25.73ID:pnRjJMwb
企業としてマネタイズする場合、ソフト自体を有償化する (無償版と並列に運用する体制) パターンと付随するサービスのほうで稼ぐパターンとその会わせ技のパターンがある。
uv はパッケージマネージャなわけだからエンタープライズ向けに精査されたパッケージリポジトリの提供とかで商売になるんじやないかなぁ。
2025/04/24(木) 02:51:42.67ID:/mu+RrCU
OS依存をおそれないC/C++はコンパイラもライブラリもOSで管理するから問題ない
自称OS非依存の方がかえって邪悪になるってことかな
2025/04/24(木) 03:01:04.69ID:TkOo4M39
OS というかディストリビューションのパッケージマネージャに乗っかるのが C/C++ の伝統ではあるな。
ただ、本来は実行環境の管理に使うべきシステムだから開発環境の管理に使うのは微妙に行き届かない面もあり、事情がややこしくなる部分もある。
2025/04/24(木) 08:59:09.87ID:0duaLY4u
>>630
Astralが信頼できるかどうかは関係ない
VCから貰った金が底を尽きたら会社は即潰れるし、貰った金はいずれ100倍にして返すよう常に期限付きでプレッシャーをかけられる
そして見通しが厳しくなれば最終的にVCは事業の持続的成長を放棄した強引な方法で回収にかかる
dockerやanacondaがいい例だ
これは善い悪いという話ではなくスタートアップ企業の構造上の宿命なの
2025/04/24(木) 09:35:38.68ID:pnRjJMwb
この手のスタートアップは最終的に大手に買われるのがゴールとなるのが一般的だ。
企業の信頼性というのは理念ではなく企業体力 (資本力) で測られる。
個人ユーザ程度の些細なところでマネタイズしなくて良いくらいに資本がある会社が運用してくれるのがユーザとしては安心できるシナリオと言える。

オープンソースの一大拠点である Github だってマイクロソフト傘下なんだぞ。
638デフォルトの名無しさん
垢版 |
2025/04/24(木) 13:31:41.47ID:ndm7u60W
LibreOfficeのスレかと思った
2025/04/24(木) 14:34:38.61ID:8pJUwD28
MSになってgithubから脱出したOSSもあるけどな
2025/04/24(木) 17:58:43.83ID:XhsO3LV3
>>632
その件があったからuvとRuffのAstralはオープンを方針として明記していて
https://astral.sh/about
オープンさを大切にしてオープンソースで寛容なライセンスを信念として掲げている
だから開発コミュニティに協力してくれる人たちが集まってる
2025/04/24(木) 18:41:31.45ID:0duaLY4u
理念がどうあれ、事実としてVCから出資を受けてしまっている以上、必ずVCは利益を目的として意思決定に介入する
もし高尚な理念を本当にこの先守っていきたいなら、VCへの株式譲渡などせず財団方式で運営すべきだった
君の信心に対してとやかく言う筋合いはないが、君が信じているのは果たして誰なのか?は考えてみたほうがいいよ
2025/04/24(木) 20:59:08.21ID:/mu+RrCU
理念が期待通りに機能しないのは人間が悪いんだよ
理念が撃つのではない 人が撃つのだ
2025/04/24(木) 22:09:03.03ID:xYJ9bO0b
人間を襲ったクマを駆除するのか生け捕りにして山に還すのかどっちが正しいんか
2025/04/24(木) 22:13:28.49ID:B7M2FwrP
Astralって今はカネとってる商品一つもないの?
2025/04/24(木) 22:38:38.78ID:/mu+RrCU
>>643
そういうのを最もくよくよと考えてるのが中立
中立ではない人はわりと判断が早いよね
2025/04/25(金) 19:05:53.27ID:fabJEIST
中立でなくて中庸では?
2025/04/25(金) 20:10:42.17ID:FfAt1dci
>>643
検討の余地はない
2025/04/25(金) 20:50:10.25ID:DbDcSEbW
目の前に6億積まれてこの金で開発に集中していいよと言われたら断れないよね
創業者はSentryのシンパらしいからそのうちクラウドサービスでマネタイズを試みるんじゃないかな
ビッグテックが欲しがるのは基本的にプラットフォームであり、コードそのものにはあまり価値を認めないから、まずはクラウドを成功されられるか次第だろうな
2025/04/25(金) 23:36:31.47ID:9WzjZMyy
なるほど、合法な6億も違法な6億も、返せ返せと言われる点ではどっちもどっちだ
2025/04/25(金) 23:39:57.43ID:v7JcTsu2
Python方面でも最近の良いものは全てRust製なんだね
2025/04/26(土) 00:28:58.67ID:lxu0QMrc
uv以外ある?
2025/04/26(土) 00:29:47.79ID:lxu0QMrc
polarsだっけpandas的なやつ
653デフォルトの名無しさん
垢版 |
2025/04/26(土) 00:38:28.74ID:Ov7+kHPs
qiskitのrustが進んでる
654デフォルトの名無しさん
垢版 |
2025/04/26(土) 00:38:45.64ID:Ov7+kHPs
qiskitのrust化が進んでる
2025/04/26(土) 00:48:53.01ID:lxu0QMrc
量子コンピュティングか。何も分からん
656デフォルトの名無しさん
垢版 |
2025/04/26(土) 08:40:09.93ID:c5NITHBq
Python以外、例えばRubyのライブラリをRustで書くといった動きってあるの?
2025/04/26(土) 08:49:32.69ID:MQn0RGBc
RubyだとJITコンパイラ(YJIT)がRustで書かれてるね
2025/04/26(土) 09:38:41.16ID:iRBbkycD
完全にグルー言語と割り切って使われているPythonと違って、Rubyって未だに絶頂期の変なプライドを引きずってる人が多いからRustの採用は広まらなそう
yjitみたいに元々Cで書かれている部分を置き換える分には抵抗がないだろうけども
2025/04/26(土) 10:00:27.35ID:G2uFKMwF
rubyってmatzがcかc++で書いてたんでしょ?今のところ書き換える意味はないよ
仮に替えるとしてコンパイラを書き換える理由はなんだ?
rustで書いてみたかったとか
2025/04/26(土) 10:07:34.20ID:iRBbkycD
yjitはMRIと比較して普通に速い
もちろんRustだから速いのではなく、元々の実装がヘボいだけ
2025/04/26(土) 10:29:27.39ID:pbPDl6lv
ゆるゆるRubyをRustで描き治すなんて発狂しそう
2025/04/26(土) 10:59:05.36ID:4hz3gxa1
Pythonにしても元々Cで書かれていたライブラリのコア実装をRustに切り替えてるだけで、PythonからRustになったりはあまりしてないと思うが…
Rubyの場合pure Rubyなライブラリが多くてRustにできる余地が少ないイメージだけど実際どうなんだろうね
2025/04/26(土) 11:35:09.77ID:OmZIap2o
理念をどうこう言っても理念通りにいかないのも普通のこと。
現実はトレードオフの連続で、微妙な判断の連続を繰り返したら汚くもなってくる。
「綺麗なのは使われてないものだけ」という格言もある。
不恰好なのは現実の道具として使われてきた証とも言える。

ただ、現実の事情は変わっていくからね。
昔の現実に合わせたものが今の事情にマッチしなくなっていく。
プログラミング言語だってたまには新しいものが現れて過去をリセットしつつまた汚く (しかし現実に都合よく) なっていくんだろう。
2025/04/26(土) 11:35:21.29ID:tLquDHIY
改善点無しで書き換えるのはやらん方が良い
2025/04/26(土) 11:37:10.07ID:Opf+QDvF
多神教、二元論はピュアじゃないとか、データさえあればプログラミングは不要とかいう一元論は今でも絶頂期
2025/04/26(土) 12:05:07.12ID:EVE9ATPb
実際、業務システムならDBが全て
ドメイン駆動とかほざくアホは無視し、Postgres上で徹底的に業務ルールを定義するのが最善
2025/04/26(土) 13:13:44.82ID:8siE2IDQ
結局Rustはなにならできるの?
2025/04/26(土) 13:33:53.91ID:KvigRu5f
全部出来るでしょ。ただC並みに細かくなるので、業務アプリレベルのものは、GC付き業務フレームワークのPythonやrubyでいいよ
2025/04/26(土) 13:34:17.50ID:KvigRu5f
アプリ用DSLか
2025/04/26(土) 13:44:16.81ID:N0vsCMMC
>>667
Rubyを高速に動かすために不可欠なYJITがRust製
2025/04/26(土) 14:26:52.65ID:EVE9ATPb
>>667
主に、有効であることが既に確認されている既存のソリューションの高速化に用いられる。
新規性の高い未確立なソリューションの開発に用いられることは少ない。
Rustは信頼性とパフォーマスに優れている一方で、柔軟性が乏しいため試行錯誤の必要な開発には向かないと思われているのだろう。
もちろん異論はあるだろうが、実態としてな。
2025/04/26(土) 14:42:28.20ID:N0vsCMMC
>>671
それは真逆だ
Rustでの開発は柔軟性が高いため
新たな設計による機能強化や高速化などにRustが用いられている
一方で単なる既存の書き換えだけではどの言語間でも効果は限られる
スクリプト言語からRustへ移植する場合でも少なくとも中核部分はそのままよりも設計し直した方がより高速化と省メモリに繋がる
2025/04/26(土) 14:59:40.76ID:KvigRu5f
CとGC言語両方経験者ならすぐ分かるような質問多いね
精進頑張って
2025/04/26(土) 15:12:31.71ID:G2uFKMwF
全レスにそれってあなたの感想ですよねって返されても何も言えない

図書館言ったらプログラム書籍のコーナーが1つ棚が減っていてその分AI等の書籍の棚が出来ていた
どこにこんなに本があったのかと
ゴミみたいなRust入門書とPython入門書などが書庫行きになってた
2025/04/26(土) 15:37:01.99ID:Opf+QDvF
個人の感想とか個人の試行錯誤は良いぞ
全体主義的な試行錯誤はダメだ
2025/04/26(土) 15:58:41.44ID:IX/fzv3g
>>674
>プログラム書籍のコーナーが1つ棚が減っていて

PearlとかRubyとかPHPとかJavaとか減っていけ
2025/04/26(土) 16:18:14.26ID:OmZIap2o
>>671
新規性が高いというのはユーザを抱えていないということでしょ。
結果的に観測されにくいってだけじゃね?
2025/04/26(土) 16:27:16.63ID:G2uFKMwF
ソースが短い内容なのに実行時ランタイムが必要な奴を置き換えてる
2025/04/26(土) 17:16:17.24ID:Opf+QDvF
観測が任務だったのにろくに観測しない
1話でやったやつを見てない
0話切り
2025/04/26(土) 17:41:13.28ID:Ov7+kHPs
>>675
塞翁が馬でどうなるかわからないな
俺が抑圧されたら反抗するが
2025/04/26(土) 17:51:31.23ID:Cl6IuO5W
コード書きなよ。そして考える。読んで考える
2025/04/26(土) 18:04:49.72ID:OmZIap2o
>>678
これは割と効いてくるので良い方針だと思う。
いまどきは Ruby でも JavaScript でも JIT でかなり高速化してるんだけど、 JIT だと何度も通過する内にだんだんネイティブコードに置き換わっていく仕組みだからガッと動いてすぐ終わるようなコードだとぜんぜん JIT の恩恵がない。
それでいてそこそこ大きいランタイムのロードには時間がかかるからあまり向いてないんだよね。
2025/04/26(土) 18:05:29.29ID:iRBbkycD
>>672
そんなもん完成形は目の前にあるんだから、頻繁に大規模な手戻りが発生するようなら設計した奴が無能なだけ
スタートアップなんかでのガチで新規性の高い開発ってのは、そもそも作っているものに価値が無い可能性が高い
そのような性質の開発にRustは適していると思う?
俺自身の意見はともかく、現状その問いにYesと言えるだけの実績がRustに無いのは事実だ
2025/04/26(土) 18:06:58.12ID:SE+oHzey
WebブラウザWasm、CDN Edge、クラウドなどもRustが言語筆頭候補の領域
2025/04/26(土) 18:21:45.82ID:Vj7XK48K
rustから他の言語に書き直すのは大変そう
2025/04/26(土) 18:50:24.41ID:vxR7V27Y
>>658
RubyのYJITはC言語で書かれていたMJITを単にRustへ移植したのではなくて全く別のアプローチ
YJITを作ったShopifyの研究開発チームがYJITの論文も発表しているよ

>>683
スタートアップが新規に開発でRustなら既に話題になってるPythonのruffやuvも該当するね
2025/04/26(土) 19:24:47.94ID:iRBbkycD
YJITやuvやruffが新規なのか
別に煽るつもりも否定するつもりもないのだけど、平均的なRust開発者の認識がそうなんだとしたら、Rustは実際にそういう言語なんだろうね
2025/04/26(土) 19:37:07.61ID:ZNj+yWV2
276,406行のC++コードを捨ててRustへ移行したスタートアップの技術的決断
https://zenn.dev/rwcolinpeng/articles/14760991836800
689デフォルトの名無しさん
垢版 |
2025/04/26(土) 19:40:30.88ID:oUxoHCOL
Cからrustへの書き換えはわりとうまく行きそうだけどC++からだとしんどそう
2025/04/26(土) 19:49:20.55ID:7Pa19F9r
スタートアップでも開発効率の高いRustを採用する方が当然有利ってことだな
2025/04/26(土) 21:18:45.78ID:Opf+QDvF
試行錯誤ってカーゴカルトを正当化するんだな
滑走路作ってみな
飛ぶぞ
2025/04/26(土) 21:47:38.26ID:w8ZEIOp2
別の視点でスタートアップであろうとなかろうと
競合相手がいて他の条件がほぼ同等ならRustを採用した方がおそらく有利っぽい
速度の面でも使用リソースの面でも
2025/04/26(土) 22:16:38.86ID:Cl6IuO5W
開発者が優秀だからじゃないか
同じ人が開発する時の速度に影響するかなあ
2025/04/26(土) 22:43:45.38ID:BBm+0pf8
kindle 日替わり500円
2025/04/26(土) 23:08:38.66ID:ZxsqU4Rq
Cのままだとライセンス違反になりそうなグレーゾーンをRustで書き換えて解決ってか
2025/04/26(土) 23:13:16.03ID:aIZ11R/f
言語を書き換えてもライセンス抵触なら無意味
それ以前にいまどき落とし穴の未定義動作だらけにC言語なんて使うのはコンパイラ指定な特殊な組み込み環境くらいだろ
2025/04/26(土) 23:22:10.41ID:ZxsqU4Rq
>>689
その通りなんだがC++の機能にどの程度依存してたかだな
2025/04/26(土) 23:40:40.79ID:Ov7+kHPs
>>695
freebsdカーネルは完全にgcc捨ててllvm化が終わってる
2025/04/27(日) 05:42:31.77ID:68J8pPED
>>688
C++エキスパートなら、必要なスキルが揃っているから移行コストが少ない、というのがデカイね。

逆にC++で大規模開発するのにコーティング規約を決めてなかったみたいだから、コーダーが好きにやって破綻している感じもある。
C++標準化委員会は標準的なコーティング規約を決めた方がいいんだろうけど、宗教戦争になりかねないから難しいか。
2025/04/27(日) 06:03:34.96ID:3KVBTXf3
C++を完全に捨てるしかなかったな

>>688
>>C++ はプログラマーに多くの柔軟性を与えますが、それには代償が伴います。バグを埋め込むのが非常に簡単であり、その多くは非常に厄介です。しかし、それ以上に C++ プログラムのデバッグは非常に困難です。特に並行プログラミングにおいてはなおさらです。

>>依存関係の管理が面倒です。たとえば CMake のように、C++ プロジェクトのコンパイルを自動構成するツールはありますが、開発者は依存ライブラリの構成やインストールを手動で行う必要があります。

>>標準テンプレートライブラリ(STL)は、たとえばネイティブなコルーチンのサポートなど、モダンプログラミングの一部ツールに対応していません。その結果、開発者は多くのコミュニティプロジェクトに依存せざるを得ず、これらの多くは長期的なサポートがありません。

>>品質保証が難しいです。C++ は非常に多機能な言語であるがゆえに、開発者ごとにまったく異なるコーディングスタイルで C++ を書いてしまう傾向があります。異なるバックグラウンドを持つ開発者がチームに増えると、コードの可読性を維持できなくなりました。さらに、C++ コードのバグは簡単には特定できず、コードレビューが非常に困難になる原因でもありました。
2025/04/27(日) 06:08:20.98ID:Vt2v/90n
>>688
C++エキスパートかどうかは何も痕跡がないな
むしろJava屋さんじゃね(Initial commit)
https://github.com/risingwavelabs/risingwave/tree/cb527ae81e9d9f51010da4b16ad9101447b7670b
2025/04/27(日) 06:20:56.04ID:Ytmxd4+G
>>688
こういう極端な例しか出て来ないよね
2025/04/27(日) 06:23:06.49ID:EwmWReBG
>>688
今となっては何もかも劣るC++を使うメリット無いからな
ましてやそのような最近のシステムなら非同期並列が必須なのでC++だと茨の道
2025/04/27(日) 07:51:33.32ID:Mi41ddJF
libuvを使うのじゃ
全くおすすめできない
2025/04/27(日) 07:52:41.59ID:Mi41ddJF
非同期並列並行が標準装備なんて恵まれた言語ばかりになってグスン
2025/04/27(日) 08:04:58.94ID:X0KzsrtM
設計の見直しがあるとRustは辛いよなぁ
Goのほうが柔軟な気がする
707デフォルトの名無しさん
垢版 |
2025/04/27(日) 09:24:24.45ID:PvBOOBWE
Kotlin もよろしく
2025/04/27(日) 09:26:48.67ID:gUGAvcfj
Oracle怖いので
2025/04/27(日) 10:46:11.91ID:RSOujG5D
> 開発者は多くのコミュニティプロジェクトに依存せざるを得ず、これらの多くは長期的なサポートがありません。

これを理由にしてRustへ行くのはちょっと本末転倒感あるけどなあ
数年後には、古くなったcrateに縛られてモダンでクールな〇〇をイントロデュースするのベリーハードだぜフ〇ックとかブツブツ言ってるだろうな
2025/04/27(日) 10:48:58.05ID:UOWnN6XZ
処理系のサポートは重要だよね
IntelのCコンパイラ使ってるプロジェクトあったな
最適化の都合かもしれんけど
2025/04/27(日) 11:29:27.41ID:oHyIRNV3
新しいものの方が魅力的に映るのは当然のことだが、当面の最大のリスクはRustより魅力的な言語が出現したときにどうなるか、だな
>>688の例でも必死に言い繕っているように、新しいものを使いたかっただけではなく真の合理的判断の結果であれば問題にならないはずだが、果たして本当にそうだったのかはそのときに明らかになる
Rustがいかに優れていようと、その時はいずれ必ず来るわけだが、Rustエコシステムは未だそれを経験していない
2025/04/27(日) 11:31:45.33ID:gUGAvcfj
それを言ったら、CもJavaも出だしの頃は散々使えないって言われてたので。自己責任で腹を据えるしか無い
2025/04/27(日) 11:33:37.49ID:gUGAvcfj
zigは難しいし、まあRustの20年が始まるよ。
2025/04/27(日) 12:18:30.81ID:bBpGWVZ5
RustのようにCと同等の速さを出すことが可能で
Rustよりも安全な言語は当面出現しそうにない
C言語からRust出現まで43年間かかった
そしてC出現から53年たった現在もCも使われているように
50年後もRustは使われているだろう
2025/04/27(日) 12:39:43.81ID:gUGAvcfj
実現したとしてもRustと同程度の2番煎じじゃ意味ないのよね
Rustでは出来ない問題を解決しなきゃ
2025/04/27(日) 13:04:11.13ID:DF5I7qXF
> Rustでは出来ない問題

未知の新言語に誰にでも使える容易さがあればRustは消えることになる
2025/04/27(日) 13:16:54.38ID:gUGAvcfj
50年後かな
2025/04/27(日) 13:55:43.56ID:rRExk4WB
>>709
Rustも放置cratesだらけだよな
2025/04/27(日) 14:05:22.78ID:iLjF0beD
少なくともC/Rustと同等の速さ省メモリでRustの安全性を満たす言語というのが最低限の条件だから超難関だよな
今のC/Javaの立ち位置と同様に数十年間はRustの時代が続きそうだ
2025/04/27(日) 14:17:14.93ID:DF5I7qXF
これからの言語でダングリングやメモリリークが容易に解消できるようなAIエディタかAIコンパイラが出てきたら
Rustは安泰なのだろうか?

c++は人間には早すぎたし記述性が悪いけど記述性が良くてメモリを完全に制御可能なAIコンパイラを持つ言語が出てきたらどうなるのかは不明
2025/04/27(日) 14:28:13.70ID:FZdQbkSH
>>720
そのダングリングやメモリリークが容易に解消できるようにしたコンパイラがRust
その記述性が良くてメモリを完全に制御可能な言語がRust
AIにコードを書かせるならばRustが最も望ましく相性も良い
可読性も良いから人間がチェックしやすくメンテもしやすい
2025/04/27(日) 14:37:02.73ID:oHyIRNV3
超高水準言語から直接(人間による理解や編集を意図した中間表現を介さないという意味で)実行可能バイナリを生成するAIが、
Rustをパフォーマスや信頼性で凌駕する日はそう遠くないだろうね
パイプラインにおける内部的な中間表現としてRustが採用されることはありうるが、もはや人間にとってはどうでもいいことだ
2025/04/27(日) 14:38:49.51ID:0aN/b0Iq
>>720
そりゃいつか次の覇権言語は出てくるよ。
ずっとというのはあり得ないというのは当然の前提。
でも、やらなきゃいけないことは目の前にあって今ある言語から選定しなきゃしょうがないだろ。
2025/04/27(日) 14:43:44.86ID:FZdQbkSH
>>722
人類がAIに支配されないためには必ず人類がチェックできる形で運用される
AIに吐かせる最善の言語Rustを読み書きできるかどうかが今後の生き残るプログラマの必須条件となる
AIに遅い言語のコードを吐かせても無意味
725デフォルトの名無しさん
垢版 |
2025/04/27(日) 15:00:33.83ID:rRExk4WB
AIちゃんに夢観過ぎ
Rustを課題評価し過ぎ
2025/04/27(日) 16:04:39.65ID:0aN/b0Iq
当面 (半世紀くらい) のAI は人無しでそこそこの規模のプログラムを自律的に完成させられるほど高度にはならないと予想する。
単純にコストに対して割に合わないから。
人に教育したほうがマシだし、 現状の AI 程度でも補助として使えばかなりハードルは下がっている。
AI に必要な電力がかなり大きいことがわかってきて、理論の発展で計算量を抑えられる余地もあまりないのでより発展させるにはより多くのエネルギを投入するしかない。
2025/04/27(日) 16:22:32.90ID:jrwbPW8D
後のAI時代でもそれまでの現在でもRustが最適な点で強いね
速さと使いやすさと安全性で他に代わるものがない
2025/04/27(日) 16:24:48.87ID:DF5I7qXF
>>721
それを人間じゃなくてコンパイラやエディタが自律的に解消できるようになるのが次世代言語だと思う
2025/04/27(日) 16:28:25.84ID:jrwbPW8D
>>728
言語はそのままRustでいいよね
他に候補でもあるの?
2025/04/27(日) 16:37:08.79ID:DF5I7qXF
コンパイラ以前に他人と言葉が通じない人間がいる
2025/04/27(日) 16:58:02.84ID:jrwbPW8D
AIがRustプログラミングの補助やコード生成するわけだろ
Rustより良い言語の候補でもあるの?
2025/04/27(日) 17:00:26.65ID:DF5I7qXF
コードは書くだけじゃなくてコードリーディングする必要がある
現在のrustのままだと結局学習しなくてはならないから一般人には向いてない
2025/04/27(日) 17:02:23.79ID:0aN/b0Iq
>>732
全くの素人まで読めるべきなんてのは無理だろ。
日本人だって A4 一枚程度の日本語で書かれた契約書を読めないのがかなりの割合でいる。
734デフォルトの名無しさん
垢版 |
2025/04/27(日) 17:03:14.27ID:AFXJD6qk
次世代の言語が出るとしたら「AIの支援を多く受けられる」を標榜するものになると思う
けど、「次の言語」はもう出ないのではないかという見方もある
みんながAIを使うようになると、AIが良いコードを生成しやすい言語が選ばれるようになり、現時点でAIが未学習の新言語はますます選ばれないだろうという見方
未来は分からないけど、今後どうなるんだろうな
2025/04/27(日) 17:03:49.55ID:DF5I7qXF
>>733
javaやjsレベルで良い言語に置き換わると思う
それを避けるためにはrust自体が形を変える必要がある
2025/04/27(日) 17:22:21.32ID:jrwbPW8D
>>732
可読性と保守性に優れているRustより良い言語があるなら教えて

>>735
呆れた
なぜそんな古くて使いにくいJavaやJavaScriptに戻るんだ?
2025/04/27(日) 17:25:13.85ID:i1fb9OUg
はいはいrust最強
2025/04/27(日) 17:40:43.10ID:DF5I7qXF
>>730
2025/04/27(日) 17:45:37.44ID:jlBc2dWq
ちょっと前に「Rustが嫌いです」ってZennであったけど,Rustの弱点をうまく捉えてたな
このスレで「Rustで書けば理論上バグは混入しない」とか言ってるエアプよりしっかり勉強してるんじゃないかな
2025/04/27(日) 17:59:42.25ID:Mi41ddJF
ロジック的なバグだけになる。ということだから、Cレベルのしょうもないバグを直した人しかその意味は捉えられないと思うよ
2025/04/27(日) 18:19:07.13ID:kInycGWP
>>735
モダンな言語を理解して使いこなせる普通のプログラマーから見るとjavaやjsは悪い言語
javaやjsを良い言語と書いてるあなたはモダンな言語を理解できていない低質なプログラマー
このスレに来る資格すらない老害
2025/04/27(日) 18:19:57.09ID:kInycGWP
>>739
あの人はガベージコレクション前提の言語しか使いこなした経験のない浅いプログラマーだった
そのためあのような見当外れな疑問や不満が生じた
記事にRustの弱点は書かれていない
2025/04/27(日) 18:24:19.35ID:wtLp04RM
対話は必要不可欠ではないけどね
特に、被造物ではないものを理解するとき、
作者を特定して作者と対話(ディール)するという方法はナンセンスになる
2025/04/27(日) 18:24:21.34ID:DF5I7qXF
>>741
モダンと言うのはだいたいC++が持ち出して来た概念であって
それに当てはまらないなら遅れているとか悪いとか言うのは見当違いだとわかるはず
2025/04/27(日) 18:37:48.95ID:kBhEh79C
>>744
「モダンはC++が持ち出してきた概念」はウソでしょ
例えばC++20のrange導入などでようやくC++も他より遅れてモダンになってきたけど
C++プログラマーのほとんどはまだ理解していなくて使えないよね
746デフォルトの名無しさん
垢版 |
2025/04/27(日) 18:42:03.43ID:AFXJD6qk
C++以外の言語でもモダンという表現は使うぞ
モダンJavaとかモダンC#という表現は聞くし

「古い言語に追加された新しい書き方」という意味でなく、本当に新しい言語かつ人気のものとなると Go, Rust, TypeScript, Kotlin くらいじゃない?
どれもだいぶ特性の異なる言語だから、「モダンな言語では〜」といって共通認識になる概念ってあまり無いと思う
2025/04/27(日) 18:47:36.67ID:DF5I7qXF
それだけ理解していればモダンな言語と言うのは虚像だとわかるはず
2025/04/27(日) 18:48:57.82ID:DF5I7qXF
それに今気が付いたけどおじいちゃんは勘違いしてる
javaやjsを良い言語だとは一言も言ってない
2025/04/27(日) 18:50:47.27ID:DF5I7qXF
Rustの一番の弱点は学習に時間がかかること
2025/04/27(日) 18:55:49.11ID:kBhEh79C
そのへんのモダンなGC言語の知識と
C++11でいいからmoveからshared_ptrまでのメモリ管理の知識さえあれば
Rustに難しい面は何も無いと思うんだけど
Rustの学習が難しいと主張してる人は何が難しいの??
2025/04/27(日) 18:57:07.46ID:kBhEh79C
>>749
それはあなたがC++11のメモリ管理もモダンな言語も理解できていないからでしょ?
752デフォルトの名無しさん
垢版 |
2025/04/27(日) 18:57:50.17ID:AFXJD6qk
可読性ならGoは高い
あれは「読み手に優しい」と言われる言語で、書く分には冗長で面倒だけど、そこをAIにやらせるなら読みやすさやレビューしやすさは強みになる

Rustは型の表現力が強くて、型がドキュメントになる
それ自体は強みだけど、理解するまでは大変
Arc<Mutex<_>> とか impl FnOnce とか、分かる人にとっては meaningful だけど、そこに至るまでにはある程度の素養と時間が必要ではある
753デフォルトの名無しさん
垢版 |
2025/04/27(日) 19:05:12.57ID:AFXJD6qk
>>751
「お前らバカにはRustを理解できまい」みたいな思想があるなら、それこそRustの弱点じゃないの?
あなたのいう「良い言語」って、例えば「ジュニアクラスの開発者も含むチームで、どの技術を使うとサービスを開発・保守しやすいか」みたいな観点での価値判断をまるっきり排除してるでしょ?
2025/04/27(日) 19:09:59.10ID:DF5I7qXF
おじいはいくら言われても言葉が通じないから無駄
2025/04/27(日) 19:10:10.15ID:kBhEh79C
>>753
大昔の「C++11のメモリ管理」と
今普通に使われている「モダンな言語」を理解できていれば
Rustの学習に困ることは何も無いんだよ
それらを理解していてRustの学習で困った人はいないよ
2025/04/27(日) 19:13:10.29ID:DF5I7qXF
Rustを使うには様々な概念及び実際のコーディングテクニックを習得しなくてはならない
それがハードル

そのハードルを恐らく可能な限り低くするか無くすで在ろう存在がAIなどの補助を受けた次世代言語
2025/04/27(日) 19:15:07.05ID:wtLp04RM
Javaにたとえると
intはObjectではないとかintはポインタではないとかが難しいね

整数もオブジェクトにしてしまうスクリプトが最もユーザーフレンドリー
2025/04/27(日) 19:32:31.58ID:y/d9q7Zt
>>757
そういう全ての型をオブジェクトへのポインタとして扱う言語は非効率なのでRustに勝つことはを絶対に不可能だよん
759デフォルトの名無しさん
垢版 |
2025/04/27(日) 19:37:46.28ID:AFXJD6qk
Fn, FnMut, FnOnce とか Box, Rc, Arc の区別って、GCのある言語ならそもそも必要のないものだからな
Rustのメモリモデルでは必要だけど、無くて済むならその方が楽だろ
GCを避けたい人のための言語であって、簡単さや分かりやすさを目指した言語ではないよ
2025/04/27(日) 19:46:27.37ID:5IY8oWQm
Rustは他の言語で苦労しないと存在意義が分からない要素が多くて学習曲線が絶壁になってる
別言語を踏み台にしないと登れないレベル

Goはシンプルな言語だけどC++/Javaが例外を導入した経緯を無視して例外を取っ払ったから
例えばchdirの成否判定を忘れたまま処理を継続するようなC言語時代のバグを復活させてしまった
(RustもResultのmust_useで警告出すだけだから警告無視勢は救えないけど)
2025/04/27(日) 19:46:33.19ID:wrVeCsQy
>>759
Rustを置き換えることのできる言語の話をしている場でそんなアホな意見はない
GC言語しか使えないお子様プログラマーはお呼びでない
2025/04/27(日) 20:00:29.67ID:wrVeCsQy
>>759
あと、FnとFnMutの違いは環境キャプチャ参照が不変か可変の差なのでGCの有無は関係ない
RcとArcの違いは並列時のアトミック性の保証の差なのでGCは関係ない
2025/04/27(日) 20:13:51.24ID:DF5I7qXF
世界中のプログラマが容易にRustを理解出来るならジジイが今すぐ世界を回ってすべてのプロジェクトを止めさせて
Rustで書けと言って回ればいいじゃないか?

特にC++とか
764デフォルトの名無しさん
垢版 |
2025/04/27(日) 20:16:02.23ID:ZOVCNh+7
>>714
WindowsではMicrosoftがネイティヴ・コードを生成するC#コンパイラを作ればC#がそうなる。
MacではSwiftが既にある。

>>736
Rustは可読性が低すぎるだろ。COBOLとアセンブリ言語を混ぜて、ゴテゴテした記号を散りばめたような感じ。
2025/04/27(日) 20:31:16.89ID:xt2DuFOL
>>764
C#はGC言語だから無理だよ

Swiftはリファレンスカウンタ方式なのでGC言語の1種と見ることもできるね
C++/Rustから見るとshared_ptr/Arcを常用する重い方式なのでSwiftが遅いのはそのため

Rustは可読性が高いよ
どの言語もその言語を知らない人にとっては呪文に見えるのは当たり前だよ
可読性の高い低いはその各言語を使いこなせる人にとってどうかが判断基準だよ
2025/04/27(日) 20:41:03.96ID:RSOujG5D
読むときにノイズが多いのは事実だと思うよ
BoxとかArcとかdynとかはコードの機能的な側面だけをざっと理解したいときには鬱陶しく感じる
2025/04/27(日) 20:46:59.09ID:0aN/b0Iq
>>735
まあ仮に、仮にそれくらいのレベルの言語を AI が人向けに生成するのをスタンダードにしたら低レイヤは全然書けないことになる。
結局は用途によって使い分けるしかない。
2025/04/27(日) 20:52:56.47ID:xt2DuFOL
>>766
それはRustのコーティングしたことがないから勘違いしてるんじゃないかなー
RustではBoxであろうがArcであろうがスタック上の値であろうが、区別は一切なく他の関数に渡す時は単なる参照&Tになるからコード上でノイズにならないんだよ
Boxを作って返す時またはBox固有の機能を使うというレアケースのみBoxが出てくるだけだね
769デフォルトの名無しさん
垢版 |
2025/04/27(日) 21:28:49.41ID:AFXJD6qk
このスレで実際に自分のいる組織やチームの開発言語をRustに変更できた人ってどれくらいいるの?
小さいプロジェクトや個人なら好きにできるけど、実際なかなか難しいのでは
2025/04/27(日) 21:34:07.27ID:Mi41ddJF
PHPからGoにするのも難しいよ。Pythonは皆出来る
771デフォルトの名無しさん
垢版 |
2025/04/27(日) 21:38:12.88ID:EEDqpxPk
5chもperlやめてRUSTで書き換えてくれ
2025/04/27(日) 21:39:18.11ID:Mi41ddJF
まだperlで消耗してるのw
アラフィフだけどもう使わないし読めない
2025/04/27(日) 21:50:42.18ID:RQi02CYb
>>734
パイチョンとかblackでガチガチにコードスタイル決めてるからaiが扱うコードとしては有利だろうな
2025/04/27(日) 23:35:08.03ID:/q0dsRVF
>>769
今まであちこち見たり体験したりしてきてると
どの言語でもどのフレームワークやサービス類でも言われて義務的に学習し始める人が多い環境はダメ
良さそうなものが出た時に興味を持って自分から学習し始める人が多い環境は行ける
後者はまだ手を出してない新たなものに対しても対応力が高い
前者の環境でくすぶってる人は抜け出した方がよさそう
2025/04/27(日) 23:38:14.26ID:gUGAvcfj
後者は変態だね。変態揃ってます。という採用アピールしよう
2025/04/28(月) 00:33:05.01ID:gd16jUat
ノイズが多い説が面白いのは、ノイズを学習する義務なんてあるわけがないから
そんなことを知っているのは物好きだけだと言えるところ
777デフォルトの名無しさん
垢版 |
2025/04/28(月) 02:54:28.25ID:hDmEwqG0
>>751
>それはあなたがC++11のメモリ管理もモダンな言語も理解

C++もモダンな言語もそれらはそれら自身でメモリ管理もモダンな処理も理解出来るのに
RustはRust以外のC++やモダンな言語で先にそちの理解を済ませないとRust自身で理解が完結出来ないと言ってるんですねわかります
Rustの欠陥じゃまいか
2025/04/28(月) 05:10:35.52ID:EkWxmo4a
>>777
どちらも各々は容易に学習できる
だから片方を知っていればRustの学習は容易く問題になっていない

もちろんどちらも知らない人たちも多いのだ
別方面のその二つを同時に学習することになるため難易度が高くなる
そのためRustは難しいと感じてしまう
しかしそんな無茶な学習方法をするのが悪いのだ

良い学習方法は段階的に学習することだ
そこには様々なやり方がある
例えば
2025/04/28(月) 05:15:04.65ID:EkWxmo4a
>>778の続き
良い学習方法は段階的に学習することだ
例えばヒープを一切使わずに数値型と配列だけでも非常に多くの学習と練習ができる

イテレータメソッドチェーンでクロージャを渡して処理するなどの経験をしたことがなければ学習できる
さらに自分でイテレータを作るのもIteratorトレイトのメソッド実装という良い学習になる
さらに自分定義のトレイト作ってその自作イテレータをメソッド化するのも良いだろう
次はそれらをi32型などで作ってきたところの型を整数型一般にジェネリック化をすることでトレイト境界の意義もよくわかるだろう

このようにヒープを一切使わなくても数値型と配列だけでもRustの学習をどんどん進めることができる
以上の制約があまりにキツいならcollectでVecを生成するなどならばヒープを使ってもメモリ管理まで気にしなくて済む

そしてRustの機能を一通り学んだ後にようやくヒープを本格的に用いてメモリ管理分野の学習に入ればよい
段階的に学べばRustは難しくない
2025/04/28(月) 06:40:53.40ID:ic5UWCA9
境界知能の次はコレ?
2025/04/28(月) 08:33:19.21ID:LU5KMJmp
将来のAI前提なら、無駄に抽象度の高いコードは廃れて把握しやすいグラフ中心だろ。

ユースケース図くらいかせいぜいUMLで、フローチャートレベルの実装詳細はライブラリアンくらいしか触らないんじゃないんかね。
782デフォルトの名無しさん
垢版 |
2025/04/28(月) 09:19:52.67ID:AuNLagCl
>>755
Eustの習得にそれらの条件が前提として必要なら
それはRystがC++に劣ると認めてるということになるがそれでいいのか
783デフォルトの名無しさん
垢版 |
2025/04/28(月) 09:22:16.38ID:AuNLagCl
>>739
30年前と違って今はweb系から先にプログラミング入門しちゃう人がいるんだな
2025/04/28(月) 09:27:48.27ID:DzCqdkTm
>>780
ずっと境界知能だが
2025/04/28(月) 09:38:56.02ID:8CAU371s
>>782
Rustを学ぶのにC++の知識は全く不要
Rustはムーブも所有権もあっさり単純化されてる
むしろ複雑化しているC++の知識があるとかえって混乱する人もいれば
すぐにRustでは非常にシンプルになってると気付く人もいる

スタック領域とヒープ領域の違いといった現在のコンピューターの基本常識を身に着けていればRustの学習は大丈夫
ただし何のためにそんなことしているのか必要性の納得がいかない人は自分でCでmalloc()とfree()を使ってプログラムを書いてみる体験するしかないね
2025/04/28(月) 09:41:49.31ID:xqBJYdnj
>>781
英語圏のエンジニアはどっかの島猿と違って図表より文章を好む傾向があるから、メインストリームがそっちに行くことはないよ
ひたすら構造化されたプロンプトを書く形になると思う
2025/04/28(月) 10:06:05.66ID:L3M/APjY
英語圏のパッケージソフトやOSS等のドキュメントを読んでると日本がITで勝てない理由がよくわかるよね
論理的な言語能力が段違い
奴らRedditの便所の落書きですら関心するくらい論理的かつ丁寧だからな
2025/04/28(月) 10:34:28.00ID:gd16jUat
時間の使い方がおかしいんじゃないの
プロが1分で思いついたムーブが、アマチュアが何時間か探索した手に勝てる保証は全くない
2025/04/28(月) 13:19:02.28ID:uQHt/LFN
>>783
今はそんな子ばかりだよ。Javaも触ってないから型付き言語に憧れる。GoぐらいにしとけばいいのにRustやって恨み言を言ってるようだが、それはそう
790デフォルトの名無しさん
垢版 |
2025/04/28(月) 21:56:45.28ID:W90Pka9c
スレ読んでたら、今更Trait制約などと宣う馬鹿が居て驚いた
2025/04/28(月) 22:03:15.48ID:LU5KMJmp
制約でも境界でもどちらでもいいからとっととthe rust book 最新版を翻訳して用語を統一しとけ。

最初に翻訳した方を使うことにするわ。
2025/04/28(月) 23:45:26.03ID:VLo3P2tE
>>779
そういう段階を踏んだ学習をすればRustをほとんどの人が理解できるだろうけど下層プログラマーだけは理解できないと思う
下層プログラマーは既に現在のAIでもうすぐ不要となる人たちだから問題はなさそう
793デフォルトの名無しさん
垢版 |
2025/04/29(火) 00:00:51.63ID:qhqmYF5L
プログラミングの学習ってそれだけじゃないからな
ジュニアクラスのエンジニアに仕事を教える上で、メモリ管理などの低レベルの技術を教えるよりも、Webの仕組み (インフラだったり、フロントエンドのフレームワークだったり) を教えた方が戦力として役立つという組織も多いだろう
もちろんRustが必要な分野もあるけど、そうでないならRustに時間をかけるより、もっと製品やサービスの開発に直結するものを学んだ方が効率が良い場面も多い
794デフォルトの名無しさん
垢版 |
2025/04/29(火) 00:15:51.93ID:qhqmYF5L
自分はWeb系詳しくないから分からんけど、他の言語に比べて特筆して使いやすいフレームワーク (ツールが揃ってるとか、学習リソースが多いなどの点も含めて) があるわけでもないでしょ?
言語の構文よりも、フレームワークの使いやすさや導入しやすさの方が技術選定の上では重要なはず

高パフォーマンスが必要な分野でC++よりもすっと開発しやすい言語だというのはそう
2025/04/29(火) 00:48:55.50ID:MtXZxAjC
合格ラインギリギリを狙うのが最高に効率が良い
多分AIもギリギリ驚いてあげてもいいレベルで止まる
2025/04/29(火) 01:09:26.08ID:4awPUBx2
効率最重視なら当然ギリギリ合格するかどうかという水準がベスト
でも効率最重視より突き詰めて設計したいよね
マージンあった方が安心だぜ
2025/04/29(火) 02:08:43.12ID:Norf50c9
>>794
RustのWebフレームワークね。
どの言語でも同じようなもんだし、非同期やると余計に難しいから、Rust選ぶ利点少ないと思うよ
2025/04/29(火) 02:43:09.44ID:Evjw1qeU
>>794
クラウドでは CPU やメモリに課金される。
クラウド上のサービスは経営者から金の動きの形で観測できるので高パフォーマンスを求める圧力が強くなってる。
ユーザから見た性能としては必要なくてもコストというわかりやすいビジネス的要因が絡んでる。
サービスの規模によるがウェブは高パフォーマンスが必要な分野なんだよ。
2025/04/29(火) 02:47:28.58ID:Norf50c9
アクセス多いサービスはいいなあ
サーバ代10万くらいで済むと経営からの圧力など無い🥺
2025/04/29(火) 02:57:41.06ID:KZALrqD+
>>690 >>797
スタートアップを含めてWebバックエンドでRustを採用すべき理由としてよくまとまってるとされてるのがこれ

https://dockyard.com/blog/2025/03/18/why-rust-is-winning-backend-systems-startup-must-know

Web関係はフロントエンドのJS/TS部分を除いてRustが最善解
801デフォルトの名無しさん
垢版 |
2025/04/29(火) 07:14:39.79ID:qhqmYF5L
Rustが辛いという記事も同様に見つかるね
3年間使った上で最終的にRustを手放したという話なんかは、多分あなたよりもずっと真面目にRustに向き合った上でこの結論を出してると思うよ

https://www.propelauth.com/post/i-love-building-a-startup-in-rust-i-wouldnt-pick-it-again
https://loglog.games/blog/leaving-rust-gamedev/
https://deadmoney.gg/news/articles/migrating-away-from-rust

当然だけど「最高の言語」なんてものは無い
それは組織やプロジェクトの特性によるし、開発者が個々に判断すべき話
(Rustがそうでないのと同様に、Goが最高だとかC#が最高だとか、そんなものもあり得ない)
2025/04/29(火) 07:59:59.47ID:4awPUBx2
>>801
英語サイト苦手で読めないけどこれワラタ
96 minute read

一ブログ記事は2分ぐらいで読めないと最適化した記事書けるプログラマーとは思ってもらえない世の中で長文な
2025/04/29(火) 08:10:37.04ID:SlclBfrE
コンパイルの遅さ、中間生成物のでかさ、データ構造の変更に弱い、並列性周りのキャッチアップ
このあたりはRustの弱点よな
2025/04/29(火) 08:11:53.11ID:LggudSN5
>>801
ちゃんとそれらの記事を読んだか?
それらを読んだが全てRustは素晴らしいという話だったぞ

1つ目の記事はRustの良い点を列挙してくれている
ただし最後に
「in Rust, for our use case, they both require at least a rough understanding of pinning」
RustだとPin留めについての理解が必要になるというだけの話だった

2つ目の記事の結論は
「Once you get good at Rust all of these problems will go away」
Rustを上達してしまえばこれらの問題はすべて解消されます

3つ目の記事はRustの問題ではない
今回のゲーム作りのタイプが(Rust製の)BevyよりUnityが向いていたというだけの話だった
そしてRustとBevyについても
「 I have immense respect for both and may well use them again for different projects.」
別のプロジェクトでは使う可能性があると書いている
2025/04/29(火) 09:07:02.50ID:2WjdTDVx
やっぱRustは清書用だな、気楽にバグ有りでも良いから作る分には役割が重すぎる
2025/04/29(火) 09:07:31.63ID:xTPXppS5
この決めつけで他人に圧を掛けるレスをずっとしてる病人はなんなんだろ?
2025/04/29(火) 09:08:03.86ID:LggudSN5
>>805
何を根拠にそんな頓珍漢な主張を?
2025/04/29(火) 09:09:59.77ID:xTPXppS5
rustが使えない人間の方がこの世に多いし今後もそれは変わらない

こんな単純な事実を否定して使えないやつは馬鹿だみたいな圧を掛ける馬鹿
2025/04/29(火) 09:12:09.63ID:2WjdTDVx
>>807
Pythonみたいなスクリプト言語と比べて気楽さはないでしょ
2025/04/29(火) 09:21:01.67ID:5LYm1eZb
>>809
Python笑と比べるの??
不適切なPythonなんかでプログラミングする方が本当に良いと思い込んでるならそうしていれば?
なぜこのRustスレに来てるの?
2025/04/29(火) 09:25:37.97ID:85zQBF62
801の一番目の記事で言われている、
> Perf is easy when you have AWS credits.
これはWeb分野固有の事情として極めてクリティカル
スタートアップ向けの無料クレジット云々はともかく、金さえ出せば解決するのは事実だからな
そして多くの場合、人間の時間の方が高い
2025/04/29(火) 09:27:24.85ID:yenpBK7D
>>808
そのRustが使えない人間はよほど下級のプログラマなのだから無視して良い存在だと思いますよ
特にAI活用時代には不要となる人間でしょう
2025/04/29(火) 09:33:07.30ID:MtXZxAjC
熊を生け捕りにする「圧」がもし本当にあるなら猟銃は必要なくなる
2025/04/29(火) 09:34:23.44ID:Lw8Z4q0k
>>811
Pythonで作って例えば10倍くらい高い料金をその後ずっと支払い続けるのかね?
しかも料金が高いだけでなく動作も遅いから不利だよね
2025/04/29(火) 09:37:59.27ID:85zQBF62
>>814
実際に10倍高く、かつそれが機会損失コストと人件費を上回ることが予測できた段階で置き換えればよい
君が実際にプロダクションのWeb開発をやったことがあればわかるはずだが、そんな状況は滅多にお目にかかれない
2025/04/29(火) 09:40:09.63ID:5wcVf3HC
>>811
記事その部分の前提を見てごらん。
every new employee that isn’t familiar with Rust will run into this. You’ll either need to prioritize Rust experience when hiring or get good at training people.
つまりRustに不慣れな人にとっては、Rustを使わずにAWSに高い料金を払った方が良い場合がある、というだけであって、Rustに慣れてしまえばRustで書いた方が良いね。
2025/04/29(火) 09:43:15.06ID:SlclBfrE
やっぱりRustを使える自分,にアイデンティティの拠り所を求めてるやつがいるなぁ
あるいは知識だけあって使えない反動で書いてるのかな
2025/04/29(火) 09:43:33.48ID:5wcVf3HC
>>815
それはクラウドに高い料金を支払い続けることになり損でしょう。
Web利用側にとっても、反応が速いほうがうれしいでしょう。
Rustに慣れてしまえば解決する問題なのだから、Rustで書くのが正解だと思うよ。
2025/04/29(火) 09:50:15.06ID:MtXZxAjC
Rustを使える者、の集合がどうしても必要なのは統計学者だよ
個人のアイデンティティではなく集合の定義が必要なのだ
2025/04/29(火) 09:52:34.33ID:xTPXppS5
こいつなんでいつもIDコロコロしてんの?
2025/04/29(火) 09:53:09.96ID:85zQBF62
>>818
経験があるなら当然知っているはずだが、残念ながらWebのボトルネックはほとんどの場合IOとDBなのです
2025/04/29(火) 10:00:39.70ID:uEyS9h0C
「俺はRustが使えないから遅くてもPythonで書いたほうが効率がいいんだ!」と言う主張にも一理ある
しかしそれは個人の事情だろう
Rustスレに書き込んでここを荒らす必要があるのか?

今後はどうしてもRustを叩きたいならば専用のRustアンチスレに書き込みなさい

Rustアンチスレ
https://mevius.5ch.net/test/read.cgi/tech/1509028624/
2025/04/29(火) 10:03:44.71ID:xTPXppS5
>>822
自分らみたいにrust使いたい人間は普通に使うけど使わない人を勝手に馬鹿にするのは違うだろ
病人
2025/04/29(火) 10:08:41.96ID:6lSK2oCI
>>821
だからこそRustが有利というのがこの業界の常識
RustならばそのWebのIOとDB待ちの間に並行かつ並列でいくらでも他を安全に捌くことができる
そのためWebの世界はどんどんRust化が進んでいる
ちなみにRustの側でも最も使われている分野がWebサーバーサイドとアンケート結果が出ている
825デフォルトの名無しさん
垢版 |
2025/04/29(火) 10:09:02.51ID:qhqmYF5L
>>804
Rustへの称賛以外の文章が目に見えない病気なんですかね…
1番目は最後の締めくくりで
But if I look back at it, as much as I love Rust, I absolutely would not choose Rust again.
と言ってるのだけど

開発者が個人としてRustが好きというのと、自分のチームでRustを選ぶべきかというのは別問題
自分もRustは好きだけど、会社だと現状ごく一部のプロジェクトでしか使えないと思ってるし、全てRustという主張は馬鹿だと分かる程度の良識はあるぞ
2025/04/29(火) 10:15:18.14ID:6lSK2oCI
Rustを使えない人がいるからRustを使えないケースがあるというのは当たり前だけどそのチームの問題だからここで取り上げても意味ないんじゃないかな
このスレはRustを使いたい人や学びたい人だけで十分
例えばC++のスレでC++を使えない人もいるんだ!とか言い出したら完全に荒らし行為だぞ
2025/04/29(火) 10:20:15.08ID:xTPXppS5
c++はほぼ誰でも普通に使えるだろ
メモリリークなどが発生するだけで
2025/04/29(火) 10:25:53.49ID:85zQBF62
>>824
結局それは金を積んで水平スケールさせれば解決する問題だからズレてる
コストを正当化するだけの十分なスケールがあるならRustを採用すべきであることは誰も否定していない
2025/04/29(火) 10:27:02.06ID:6lSK2oCI
>>827
C++使えるならRustも使える
そんなことよりもだな
Rustを使えない人が、Rustを使えないからRustを使うのはよくない!反対!とRustスレに書き込みに来るのはおかしい
荒らし行為だ
2025/04/29(火) 10:29:40.74ID:6lSK2oCI
>>828
そんなムダな金を使わなくてもRustを使えば解決してしまう
なぜRustのスレでRustを使わないように持って行く主張を延々としているのかい
2025/04/29(火) 10:29:40.82ID:xTPXppS5
>>829
c++使えてもrustは使えない
コンパイルも通らないだろう
2025/04/29(火) 10:31:19.04ID:6lSK2oCI
>>831
Rustを使えなくて使いたくない人はRustスレに来るなよ
ここはRustを使いたい人や学びたい人のためのスレだよ
2025/04/29(火) 10:32:07.53ID:xTPXppS5
普通にストローマン論法だね
相手の主張を捻じ曲げてそれに対して批判するやり方
2025/04/29(火) 10:33:11.40ID:xTPXppS5
> C++使えるならRustも使え
これは間違い
2025/04/29(火) 10:36:53.75ID:6lSK2oCI
スレを荒らしてる人は自覚ないのかな
ここはRustを使いたい人のためのRustスレ
Rustアンチスレがちゃんと別にあるのだから棲み分けしよう
836デフォルトの名無しさん
垢版 |
2025/04/29(火) 10:48:01.46ID:jqe5wR1K
Rustは好きだけど、Rustを過剰に持ち上げるカルティストは嫌い
こういう輩のせいでRustは信者がうざいとか言われるし、まともな開発者にも迷惑がかかる
良い点も悪い点も含めて、言語の特性や現状を正しく認識しようというのがなぜできないのか
2025/04/29(火) 10:54:37.77ID:MtXZxAjC
>>836
それは100点満点を狙うやつがやること
0でも100でもないグレーなやつはそんなことをしない
2025/04/29(火) 10:59:16.54ID:k6/eUMBS
>>836
そんなどうでもいい話は専用スレを立ててやったら?
一般的に言語XのスレでX信者があーだこーだ言い続けて許されるとは思えないので
2025/04/29(火) 11:00:35.07ID:xTPXppS5
狂信者がrustの地位や評判を落としてるのでその他の人間には迷惑
2025/04/29(火) 11:03:29.06ID:nQBNOV6L
言語にアイデンティティを求めてる人の極論はともかく、他は別にRustを叩いているようにも荒らしているようにも見えないな
議論をするときには自己のポジションとアイデンティティを自分の中で区別しておいた方がいい
このスレは優しい方で、特にRustを採用できるような分野でやってきたいならそれができないと辛い思いするよ
2025/04/29(火) 11:07:36.96ID:k6/eUMBS
>>839
そういう陰謀論的な話は専用スレを立ててやるべきかな
ここでやるのは荒らし行為
2025/04/29(火) 11:13:28.83ID:xTPXppS5
陰暴論でなんでもない

> C++使えるならRustも使える

これが間違いだと理解できないのは狂信者だろ
C++は型あり言語からやってきたらだいたいの人はコードを書ける
ただ危険なコードも容易に書ける
Rustはそれを阻止するために縛りがある 危険でない部分でもそれが必要になる

その概念を理解しないとコンパイルエラーから抜け出せないので実用的な成果物は作れない
2025/04/29(火) 11:21:05.72ID:Gj8Ry772
>>842
Rust初心者がコンパイル通らなくて困ってるのかな
どの言語でもその言語の決まりを守らないとコンパイルエラーだよ
C++に関して言えば弱い型付け言語で未定義動作もエラーにしないからコンパイルエラーは少なくなるけど
今は強い型付けで未定義動作を許さない言語のほうが主流になってるよ
2025/04/29(火) 11:35:49.34ID:MtXZxAjC
>危険でない部分でもそれが必要になる

ギリギリ危険でないコードを不合格にするんだな
極めてなにか効率にたいする侮辱を感じます
2025/04/29(火) 11:50:27.89ID:85zQBF62
可変参照の排他性なんかは場合によっては効率性を犠牲にしても安全側に倒してる例だね。
2025/04/29(火) 11:58:15.87ID:Gj8Ry772
>>845
あれは参照の競合スパゲッティプログラムを避けることに繋がって良い判断かな
他にもC++のvectorの要素へ参照を持ったままpushしてヒープ移動になる典型的バグも防止できているね
2025/04/29(火) 12:02:19.93ID:Evjw1qeU
C++ を使えている人なら Rust のチュートリアルを読めば簡単な実務を始められるくらいにはなれそうな感覚があるんだけどなぁ。
難易度の高さをしきりに主張する人がずっといるのがなんだかよくわからない。
いや、難しいと感じる人だっているというのを否定するつもりはないんだけどさ……

C++ はかなり面倒な部類だぞ。
その面倒な C++ を使いこなせるくらいの能力という前提を付けられるときに Rust がそこまで激烈にしんどいか?
2025/04/29(火) 12:13:51.06ID:85zQBF62
C++からの移行についてはそれほど議論の余地はなくて、周辺環境が許せば移行すればよい、で終わり
C++の開発というのは比較的ニッチかつ保守的なので、C++を使っていて、かつ周辺環境が移行を許す状況というのがそもそも稀
849デフォルトの名無しさん
垢版 |
2025/04/29(火) 12:50:13.98ID:qhqmYF5L
C++が分かるならRustは学びやすい、というのはその通り
だけどそもそもC/C++をやらずに仕事できてる人も今はずっと多いわけで

> C++ はかなり面倒な部類だぞ。
> その面倒な C++ を使いこなせるくらいの能力という前提を付けられるときに
の「前提」というのが既に世間一般の感覚とズレてるのでないかと思う
2025/04/29(火) 13:27:22.82ID:uvfd+gUP
C++は学んだことないけど
スタック領域とヒープ領域の違いは理解できていたからRustを学ぶうえで特に困ったことはなかったよ
ライフタイムも関数を抜けたら消えちゃうスタック領域とその変数に管理されて依存するヒープ領域
関数の呼び出し入れ子で祖先側のスタック領域は子孫側のスタック領域より長生きというだけの話だった
2025/04/29(火) 13:56:05.54ID:Evjw1qeU
>>849
このトピックは >>842 などに対する反論なのであくまでも C++ は使えることを前提にしたときという限定的なもので、平均的なプログラマにとっての Rust の難易度については全く述べてない。
C++ を充分に使いこなせている人が多くないことは認識しているよ。

C++ を使うときは C++ が必要なときなので C++ みたいなことをもっと楽に出来るなら喜ばしいだろう。
C++ や Rust みたいなものが必要ないなら使えとは言わんよ。 だって必要ないんだから。
2025/04/29(火) 14:28:41.68ID:V0qLshIG
Rustは脳死で使えるイディオムが豊富なので楽
C++は時代によって流儀が変わりすぎる
2025/04/29(火) 14:32:21.54ID:4awPUBx2
昔からム板は平均より遥かに上のひとしかおらんがな
平均的なプログラマーは3年目ぐらいからは勉強すらしてないし
2025/04/29(火) 16:32:22.17ID:YYaK7+X4
>>852
C++ は設計理念のひとつとしてプログラマに選択の余地を与える (間違いの可能性があっても) というものを含んでいるので意図通りの結果ではある。
分野ごとの流儀や時代の要請が言語の流儀と噛み合わなくなると単にその言語が使われなくなるだけなので長く生き残るには (汚くても) 色々とできるように詰め込むしか仕方がないんだ。
2025/04/29(火) 16:32:23.99ID:jZEw8P94
ム板が平均よりはるかに上?
2025/04/29(火) 16:48:30.04ID:YYaK7+X4
大半の人は情報収集しないしコミュニティに属さないのは本当だ。
そういう意味では多少なりとも交流を持とうとしているのは平均以上の可能性が高い。
その一方で、ガチの上級者はガチの業務をしてるしガチなコミュニティに属しているからこんなとこにいない。
2025/04/29(火) 17:51:47.71ID:uvfd+gUP
>>854
Rustはどうしても必要不可欠ならばその汚いもの(unsafe)を関数やモジュールやクレートの中に閉じ込めて清らかな(safe)インターフェイスを公開する枠組みを持たせたね
そのように閉じ込めることでコンパイラによる自動保証の外の範囲も限定して管理できるようになり安全性と柔軟性や高速性の両立バランスをRustは手に入れた
2025/04/29(火) 18:17:31.81ID:MtXZxAjC
交流しているのは評論家だけ
クリエイターの能力値はDS並に謎に包まれている
2025/04/29(火) 18:25:25.23ID:1/cFi/QG
いちいち訳語につっかかったり普及してるかどうかのレスバしかしてない奴らの集団が平均以上なわけないじゃん
860デフォルトの名無しさん
垢版 |
2025/04/29(火) 18:37:35.61ID:qhqmYF5L
Rustでイディオムっぽく感じるのって個人的にはビルダーくらいな気がする
オプション引数やオーバーロードが無いから慣習的にビルダーを多様する、みたいなもので
他は割と言語デザインに沿って素直に書けるという感じ
2025/04/29(火) 18:45:02.43ID:Q2Q+JRXz
どっかでビルダーパターンは良くないぞ、考え直せって記事を読んだ気がするが
内容を忘れてしまった
誰か教えて
2025/04/29(火) 19:13:59.81ID:Evjw1qeU
ウェブショッピンクサービス ViaWeb (後に Yahoo に買われた) の創設者であるポール・グレアムはイディオム (デザインパターン) が必要とされる言語は悪い言語だと述べてる。
頻繁に使われるパターンがあるならそのパターンは言語機能やライブラリになっているべきで、ユーザがパターンに沿って書くのはあほくさいという話。
2025/04/29(火) 19:30:07.84ID:Evjw1qeU
>>857
汚い部分を隠して残る綺麗な部分は Rust の流儀だ。
Rust では Rust 的ではない抽象化ができないようになっている。

C++ 的な混沌よりは Rust の流儀を強制されたほうが今のところはマシなんだが、そうはいっても未来がどうなるかはわからんからなぁ……という現実が理想的ではないという話。
2025/04/29(火) 19:30:23.61ID:o2zlgANI
リスパーの言うことなんか聞くな
2025/04/29(火) 19:40:07.38ID:XmZc7X21
BufWriterとかでnewにinnerを丸呑みさせて用が済んだらinto_innerで摘出するパターンもRust特有だと思う
他の言語だとinnerは参照で渡しそうだけどRustでそれやると可変参照のライフタイムでカオスになる
このパターンに慣れるまで何回かカオスを経験した
2025/04/29(火) 19:41:32.29ID:Evjw1qeU
Common Lisp は有用な選択肢だと思うけどなあ。
ガッとラフに作れるというのと機械語レベルでのチューニングもできるという良いとこ取りだ。
ただ、ユーザが少ないと使えるライブラリも少なくて、だからユーザが伸びないというスパイラルがある。
物量が正義というのが現実なんだよね……。
2025/04/29(火) 19:45:09.79ID:85zQBF62
builder嫌い
たかが構造体にパラメータ詰めるだけのことにいちいちオリジナリティを出すな
2025/04/29(火) 19:52:58.08ID:Zs9DBDpd
>>848
RustとC++の相性は最悪
2025/04/29(火) 20:05:56.08ID:Q2Q+JRXz
>>865
それ分かる
なんか名前無いのかな?
870デフォルトの名無しさん
垢版 |
2025/04/29(火) 21:09:44.91ID:FS6BNYIE
>>861
これかな?
ビルダーの代わりにinit struct pattern というのを提案してる
https://xaeroxe.github.io/init-struct-pattern/

ボイラープレートが少なくて簡単だけど、初期化用の構造体のフィールドがpublicなのは好みが分かれる
現状はビルダーの方が主流
外部に公開するライブラリのAPIとして使うのは微妙だけど、自分たちのコードの内部で使う分にはアリかもしれない
2025/04/29(火) 21:30:51.12ID:Q2Q+JRXz
>>870
それだ!
追記された結論は、マクロでビルダーを生成させましょう、なのか……
2025/04/29(火) 22:02:39.41ID:MtXZxAjC
車オブジェクトに高度を変えるメソッドがあったらおかしい
空飛ぶ車オブジェクトは一時的にメソッドの存在自体を消すシステムをもつべき
2025/04/30(水) 01:02:26.08ID:RVMp5la+
こっち見といたほうがいいと思う
https://kerkour.com/rust-abolish-the-builder-pattern

YakShaverInitをinitしてYakShaver返すとかいろんな意味で微妙
YakShaverBuilderをbuildしてYakShaver返す癖が抜けてない
2025/04/30(水) 01:03:45.45ID:RVMp5la+
どっちかが絶対いいというものではなくて使い分けるもの
2025/04/30(水) 01:38:53.14ID:AZF3og04
>>873
the best code is no code at all か、なるほどね

構造体更新記法を使ってもらわないと、メンバー追加したときにコンパイル通らなくなるけど
それを問題視する人としない人がいるって感じ?

個人的には、今のRustはその程度の軽い互換性破壊は日常茶飯事だから別にいいのでは?って気がするけど
2025/04/30(水) 06:24:04.68ID:aRycYPw9
内部用は自由だが
少なくとも公開ライブラリの構造体の初期化の結論は出ている

まず各フィールド個別のpub化は以下の点で良くない
・構造体の値個別や全体の制約による無矛盾性を保証できない
・内部実装の改善による構造の変化に対応できない
・今後の機能拡張によるフィールド増加に弱い

したがってどうしてもビルダーパターンを使いたくないのならば
Foo初期化指定用の構造体FooConfigを更に用意してそれはpubを許して
Foo::init(FooConfig { FooConfig:: default(), i: 123, s: "abc" })?
またはこうする
FooConfig { FooConfig:: default(), i: 123, s: "abc" }.init()?
そしてinit()内で指定値チェックと本当の内部構造への変換をする形になる

同じことはビルダーパターンだとderive_builderを用いると提供側は簡単
使う側はおなじみの以下の形になる
FooBuilder::default().i(123).s("abc").build()?
どちらの方式も指定の構文が異なるだけで同じような形になってることがわかる

個人的にはビルダーパターンの方がよりシンプルだと思う
そしてRustでの主流となっている
2025/04/30(水) 10:08:02.30ID:uCqRd3Sw
強制すれば良いのに
878デフォルトの名無しさん
垢版 |
2025/04/30(水) 11:07:06.59ID:8LRHZRl/
ビルダー自体が便利だとは思えないんだよな
オプション引数やオーバーロードが無いのを解決するためのもので、他の言語から来ると戸惑うと思う
(型で遷移を表現するなど、パターン自体は Rust らしいし、理解自体は容易だけど)

オーバーロードは別の面倒を生むから無くて良いと思うけど、オプション引数は個人的にはあると嬉しい気がする

実はGoもオプション引数が無い言語で、代わりに functional option パターンというのを使うんだけど、これもイディオムを知らない人にとって直観的でないと言われがち
同時期に登場した言語がどちらも採用しなかったんだから、多分それなりの理由があるんだろうな
2025/04/30(水) 11:52:30.40ID:MOUA/jrw
簡単に言えば、virtualを使ってないデザインパターンは追放されない
2025/04/30(水) 12:05:47.96ID:yPZIq5F0
ム板全体が限界過疎集落化してるのに
Rustスレだけ人が居るのはなぜ?
他に交流の場が無いのかな?
2025/04/30(水) 12:11:54.22ID:VKtsx7kS
自作自演
2025/04/30(水) 12:21:33.61ID:TMleEpRy
規模が大きくなるにつれてbestよりconsistentの重要性が高まるものだ
将来的な変更容易性がどうのと言って必要以上に凝ろうとする奴に限って、
革新的で最高にクールなニュースタイルのビルダーが出てきたらすぐにちゃぶ台返しをする
まあ初期化時のパラメータの与え方なんて壊滅的変更されたところで大した問題じゃないから、
そういう奴に自由にオナニーさせて発散させておくにはいいのかもね
2025/04/30(水) 12:21:42.88ID:THYm3xdc
単に書き方がちょっと面倒というのを解決したいならマクロを使えばよいということだと思う。
実際にそういう使われかたをしてるし。
2025/04/30(水) 12:44:48.88ID:s47+7HVZ
自演
2025/04/30(水) 13:00:34.55ID:uCqRd3Sw
>>870
>>873
どうせ最適化で同じコードになるんだろうけど
記述的には同じことの繰り返しが多過ぎて効率が悪過ぎるイメージ
スマートじゃない
>>883
マクロは有効ではある
2025/04/30(水) 14:42:30.43ID:UhuBHLAw
>>878
Builderパターンは設定(引数渡し)とオブジェクト生成を分離するのが本質的な特徴。

デフォルトの省略とか渡す順番の自由化とかあるけど、それも設定と生成の分離から派生した特徴でしか無い。また分離した結果として複数個所からの同時アクセスに弱いけど、そういうのを理解して使えばいい。
2025/04/30(水) 15:49:41.55ID:AZF3og04
あちこちがガンガン破壊的変更されていくRust界で、
初期化のとこだけBuilderパターンで互換性ありますよーってあんまり意味ない気がする
2025/04/30(水) 16:17:15.30ID:JQkc0XME
>>880
約一名必死なやつがいるから
2025/04/30(水) 17:44:14.52ID:y1rgmJae
>>887
Rustは他の言語と比べても破壊的変更は少ない方じゃないかな
しかもRustにはEditionという概念があって必ずCargo.tomlに指定したうえでソースコードを書く
そのため破壊的変更より前の古いソースコードも影響を受けずにコンパイルできて実行できたりする

第三者が作ったライブラリ(crate)についてはCargo.tomlにバージョン番号を指定して使っていれば
そのまま当時のソースコードを使うためコンパイルできて実行できたりする
もちろん古いものセキュリティホールなどが発見されれば対応せざるをえないのは当然だけどね

いずれも全てのケース100%で今後も永遠に大丈夫というわけではないかもしれないけど
バージョンの違いなどで苦しんでるプログラミング言語などと比べたらRustは恵まれてると思うよ
2025/04/30(水) 18:21:50.73ID:JJ8dHA07
ワシらの作るサービスがヒットするわけ無いだろ。打率0割0分5厘
スーパーなプロデューサに仕えねば
2025/04/30(水) 18:50:26.71ID:61w1rbBX
>>889
>Rustは他の言語と比べても破壊的変更は少ない方じゃないかな
フィボナッチ作ってるだけじゃわからんよなw
2025/04/30(水) 19:04:33.02ID:v8y83nww
>>889
いやいや破壊的変更を堂々と入れるためにエディションがあるのに何言ってるの
わざわざシステマティックに管理しなきゃいけないほど言語仕様の破壊的変更の多い言語ってそんなに多くないよw
2025/04/30(水) 19:17:57.26ID:JJ8dHA07
エディションの機能あるのRustだけじゃね。
Cなんかもコンパイラオプションでゴニョゴニョ出来るけど
2025/04/30(水) 19:18:18.80ID:y1rgmJae
>>892
もちろんエディション間には破壊的変更があるよ
でもエディション指定しているから現実には影響なしで過去のソースコードがコンパイルできて動く
そういう現実を含めて言及したよ
2025/04/30(水) 19:52:49.23ID:v8y83nww
そんなNPTがあるから核兵器は安全だ!みたいなこと言われてもな
2025/04/30(水) 19:53:45.22ID:THYm3xdc
ひとつのプロジェクトに異なるエディションが混在することもできるけど、そうなると ABI の互換性は切れないし、エディションという仕組みがどれくらい長期的に機能するかちょっと読めない。
旧エディションを際限なくサポートするわけにもいかんし、ある程度古くなったエディションはそのうちサポートは切られるんじゃないかな?
新エディションに書き換えるツールは提供されてるので定期的に書き換えてメンテナンスするくらいは必要じゃない? もちろんプログラマも新エディションの機能を把握するのは要る。
2025/04/30(水) 19:56:05.44ID:JJ8dHA07
それは、仕方なし
2025/04/30(水) 20:02:14.30ID:y1rgmJae
>>896
継続中のプロジェクトはそう
一方でメンテが昔に止まったプロジェクトでもエディション指定があるおかげでそのままコンパイルして動く点がRustは大きいかなと
2025/04/30(水) 20:02:41.40ID:JQkc0XME
Rust ABIは一度も安定化したことがないから保つべき互換性なんてものはないので安心してください
2025/04/30(水) 20:03:10.33ID:etHuYXUz
他でも同じ
python2 python3
2025/04/30(水) 20:04:46.85ID:v8y83nww
塩漬けにするなら普通は処理系のバージョンも含めて塩漬けにするもんだし、
>>896の指摘するように古いエディションのサポートが切られたら否が応でもそうするしかなくなる
2025/04/30(水) 20:05:30.86ID:etHuYXUz
この件でrustが優れていると言うのは違うかと
2025/04/30(水) 20:09:05.80ID:JQkc0XME
C/C++だってコンパイラオプションで規格明示すればいいだけだしねえ
2025/04/30(水) 20:30:24.75ID:y1rgmJae
3年毎のエディションの仕組みが明確にあって
ソースコードのCargo.tomlにエディションが必ず指定されてるから
コンパイルオプション指定も含めてソースコードを全く変更せずに動く
という点が他とは異なるね

あと将来は古いのは切るかもしれないけど
今のところ最新コンパイラもエディション2015,2018,2021,2024を全てサポートしていてコンパイルして動くね
その時コンパイラが警告してくれるし移行ツールもあるのでエディション移行もしやすい
2025/04/30(水) 20:53:46.40ID:THYm3xdc
>>903
C/C++ には欠陥報告という制度があって、規格の過去の版に遡って修正されることがある。
大半は文章の曖昧さの修正や緩和の方向だから深刻な互換性問題にはあまりならないんだけど、なにせ修正の件数自体が多いから割合として少なくても互換性を損なう修正もそこそこある。
つまり昔の C++11 と今の C++11 は別物と考える必要がある。
そんでコンパイラによって規格の修正の反映具合が違ったりして混沌としてるんだわ。
実際に昔のコードを今のコンパイラでコンパイルしようとしてもエラーがゼロなんて場合はほとんどない。
2025/04/30(水) 21:04:19.22ID:v8y83nww
そりゃC++は時間のスケールが違うからな
C++を引き合いに出すなら、20年待たないとRustのエディションが主張通りに機能したかどうか結論は出ない
2025/04/30(水) 21:20:15.53ID:Jt3SshjK
ここ覗いてるのってメーカー勤めの技術的リスク取れないチキンな皆さんなのかね
やっていこうぜ。不満があればイシューツリーかパッチ投げよう
2025/04/30(水) 21:30:45.31ID:y1rgmJae
>>906
現に10年前のRust 2015 edition指定のコードが動いているから大丈夫だと思うよ
最新コンパイラが2015 editionをサポートする間はそのままコンパイルできて動作するね
その話と関係なくcargo fix -editionで半自動でedition移行ができるから自分のソースコードなら手直ししてすぐ解決
2025/04/30(水) 21:47:40.41ID:MOUA/jrw
自分のソースコードしか手直しできないってなんでだろう
もっと他人のソースコードを批評したり手直ししたりすれば楽しいのに
2025/04/30(水) 22:24:04.29ID:OzkHKJVN
人のもやればいいけど技術以外の問題があるだけでしょ
コミット権限がないとか
2025/04/30(水) 23:07:35.68ID:aRycYPw9
>>878
今回の構造体初期化のビルダーパターンと比べて
名前なしオプション引数やオーバーロードは以下の点で劣っている
・コードを書くときに間違いを起こしやすい
・コードを読む時にもわかりにくい
・同じ型が区別できない (同じ型のheightとwidthの片方だけ指定したい時)
・多数あると組み合わせ爆発が起こる

したがって利用可能な方法は名前指定オプション引数となる
例えば
f(name1=value1, name2=value2, ...)
一方でビルダーパターンでは例えば
f().name1(value1).name2(value2) ...
コードを書く側としてはどちらも大して変わらない
慣れだけの問題であり一瞬で適応できる

利用側としては上記のように大した差はないが
提供する側のコードが面倒で冗長になることがビルダーパターンの欠点であった
しかしこの問題をRustではderive_builderが解決してしまった
初期化したい構造体への簡単な修飾でそのビルダー構造体と実装を自動生成してくれる
他に改善すべき点や案などあるだろうか
2025/04/30(水) 23:46:19.22ID:HBKx6hEm
一面しか見ないバカ
相変わらずだな
2025/05/01(木) 00:06:22.35ID:wMrbWiVF
rustは関数オーバーロードがないからビルダーパターンに頼らざるを得ない
2025/05/01(木) 00:23:28.70ID:KmLg46A3
Builderと大して変わらないと思うけど
内部非公開のstruct Fooに対して内部公開のstruct FooDraftを用意して

let foo: Foo = FooDraft {
i: 123,
s: "abc",
..Default::default(),
}.try_into()?;

みたいな形は考えたことある
まじめにやるならFooDraftはnon_exhaustiveを付けた方がいい
2025/05/01(木) 00:34:22.74ID:wMrbWiVF
どちらにしてもコンストラクタがライトウェイトじゃなくなるし利便性も低下する
916デフォルトの名無しさん
垢版 |
2025/05/01(木) 01:16:01.59ID:MWOwr0re
お前らしょうもない言い争いしてる暇あったらRustでプログラミングしようぜ
楽しいぞ😎
2025/05/01(木) 01:28:23.84ID:f3hi8cvW
f(a,b,c);
g(a,b,c);
h(a,b,c);
ももっと短くするべきで、引数をstructにすればこの問題も解決する
が、キーワード引数はこのコードを更に長くしてしまう
918デフォルトの名無しさん
垢版 |
2025/05/01(木) 01:50:56.00ID:cAYi0wMW
>>889
なんのcrateだったか忘れたけど使おうとしたらCargo.tomlにローカルなパスが通ってて吹いたことがある
そんなんcrates.ioに上げるなよ
919デフォルトの名無しさん
垢版 |
2025/05/01(木) 01:53:34.42ID:cAYi0wMW
>>892-893
Cの方が相当古いバージョンのライブラリやモジュールでも動くよな
セキュリティーは置いといて
920デフォルトの名無しさん
垢版 |
2025/05/01(木) 01:58:46.40ID:cAYi0wMW
>>907
ダブスタ意見はやめとけ
2025/05/01(木) 02:00:23.14ID:N2U44pfA
ワイはメーカーじゃないので暇つぶし
2025/05/01(木) 10:03:23.98ID:nTiKCI2R
完全無欠ωのRustにリスクがあることを認めるのですねわかります
2025/05/01(木) 10:37:30.35ID:TCz7x/v2
何にでもリスクはある
2025/05/01(木) 10:38:10.43ID:TCz7x/v2
成功する宝くじだけ買いたいなんて文科省だけだぞ
2025/05/01(木) 10:49:46.51ID:1Pg0gBiY
コロンブスがリスクを取らなければいまだにアメリカ大陸は無人の動物王国だった
アムンゼンしかり、いつの時代も最初にリスク取る人間は周りに理解されない
2025/05/01(木) 10:58:47.12ID:/KCrsMZn
ガチでリスクを取れる人間は今はバイブコーディング&動いてるっぽいからリリースしようぜ!に夢中なはず
Rustはコントロールできないリスクは取りたくないくせに俺スゲーしたい中途半端な人間向け
2025/05/01(木) 11:49:06.01ID:nTiKCI2R
インディアンと呼ばれた先住民が動物とはこれいかに
2025/05/01(木) 12:04:15.65ID:TCz7x/v2
>>926
リスクだけ取りたいなら登山でもしてて
2025/05/01(木) 12:07:18.57ID:f3hi8cvW
射程距離が長い武器は接近戦から逃げているだけだな
当たると豪語するが結局当たらない
2025/05/01(木) 13:11:13.65ID:VlXKY8Xt
MSが今ビルダーパターン多用してる
過去の実績から言うとMSは99%技術選定を間違えるからそれが不安要素
MSは失敗のベンチマークとでも呼べる
2025/05/01(木) 14:40:42.80ID:nTiKCI2R
version3か3回目の名称変更でちょびっと安定してくるやつね
2025/05/01(木) 14:48:48.72ID:JYSVmYdO
大手は何にでも手を出してるから失敗も多いだけ。
成功も多い。
2025/05/01(木) 15:32:50.49ID:/KCrsMZn
逆に大手が手を引けばその技術は失敗と見做される
MSがそれで抹殺してきたのは主に自社の技術だからともかく、GoogleなんかはコミュニティのOSSを殺すから悪質
2025/05/01(木) 16:02:09.47ID:f3hi8cvW
バカに見つかることの何が問題なの?
見つけてもいつか手を引くから問題だ
じつに論理的だ
2025/05/01(木) 23:47:13.30ID:CL+IXcrI
>>913
構造体の初期化にオーバーロードは役に立たないよ
936デフォルトの名無しさん
垢版 |
2025/05/02(金) 03:09:37.33ID:OL9VZPix
Rustの欠点やRustに対する不満は数多存在するが
CやC++に対するそれらとの程度問題に過ぎない
それを殊更Rustを過剰に持ち上げるから話が可笑しくなる
そのせいで期待の裏返しで粗が目立つことにもなる
RustはRustと限界も理解した上で節度を持って付き合う距離感が大事
2025/05/02(金) 08:31:39.96ID:yPmkkGew
過剰なのは期待ではないよ
期待などを過剰に可視化するのをやめればいいだけだ
2025/05/02(金) 09:01:58.80ID:bAYfXEJ2
Rustを教訓にした次の言語に期待
2025/05/02(金) 09:11:30.86ID:i8P7c2SF
Rustの最大の教訓は、どんな言語でも有名になればバカ(必ずしも頭が悪いわけではなく、本来その言語が想定しない用途に使おうとする奴も含む)が使うってことだろう
Rustの仕様はそれほど効率が重要でない分野でテキトーに使おうとすると無駄なコピーが増えたりしてかえって非効率になりがちな面があるから、
そのあたりのバランスをうまく取れば非常に広く使われる言語になったかも
とはいえ次はAIの時代だからもう従来の意味での新しいプログラミング言語は必要なくなった
2025/05/02(金) 09:18:30.31ID:l65Gmtfc
オプション引数やキーワード引数については他言語が内部的にやってることをRustの場合は開発者が自分でやらなきゃいけないことになっててバカらしい

しかも関数シグニチャに情報をまとめられないから書く方も読む方も煩雑になるだけで開発者的には何もメリットがない
2025/05/02(金) 13:09:45.81ID:27eNBEi7
本来Rustに触るべきじゃない層にまで浸透しつつあるのはええの
2025/05/02(金) 15:42:00.82ID:D7XvqJPq
>>939
無駄なコピーが増えて非効率?
そんなのどの言語でも参照を使わずにコピーしていたら起きるだろ
さらに言語によってはコピーしてるつもりがなくても内部でコピーしてることもある
一方でRustならプリミティブな整数などを除いて、コピーは明示的にCopy実装するかclone()した時のみ起きる
そして参照を様々な形でサポートしていいるため、Rustで無駄なコピーが増えて非効率になることはない
2025/05/02(金) 15:48:12.35ID:5gJO9Aey
Cで構造体を関数に引数渡しするとコピーが走るわけだが、Rustでは同様の問題はないのですかの
2025/05/02(金) 16:14:46.67ID:LUc36ySD
>>943
ムーブは機械語レベルではコピーと同じだとドキュメントにも書いてある。
つまり素朴な解釈ではコピーされるし、コピーのコストはある。
その上で最適化によってコピーが避けられることもある。
Rust の性質的にエイリアス解析が万全なので C よりは有利に最適化できる。
2025/05/02(金) 16:16:32.01ID:5gJO9Aey
確実に引数のコピーを避けるなら参照渡しだよね。Cと同じかの
2025/05/02(金) 16:28:29.66ID:LUc36ySD
コストよりも所有権の事情で決めるもんだよ。
参照を渡すかどうかはコストの問題ではなく所有権を渡すのが妥当かどうかの話。
2025/05/02(金) 16:39:23.11ID:5gJO9Aey
スタックサイズに制限がある環境では、スタック使用量を見積もれないとマズいのです。
高速道路公団になっちゃうよ
2025/05/02(金) 17:10:01.59ID:PM49hp/O
今どきキーワード引数が無いのは普通に不便なんだけど
追加しないのはどういうこだわりなの?
2025/05/02(金) 17:25:37.72ID:9xoZUliT
>>943
Rustの構造体は明示的にCopy実装した時のみコピー値渡しできるようになる
逆にコピー値渡しの必要がなければCopy実装しないのが通常
ちなみにヒープを所有するものを含むとそもそもCopy実装できない

Copy実装していなければムーブ渡しになる
生成コードでのムーブの実装はコピーして元を捨てる(=それ以降は使えない使われない)
元が使われないため、生成コードでは最適化によりコピーが消える場合が多い

他の関数へムーブしてしまうとそれ以降は使えないため、実際にムーブが使われるケースはいくつかのパターンとなり、それ以外はムーブではなく参照を渡す
ムーブが使われる例としては、初期化作成して渡すだけ、他の型へ変換、他の型の一部に組み込み、など
2025/05/02(金) 17:48:28.97ID:5gJO9Aey
>>949
ありがとう。慣れれば簡単そうね
2025/05/02(金) 18:13:18.00ID:n0wyIh3y
>>948
ABI を策定してみて。
952デフォルトの名無しさん
垢版 |
2025/05/02(金) 18:30:03.50ID:06aFKDyR
キーワード引数とABIは関係なくない?
例えば fn func(foo: i32, bar: i32) というシグニチャの関数について、
呼び出し側で func(bar: 10, foo: 20); のように記述したものが func(20, 10); に置き換えられるような仕組みだし、
コンパイル時に解決する問題な気がする

そもそもRustは (C互換のコードを除いて) 安定したABIを持ってないんじゃないっけ?
2025/05/02(金) 18:34:07.60ID:bAYfXEJ2
>>943
コピーしたくなければポインタで渡すだけでいいんだぞ
2025/05/02(金) 18:53:01.38ID:d0ZtlBkd
キーワード引数は関数の型との兼ね合いだろうな
fn foo(a: u32)

fn foo(a: u32, b: u32 = 0)
に変えたときに
F: Fn(u32)
に渡せるかみたいなややこしい話が出てくる

最初から
fn foo(a: u32, opt_args: FooOptArgs)
で頑張ってもらった方が分かりやすい
2025/05/02(金) 18:57:27.48ID:kIVCyVUc
オプション引数はそのままOption<T>型の引数で使われていて困らないね
2025/05/02(金) 19:34:53.93ID:PM49hp/O
キーワード引数があれば、Builderパターンとか要らなくなるんだけど
2025/05/02(金) 19:49:08.87ID:rPO248eK
>>944
copyが発生しうるmoveのときは暗黙でcopy出来るかどうかderive(Clone, Copy)
暗黙にcopy出来ないけどcopyの必要なmoveが起こるときはコンパイル時にエラー
2025/05/02(金) 19:49:28.92ID:i8P7c2SF
>>954
何もややこしくない
それは単純に「不可」とするのが一般的で、必要なら適当に部分適用すりゃいいだけ
2025/05/02(金) 19:51:56.60ID:5gJO9Aey
カリー化を覚えよう
2025/05/02(金) 19:54:40.88ID:GN+wBpsy
>>956
ホントに?
具体的にどのような生成コードになるの?
それらの引数はどのように関数に引き渡されるの?
2025/05/02(金) 19:55:06.57ID:rPO248eK
>>955
doudt
2025/05/02(金) 20:07:31.93ID:GN+wBpsy
オプション引数は結局Option型などで渡すか、あるいは、省略時の値として長い引数の個数を渡すしかない
それを避けるには可変個引数にして引数の個数を持たせて処理していくが効率もよくない
2025/05/02(金) 20:10:27.21ID:tUdMCpmj
他の言語を知っているといろいろと勉強になるから使った方が良い
2025/05/02(金) 20:14:10.43ID:i8P7c2SF
>>960
それは952も示している通りコンパイル時に呼び出し元に展開するだけ
互換性の問題はあるが実用上問題になることは稀だ
Kotlinのようにランタイムのペナルティを許容して被呼び出し側で条件分岐する流派もあるが、Rustはそっちは選ばないだろう
2025/05/02(金) 20:14:30.16ID:n0wyIh3y
>>957
繰り返すがここで言うコピーは機械語レベルでのコピーの話、ビットパターンのコピーの話をしてる。
(実行コストについての文脈なので。)
ムーブのコンパイル結果はコピーのコンパイル結果と同一であることの説明であって言語仕様の話をしてないので言語仕様の説明は不要。
2025/05/02(金) 20:16:15.41ID:wHxIFaHv
構造体の初期化をビルダー方式にするとメリットが多い
・長い引数がなく読みやすい
・必要な指定のみメソッドでチェーンで指定すればよく書きやすい
・Rustでは多くの場合inline化されて構造体の各フィールド指定と同じコードになり効率がよい

デメリットは初めて見る人は慣れていないこと
慣れたらデメリットは消える
2025/05/02(金) 20:19:38.05ID:tUdMCpmj
カーニハンの時代のC言語は仕様上構造体は引数に値渡しできず戻せなかった
実際はある程度をすぎると可能だったらしいが
2025/05/02(金) 20:26:25.98ID:n0wyIh3y
>>967
K&R 第一版の時点でも将来的に出来るようになると明瞭に書かれていて、単に構想に実装が追い付いてなかっただけ。
969デフォルトの名無しさん
垢版 |
2025/05/02(金) 20:32:31.01ID:06aFKDyR
呼び出し側も定義する側にとっても冗長なのは普通にデメリットじゃない?
ビルダーは「Rustの制約を考慮すると現状これが最も妥当」くらいのものでしょ
このパターンが「便利だから」という理由で他の言語でも流行る、なんてことは想像しづらい
2025/05/02(金) 20:36:36.68ID:tUdMCpmj
ビルダパターンはオブジェクトなどの生成が複雑な場合に使われるべき
引数がやや多いと言うだけで使うのは論外
単純なものは他の仕組みファクトリーパターンでも十分では
本当に引数が多い場合もビルダーパターンは適さない

あくまでも生成が複雑なものに限定すべきである
今は過剰にビルダーパターンが使われているけど将来的には減っていくと思われる
2025/05/02(金) 20:43:33.27ID:z720W3rP
>>969
ビルダーで何が冗長なの?
Rustでは提供する側はderive_builderによりコードの冗長はなく非常に簡潔
利用する側はキーワード名指定オプション引き数の代わりにキーワード名メソッドを並べるだけ
全く同じで冗長なし

>>970
単純なものは例えばOption型引数などを使えばよいね
2025/05/02(金) 20:48:35.63ID:5gJO9Aey
筋肉ビルダーとして鍛えよう。AIには出来ない仕事だ
2025/05/02(金) 20:49:38.85ID:tUdMCpmj
シグネチャの範疇で済むものをキーワード名メソッドとして外に出して記述している
記述法にもよるが一覧性が低下する
2025/05/02(金) 20:50:39.57ID:tUdMCpmj
そして記述漏れが出る恐れが出てくる
2025/05/02(金) 20:54:15.01ID:bGn62aq8
Option型があると言っても
hoge(None, None, None, None, Some(1))
みたいなのはダサいよね
2025/05/02(金) 20:56:32.63ID:tUdMCpmj
structと整合性がない
2025/05/02(金) 20:59:30.84ID:z720W3rP
>>974
根本を理解していない人がビルダー初期化に文句をつけていたのか
デフォルト初期化で困るもの値だけを指定する
見落とすことはない
キーワードオプション引数方式と同じ
2025/05/02(金) 21:00:36.60ID:z720W3rP
>>976
嘘を付き出すのはよろしくないかと
2025/05/02(金) 21:01:59.09ID:z720W3rP
>>975
そういうケースのために記述性も効率も良いビルダー方式がある
2025/05/02(金) 21:06:06.88ID:tUdMCpmj
>>977-978
理解力が低下してるな

デフォルト値を書き換えるのを忘れると言っている
特定の組み合わせが必要なものがあったとして、それを強制する仕組みがない
それに数個必要な引き渡しがいくつ必要なのかを覚えなくてはならない
981デフォルトの名無しさん
垢版 |
2025/05/02(金) 21:09:06.51ID:06aFKDyR
>>975
それこそキーワード引数を使いたい動機で、最後のsomeにあたる引数だけ hoge(fifth=Some(10)) のようにできると楽
Rustだとそれはビルダーにすべき

>>971
言語仕様として組み込まれてるのとは利便性が全然違うじゃん
外部クレートが必要なわけだし
キーワード引数だと foo 関数の定義だけで完結するけど、ビルダーだと FooOption と FooOptionBuilder のような型の追加まで必要なわけで
2025/05/02(金) 21:09:43.98ID:z720W3rP
>>980
忘れる?
キーワード指定オプション引数を付け忘れる
それに対応するメソッドを付け忘れる
どちらも同じことだ
ビルダー方式で欠点は何も存在しない
2025/05/02(金) 21:13:02.11ID:5gJO9Aey
スクリプト言語じゃないとキーワード引数実装無理じゃね
2025/05/02(金) 21:13:29.15ID:z720W3rP
>>981
derive_builderを使ったことがなく文句を言ってるのかね
この方式のほうが簡潔で冗長がなくなる
オプションキーワード引数方式だと自分でそのシグネチャを書かなければならなく冗長になる
ビルダー方式は冗長がなく有利
2025/05/02(金) 21:14:00.07ID:bGn62aq8
アニメーションの毎フレーム毎に呼び出すような、パフォーマンスが大事な関数でもbuilderパターン使えるの?
2025/05/02(金) 21:15:34.05ID:i8P7c2SF
キーワード引数なら完全にゼロコストにできる
ビルダーだと、余計な初期化用の構造体が必要だし、値を指定しているパラメータについても最初にデフォルト値のコピーが走っちゃうからゼロコストにならない
2025/05/02(金) 21:16:03.15ID:n0wyIh3y
他に膨大な議論をしてるのにキーワード引数なんてたいして重要てはない割に面倒なものは後回しだろ。
(一応は名前つき引数の提案は何年も前に出てはいる。)
2025/05/02(金) 21:18:16.83ID:5gJO9Aey
マクロを使えばなんとか
2025/05/02(金) 21:22:00.73ID:q0/bxH7J
>>986
Rustでビルダー方式でも最適化されてゼロコストになっている
生成コードで確認した
990デフォルトの名無しさん
垢版 |
2025/05/02(金) 21:24:13.63ID:06aFKDyR
>>983
コンパイルされる言語でも使うよ (C#やKotlin)
2025/05/02(金) 21:24:49.07ID:BP5o1HEV
>>989
何と比較してゼロコストだと言ってる?
2025/05/02(金) 21:25:45.04ID:bGn62aq8
昔々、X ToolkitはCでキーワード引数を実現するために
配列を使ってなかったっけ?
末尾に終端マーカーを置き忘れると落ちる
2025/05/02(金) 21:29:20.61ID:tUdMCpmj
>>982
>>982
人間は容易に忘れるし順番ですら間違える
通常のエディタの支援が受けられる関数にした方が良い

.G(p[0]).R(p[1]).B(p[2]).build()
のところを容易に
.R(p[0]).G(p[1]).B(p[2]).build()と間違えて
さらに
.R(p[0]).R(p[1]).B(p[2]).build()と間違える
2025/05/02(金) 21:30:23.29ID:5gJO9Aey
>>990
おお、コンパイラ賢い
2025/05/02(金) 21:31:43.23ID:q0/bxH7J
>>991
構造体のフィールドに値を入れていって構造体を作成しても
derive_builderを使いメソッドで値を入れていっても同じになった
メソッド呼び出しが消えた
ゼロコスト
2025/05/02(金) 21:34:42.77ID:z720W3rP
構造体の初期化のために
キーワード付オプション引数の関数のシグネチャを記述するのは冗長でバカげている
Rustのderive_builder利用のビルダー方式が最も簡潔でベスト
997デフォルトの名無しさん
垢版 |
2025/05/02(金) 21:38:09.58ID:06aFKDyR
SerdeやPythonのnumpy並みに「その言語の利用者ならみんな知ってる」ライブラリならともかく、ユーティリティ程度のものでも特定のライブラリにロックインするのがベストなもんかね
2025/05/02(金) 21:38:30.32ID:n0wyIh3y
>>993
キーワード引数なら間違えないのか?
2025/05/02(金) 21:39:36.25ID:n0wyIh3y
>>997
マクロってそういうもんだよ。
2025/05/02(金) 21:40:47.47ID:tUdMCpmj
Rustおじさん論破した
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 39日 4時間 3分 48秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はUPLIFT会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《UPLIFT会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
4 USD/mon. から匿名でご購入いただけます。

▼ UPLIFT会員登録はこちら ▼
https://uplift.5ch.net/

▼ UPLIFTログインはこちら ▼
https://uplift.5ch.net/login
レス数が1000を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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