Rust part27

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2024/12/02(月) 22:32:50.31ID:D+1pIyvG
公式
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 part26
https://mevius.5ch.net/test/read.cgi/tech/1726838318/

ワッチョイスレ
プログラミング言語 Rust 4【ワッチョイ】
https://mevius.5ch.net/test/read.cgi/tech/1514107621/
2025/03/11(火) 16:23:47.17ID:GvJGmymX
>>418
名前は Scheme の syntax-rules から持ってきたんだと思う。
2025/03/11(火) 16:37:58.97ID:FiOBTiHo
>>419
map_whileやtake_whileか
try_for_eachやtry_foldを使えば?
ControlFlowを使って自分で作る方法もある
2025/03/11(火) 19:10:27.26ID:iBVYkGzp
>>419
クロージャは(変数をキャプチャできる)関数の一種なのでbreakなんて概念はない
for_eachはクロージャを引数に取る高階関数なのでbreakなんて概念はない
次々とやってくる「全ての各エレメント」に対して何度もそのクロージャを呼び出すだけなのでクロージャで早期returnしようとしても全てのエレメントに対して処理される
やりたいことはおそらく次々とやってくるエレメントの途中で処理を終えたいのだろうからfor_eachではなく以下のイテレーターメソッドを使う
2025/03/11(火) 19:12:23.50ID:iBVYkGzp
>>419
中断条件を分離できるならばイテレータを返してくれる(そして他のイテレータメソッドを繋げられる)以下を使うのがベター
take(n) 最初のn個だけ
while_some() OptionがSomeの間だけ
take_while(f) fが真の間だけ
 その後に続きを漏れなく使いたいときは
  take_while_ref_inclusive(f)
  take_while_ref(f)
  peeking_take_while(f)
map_while(f) 変換しながらfがSomeの間だけ
scan(init_state, f) 状態を持ちながら変換しながらfがSomeの間だけ

いきなり結果を(ResultやOptionやControlFlowで)返したいならば
try_for_each(f) fが中断(ErrorやNoneやBreak)になったら終えてそれを返す 中断なければ()を返す
try_fold(init_state, f) 状態を持ちながら同上 中断なければ状態を返す
try_collect() iterとitertoolsで仕様が異なりiter版はnightlyのみだけど 中断になるまでをcollect
2025/03/11(火) 21:21:23.37ID:jytsrQer
要点をまとめる力って大事だな
2025/03/12(水) 00:42:42.49ID:XRphkku6
クロージャが関数の一種なのか関数がクロージャの一種なのかそれが問題だ
2025/03/12(水) 02:15:27.24ID:ck/kStOw
大雑把な説明としては、
クロージャは(キャプチャがある)関数の一種、
関数は(キャプチャのない)クロージャの一種、
と言っても構わないが、
実際には、
Fnで使えるのはsafeなfnのみ、
fnにコアースできるのはキャプチャのないFnのみ、
といった関係。
2025/03/12(水) 12:58:04.29ID:7dQQHGES
クロージャと言えばFn(&mut T) -> ()みたいな定義が許容されてるのはなんでなの?
間違った使い方をすればownershipルールに違反してエラーにはなるだろうけどFnMut(&mut T)->()にするよう弾いたほうがよくない?
2025/03/12(水) 13:35:41.11ID:aNDBBqWo
ここ観るのが早い
https://qiita.com/lo48576/items/34887794c146042aebf1
2025/03/12(水) 16:12:44.05ID:FLZx408U
試しに見てみたがリファレンスと同じ情報の劣化版なので見る価値なし(個人の感想です)

>try_for_each(): Iterator<T> -> (T -> Try<B=()>) -> Try<B=()>
>失敗するかもしれない関数について for_each 的な操作を行う関数。
>これといって特記すべきこともないが、今まで for で書いていたものがシンプルにできる、ありがたい関数である。
>もし成功時にも何らかの意味ある値を返したいのであれば、 try_fold を使うべきである。

例えばtry_for_eachの最後の行の解説とか
ツッコミどころが盛り沢山
2025/03/12(水) 18:16:35.74ID:ck/kStOw
>>427
クロージャの引数は、毎回変わるのだから常に何をしても自由であり、引数を消費してしまおうが、可変参照があって参照先を書き換えようが自由。
クロージャで制限がありうるのはキャプチャした値のみ。

Fnはキャプチャした値がある時に、それを読み取り参照しようが自由だが、書き換えたり消費したりはできないという意味。
FnMutはキャプチャした値を読み取り参照しようが書き換えようが自由だが、消費してはいけないという意味。
FnOnceはキャプチャした値を消費しようが書き換えようが参照しようが自由という意味。
キャプチャ値を消費をしてもしなくても自由ということは、2回以上の実行は不可で、そのクロージャの実行は1回だけという意味、だからFnOnceという名前。

トレイト間の関係は「Fn: FnMut」かつ「FnMut: FnOnce」、つまりFnOnceは他の最上位のスーパートレイト。
集合で見ると、FnOnce⊃FnMut⊃Fnとなり、Fnが最も制限がきつくて集合としては小さい。
蛇足だが、fnはさらに制限がきつくて読み取り参照キャプチャすら許容されないから、Fn⊃(safeなfnの集合)となって、safeなfnは任意のクロージャの位置で代わりに使える。

例えば、LazyLock::new(f: F)のような、1回しか指定クロージャが実行されない高階関数では、最も緩いFnOnceでトレイト境界「F: FnOnce」を指定できる。
逆に何度もクロージャが実行されるIterator::fold(init, f: F )では、初期値initは消費されるが、fがキャプチャした値が消費されては困るためFnOnceではダメで「F: FnMut」となり、fの引数二つは毎回消費できる。
2025/03/12(水) 21:01:47.70ID:BjrFEung
>>428
一番重要な独自の分類方法を最初にまとめて書かないからクソ記事になる
2025/03/12(水) 21:52:39.29ID:m5dRvsnl
>>430
>クロージャの引数は、毎回変わるのだから常に何をしても自由であり

なるほど。言われてみれば納得。
ありがとう
433デフォルトの名無しさん
垢版 |
2025/03/13(木) 02:14:17.95ID:RNV6T1tE
なんでtypescriptのソースをrustに移植できないの?
プログラムなんだから不可能ってことはないでしょ?
2025/03/13(木) 04:38:06.94ID:RfjEKuUj
>>433
出来ることと効果的に出来ることは別というシンプルな話。
2025/03/13(木) 07:14:12.10ID:93baVECr
TypeScriptのコンパイラはその利用の多さからもっと高速さを狙ってC/C++・Rust・ZigなどのGC非依存言語で書く価値がありブラウザ上Wasm実行の観点からもそうすべきだったが
担当者の能力不足のため遅いGC依存言語から速いGC依存言語へ書き換えるだけで終わってしまった
そのため早くもWasmでの実行が遅いという指摘が出ている
2025/03/13(木) 07:27:03.63ID:gAHIvnwi
要するに、GC依存症の人にはrustは過ぎた物って事か。
2025/03/13(木) 07:45:56.77ID:FfpB+bg4
アンダース・ヘルスバーグが能力不足なんて話があるかいな。
Rust や C# が得意なのにあえて Go を選定したんだぞ。
WASM 上で遅いのは WASM のほうの性能不足だ。
Go の優秀さはランタイムサポートの作り込みにあり、それが十全に発揮されない環境ではそりゃ遅い。
2025/03/13(木) 07:53:47.23ID:TRbLLvdR
Rustで書けばwasmの件も問題なかったわけだからGoという中途半端な言語を選んだ選択ミスだな~
2025/03/13(木) 08:52:01.37ID:FfpB+bg4
WASM ってそんなに絶対に考慮が必要なほど重要なプラットフォームか?
コンパイラを WASM 上で動かそうとする判断をするやつがいたらそのほうが選択ミスだろ。

TypeScript からの移植という前提があったから Go が比較的やりやすいと判断された。
関数単位でほとんど一対一のベタ移植を出来てる。
2025/03/13(木) 09:41:53.87ID:9FAKkD2W
GC言語で書かれたプログラムをRustに移植しようとするとプログラムの構造を大幅に変えなきゃいけないからな

まあRustでのプロトタイピングも絶対やってるだろうけど
2025/03/13(木) 09:56:55.03ID:yv4NvN1D
スパゲッティになってる下手なプログラムは、Rustで書く時にそれをほどいてまともなプログラムにしなきゃいけないもんね
それにより効率改善や機能拡張などの保守性も格段にアップするから、当たり前で必須な作業なんだけど、手間を惜しんだのかね
2025/03/13(木) 10:18:55.01ID:9FAKkD2W
また的外れなことを
普段Rust書いてれば嫌でも分かることなんだけどなぁ
2025/03/13(木) 10:39:22.49ID:FfpB+bg4
TypeScript で書いてあることの弊害としてランタイム (つまりは JavaScript 実行環境) がウェブ用に最適化されてることを挙げてる。
ウェブのプログラムではリクエストごとのターンアラウンドタイムが重要だが、コンパイラは時間あたりの計算量が重要で、違う戦略が要る。

コードの保守などはとりたてて問題になっていない。
もしより良く出来る余地があったとしても組織としてコストを支払うほどの価値じゃない。
2025/03/13(木) 11:03:01.65ID:1bSTG+9t
Rustの話題だとダンマリなのに
どうでもいい他の言語の話だと連投するヤツいつもいるな
2025/03/13(木) 12:14:30.28ID:C23vdZ7h
政治や流行に流されない決断ができる土壌があるのは良い組織
動画を見るとヘルスバーグの優秀さがひしひしと伝わってくる
windowsのPMとは大違い
2025/03/13(木) 12:57:02.36ID:TBxE2TsU
一通りいろんな言語でプロトタイプコンパイラー作ってみたって動画内でも言ってたじゃねーか。で、Goが一番一対一で手堅く移植できる上に十分に速度アップもしたと言うことかと
パランスの問題だよ。時間をかけてリターンがどれだけあるか。だって営利企業だしプログラマーは無料じゃない。実際、方針決まってからはギットハブ・コパイロットに大部分やらせたんだろうがな
2025/03/13(木) 14:32:17.25ID:XQNYuMCZ
なんでfirefoxのソースをrustにできないの?
プログラムなんだから不可能ってことはないでしょ?
2025/03/13(木) 15:24:15.58ID:chX1MDYs
新たに作るものはRust一択になりつつあるが
既に別の言語で書かれているものはそれを負の遺産として考慮しなければいけなくなる
サンクコスト効果コンコルド効果に加え既存言語プログラマの抵抗勢力も足を引っ張る要因となる
2025/03/13(木) 16:51:18.65ID:FfpB+bg4
>>448
> 新たに作るものはRust一択になりつつあるが

んなこたーない。
選択肢として普通のものになったが、あくまで選択肢のひとつだ。
2025/03/13(木) 16:55:33.59ID:TBxE2TsU
日本語を型付きにして文法的に正しく無い書き込みは投稿ボタン押した時点で弾くようにならんかな。必ず日本語コンパイルエラー無しなのを確認してからしか誰も会話しちゃいけないなら世の中より良くなるはず。頭の中がスッキリする。
2025/03/13(木) 17:09:05.03ID:P+4CnHos
型への幻想期は誰しもが通る
そのうち人間には無理なことを悟るまでがテンプレ
2025/03/13(木) 17:23:47.86ID:jEo0CRn4
>>448
頭おかしい
2025/03/13(木) 18:17:51.78ID:TqCxXK+v
状況に応じて適切な言語を選択するのが普通の技術者

特定の言語に入信して
なんでRustじゃないんだなんでC#じゃないんだと
感情的にコメントを書いてるやつが多くてすごく滑稽
2025/03/13(木) 19:27:26.68ID:k0eZFisu
>>451
ちょろっと書く程度なら何でもいいけど
まともに開発するなら強い静的型付け言語が開発効率面から必須
455デフォルトの名無しさん
垢版 |
2025/03/13(木) 20:01:28.10ID:WjiwUoIR
「あると良いね」くらいじゃね
DropboxもPythonだったんだから、Dropboxくらいちゃんとしたサービスのレベルまで行っても必要条件であることはありえない
そしてそれよりデカいサービスの立ち上げは言語どうこうとかよりそもそもそのサービスが参入できる隙間を見つけて高速に参入することが重要。
2025/03/13(木) 20:08:43.13ID:k0eZFisu
やりたければどんな言語でも手間暇かければできるのは当たり前
強い静的型付け言語で構築しないと開発保守効率が劣り時間と労力の無駄
457デフォルトの名無しさん
垢版 |
2025/03/13(木) 20:36:11.24ID:SWRT78Fy
効率の話か
それで言うと、ビジネス感覚のある人が好まない言語はそもそもビジネスが成功しないから開発するだけ無駄だな
2025/03/13(木) 21:26:10.48ID:9FAKkD2W
時間をかけないためにスタートアップは動的言語を使ってるんだけどな

Facebook, Instagram, Youtube, Github, Twitterと例をあげればキリがない
2025/03/13(木) 21:29:22.70ID:qpPbxTOG
ここまでIT時代になる前だけじゃね
2025/03/13(木) 21:29:44.10ID:qpPbxTOG
スタートアップは静的型付言語しか勝たん
https://zenn.dev/ficilcom/articles/static-typing-for-startup
2025/03/13(木) 22:02:56.19ID:uZxDbhjk
動的型付け言語を捨てて静的型付け言語に移行したとか
静的型付け拡張の開発を主導してるような…

あと最近はスタートアップでフルスタック
typescriptにしてるところは珍しくない
2025/03/13(木) 22:24:27.62ID:FfpB+bg4
それぞれに適したものがあっても関連するプロジェクト全体で一貫した言語を使った方がスキルセットの管理が単純になるから運用が楽になることはある。
ウェブ系だと JavaScript か AltJS は避けられないのでそれに寄ってしまうのは仕方がない。
2025/03/13(木) 22:26:07.36ID:yXHfiD0Z
自分の頭で考えられない人ほど
またスキルや経験の幅が狭い人ほど
特定の技術を宗教化して盲信しやすい

そうなるとますます自分の頭で考えられなくなり
どんな不都合な事実があろうと
教義に反さないよう都合よく解釈しようとする

優秀な技術者の対極
2025/03/13(木) 23:02:12.20ID:9Gk42cK0
>>462
フロントサイドはTypeScript+WebAssemblyで良いけど
サーバーサイドまでTS/JSはリソースの無駄遣いなんだよね

もちろんまだ技術の発展途中なのでSSG/SSRをハイドレーションしてCSRするなら
その部分に限ってTS/JSでコード共通化は理解できるけどね
2025/03/14(金) 08:00:59.55ID:UemB6eEp
>>460
最も普及しているC++を消している時点で論外。
2025/03/14(金) 08:20:44.97ID:UemB6eEp
静的であろうと動的であろうと重要なのは(関数呼び出しなどの)コードの接続面・境界面の互換性であって、オブジェクト操作の互換性があれば良い。

動的型付けはこの互換性が実行時でないと判定されないのが問題であって、コード開発時(コンパイル)等に互換性を判定する仕組みがあれば問題無くなる。
コード解析は貧弱なので役に立たないが、静的インターフェイスのサポートなどで改善するだろう(今はそういうの無いけど)

静的型付けは互換性の判定のために型の命名を強制されるので、設計の柔軟性が無いなどの問題を持つ。こちらもC++コンセプトのよう静的インターフェイスで改善するので、今後は変数のコンセプト対応のようなインターフェイス改善で解決していくだろう。

RustのTrait境界もコンセプトのような柔軟性が欲しいところ。
2025/03/14(金) 09:19:28.18ID:43evLOjO
>>458
スタートアップ時は動的型言語で造って
軌道に乗ったら静的型言語で造り治す例もあるが
2025/03/14(金) 09:28:09.15ID:43evLOjO
>>462
https://qiita.com/YukiMiyatake/items/9904ed5b481e3f307bba
わろす
2025/03/14(金) 10:32:08.08ID:7EyFuQVw
>>468
さすが書き手も読み手もQiita品質
テラワロス
2025/03/14(金) 11:38:23.16ID:B7+exQLS
「トレイト境界」などという完全な誤訳をいつまで使い続けるのかね?
471デフォルトの名無しさん
垢版 |
2025/03/14(金) 12:33:09.87ID:YVXMDGNS
わざわざBoundsと言ってる意味を考えてみてはどうか
第一言語が英語の俺からすると境界で違和感ない
お前は日本語が怪しいだろと言われれば確かにその通りだが
2025/03/14(金) 12:47:34.83ID:UemB6eEp
限界とか条件ならbounds じゃなくてlimitationだしな。

interface的な意味合いが強いのにinterfaceにしなかった理由はなんでかね?
2025/03/14(金) 13:17:04.00ID:B4ilMY36
>>472
英単語としてはそうかもしれんが、他の言語の用語にある interface と似た部分はありつつもやっぱり違うし、そこらへんは違う語をあてたほうが自然だと思う。
2025/03/14(金) 13:26:54.49ID:g9xx7i1P
通勤電車乗ってなくてうらやましい

> 目的地を意味する表現です。 例文. This train is bound for Tokyo station. この電車は東京駅 ...
2025/03/14(金) 15:16:32.42ID:0UsQo6GT
>>474
それは「bound for」という熟語だし、さらに言えば
bound 境界
for 方向(対象までの間が主眼)
の組み合わせでそういう意味になるから、boundの例示で出すのは不適切かと。

inboundも外→内の境界付近のイメージが強いし、なんか良い例無いんかね。
2025/03/14(金) 15:34:58.04ID:PY82133/
circleじゃなくてdiskの方に適用可能範囲があるから、境界を印象付けてもしょうがない
範囲や領域って言えばいい
2025/03/14(金) 15:53:13.20ID:43evLOjO
>>472
Java語は要らんのだよ
2025/03/14(金) 16:27:19.78ID:dr+oAB1W
清々しいまでにバカばっかだなwww
2025/03/14(金) 16:29:54.73ID:dr+oAB1W
>>471
>わざわざBoundsと言ってる意味を考えてみてはどうか
そのセリフそっくりそのまま返すわ
本当に英語ネイティブなら日本語の「境界」の意味を知らんのだろうな
2025/03/14(金) 16:37:10.71ID:dr+oAB1W
>>472
>限界とか条件ならbounds じゃなくてlimitationだしな
boundsをそのまま表現できる日本語の二字熟語は存在しないから完璧な訳語というのはない
完全な誤訳というのはあるけれども
2025/03/14(金) 16:39:22.00ID:dr+oAB1W
>>475
おいおいww
bound forのboundとtrait boundsのboundはスペルが同じだけで意味も語源も違う単語だぞ
何が「bound 境界」と「for 方向(対象までの間が主眼)」の組み合わせてそういう意味になるだよ
不適切にもほどがあるかど。
2025/03/14(金) 16:41:51.77ID:aBKsJZMd
束縛を誤用してる言語なんだから
2025/03/14(金) 16:44:31.04ID:dr+oAB1W
inboundももちろんbound forのboundと同じでtrait boundsのboundとは関係ないからな
2025/03/14(金) 16:50:31.18ID:dr+oAB1W
>>476
>circleじゃなくてdiskの方に適用可能範囲があるから、境界を印象付けてもしょうがない
これこれ
2025/03/14(金) 18:07:08.47ID:llPebnyV
他動詞なんだからしゃーない日本語にはその概念が未導入だ
この例を見てくれよ

developers.google.com/maps/documentation/javascript/examples/control-bounds-restriction

ニュージーランドの国境座標で境界固定されてる
Restricting Map Bounds

const NEW_ZEALAND_BOUNDS = {
north: -34.36,
south: -47.35,
west: 166.28,
east: -175.81,
};

Rustじゃなくてタイプスクリプトだがboundって俺らプログラマーは普通にコーティングするとき使ってるから。意味もわからずニュアンスだけ知ってりゃコーティングミスしないよ
2025/03/14(金) 19:03:43.60ID:lylWP6au
>>485
>他動詞なんだからしゃーない日本語にはその概念が未導入だ
よく意味がわからないんだがなんで他動詞だとしゃーないの?
未導入の概念というのはBoundsのこと?

ちなみにその例にあるBoundsは名詞
2025/03/14(金) 22:14:58.94ID:jwX9vfGq
>>485
2D描画の文脈で使われるboundsは基本的に矩形領域のこと(3Dなら直方体の領域)
trait boundsと同じように何かを制限する範囲/領域という原義から付けられた名前だがもし「境界」と訳されてるとしたらの機械翻訳の質の問題だろう
2025/03/14(金) 22:53:00.25ID:ujZbdgV7
>>470
オライリー「トレイト制約やで」
2025/03/14(金) 23:00:22.63ID:XJxEKa47
要するに機械翻訳を誤訳と気づかず採用したんだろ
プロの翻訳家は誤訳に気づいて修正したが間違いを認めたくない勢力が境界で違和感ないと言い張ってるわけだ
2025/03/14(金) 23:00:54.38ID:7+++WDHP
BoundsChecker って最近見かけなくなったな
2025/03/14(金) 23:24:58.18ID:Jz6kOrmc
boundsは境界で正しい
他の候補はない

Type1: Trait2 Type1の取れうる型のうちTrait2がその境界となっている
Trait3: Trait4 Trait3の…(同様)
つまりトレイトにより境界を引いている

このように各々意味が異なる
境界 bounds
限界 limitation
制約 constraints

他の例
array-bounds checking 配列境界検査
Scalaのupper type bounds 上限境界
Scalaのlower type bounds 下限境界
2025/03/14(金) 23:58:17.86ID:ArFvjw95
際立ちますね
この題材は踏み絵になる
493デフォルトの名無しさん
垢版 |
2025/03/15(土) 00:33:27.71ID:MW+uPLNw
boundというと結び付いてる・紐付いているといった意味合い
日本語で境界というと、外と内といった「堺目」という意味合いが強い
自分はトレイト境界という表現に慣れてしまったのでそこまで違和感はないけど、訳としては不適当だと思う

余談だけどPythonとRustのFFIに使われるPyO3というクレートがあって、そこでは Bound という型が出てくる
これはPythonのGILに紐付いている意味合いで、trait boundのboundと同じ意味合い
2025/03/15(土) 00:51:34.13ID:kGvPW5zF
「訳がおかしい」と言ってるアホ達が代案を出さないことからも境界がぴったりな言葉
トレイトで境界を引いている
2025/03/15(土) 00:56:44.33ID:zVPlAU0P
まずこのスレから「トレイト制約」で通しましょう

オライリー「トレイト制約やで」> >>494
>>492同志「際立ちますね」> >>494
2025/03/15(土) 01:20:52.90ID:kGvPW5zF
boundsに制約なんて意味はない
trait boundsも、ある一定内の数値や、配列のインデックスなどのbounds checkingと同じく境界が定まる
2025/03/15(土) 01:23:20.85ID:24RSx77o
訳語を探すそもそものアプローチというか考え方が間違ってるんだよな
2025/03/15(土) 01:27:28.34ID:yH3qrd2j
お前らそんなに和訳やる気あんならtatsuya6502のケツひっぱたいてこいや
2025/03/15(土) 01:40:23.59ID:kGvPW5zF
「制約」という違和感ありまくりの間違った単語を使っているアホどもは、
例えばあるクラスに対してその基底クラスやスーパークラスを「制約」だと捉えているのか?
2025/03/15(土) 01:47:56.77ID:t2/vXXRn
意味的にはNapsterの水平線に近い
2025/03/15(土) 01:58:38.26ID:CnlaKfFr
トレイト境界とかいう和製英語やめて特性規定(特性を持ってますよって規定な)とかにしようや。省略しないなら特性保持規定、特性保有規定
ジェネリック型がある特性を持つという規定があるから、その特性を実装するっていう文なら自然だし
2025/03/15(土) 01:59:20.63ID:CnlaKfFr
しまった、ジェネリックなって書いてしもうたな
2025/03/15(土) 01:59:55.45ID:8rRdOox4
>>489
プロポですねわかります
2025/03/15(土) 02:11:53.31ID:kGvPW5zF
>>501
boundsに規定なんて意味はない
trait boundsはそのトレイトによって定まるトレイト境界だ
2025/03/15(土) 02:27:02.81ID:aXarc3PA
集合論的な意味での境界だな
ベン図のイメージ

T: EqはEqを実装する型の領域
T: CopyはCopyを実装する型の領域
T: Eq + CopyはT: EqとT: Copyが重なった領域
2025/03/15(土) 06:28:21.70ID:ub1zWmmn
>>495
「制約」という単語は真逆の意味だから使ってはいけない
制約ではなく境界を引くことで能力を与えて強力になっていく視点がトレイト境界

>>505
その通り
where句がない場合
<T> ←(Anyしか)何もできない子
<T: Eq> ←Eqを使える子
<T: Copy> ←Copyを使える子
<T: Eq + Copy> ←EqもCopyも使える子
つまりEq + CopyでEqの境界とCopyの境界の両方を満たす境界が引かれる
そしてどんどん使える機能が強化されていく
つまり「制約」とは真逆のイメージなので「制約」という表現は全く合わない
トレイト境界という表現が正しい
2025/03/15(土) 09:13:26.13ID:M+mqoQUv
数学だと制約に相当するんでは?
三角形の内二等辺三角形があるのは条件を満たしているものだけ

プログラムも機能が充実するとイメージとは真逆で制約が強くなっていることになる
出来ることが増える=制約されてる
void*ポインターが無制限で型が付くと型の制限がある
2025/03/15(土) 09:15:25.47ID:M+mqoQUv
これはずっと考えていたことで今急にひらめいたとかじゃない
2025/03/15(土) 09:16:05.70ID:tr5ODwiQ
>>495
一般的に constraints の訳語として「制約」をあてるのでこの場合には好ましいとは言えない。
ただ Haskell で constraints と呼んでいるものと Rust で bounds と呼んでいるものに類似点があるかというとまあ結構あるとは思う。
2025/03/15(土) 09:23:16.52ID:M+mqoQUv
二つの辺の長さが等しいと言う制約のと
○○という関数を持っていると言う制約
511デフォルトの名無しさん
垢版 |
2025/03/15(土) 09:24:31.14ID:qQFYiVQo
>>494
ブランチを切るで暴れてた人ですねわかります

>>501
そんな理由だったら単に「定格」でいいわ
2025/03/15(土) 09:31:26.54ID:M+mqoQUv
カタカナでいいんじゃないかw
英語見た場合に納得できる
2025/03/15(土) 09:43:00.89ID:M+mqoQUv
こういう時は何故かHaskell = 圏論勢が出てこない
514デフォルトの名無しさん
垢版 |
2025/03/15(土) 09:44:01.84ID:MW+uPLNw
>>506
英語版の Rust book だと「型やライフタイムの使われ方を制限する (to restrict) 」とあるよ

Trait and lifetime bounds provide a way for generic items to restrict which types and lifetimes are used as their parameters.

数学とかプログラミングと関係ない、普通の言葉としての bound は元は「紐で縛る」から来てる
制限、制約、境界といった意味はそこからの派生
515デフォルトの名無しさん
垢版 |
2025/03/15(土) 09:53:00.21ID:MW+uPLNw
そもそも >>506 だって制約だと思う
ジェネリクス関数の中で呼べるメソッドが増えることに注目してるようだけど、利用側から見ればその関数に渡せる型について制限が増えるでしょ
2025/03/15(土) 10:02:10.90ID:ub1zWmmn
>>515
それはおかしい
トレイト境界の対象は型
最も制約の多いAny状態を出発点として
トレイト境界を増やせば増やすほど型が機能できる自由度が増えていく
2025/03/15(土) 10:28:22.62ID:M+mqoQUv
>>516

三角形が二等辺三角形のみに限定されて自由度が増えてると思うか?

これが制約だと思えない人は数学的な素養がない
2025/03/15(土) 10:35:19.38ID:qQFYiVQo
>>506
トレイト視界にすれば良かったんじゃね
2025/03/15(土) 10:37:07.82ID:e4F+UdWA
トレイトバウンズでええやん
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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