公式
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/
Rust part27
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2024/12/02(月) 22:32:50.31ID:D+1pIyvG418デフォルトの名無しさん
2025/03/10(月) 12:17:05.04ID:BVl3qR6K 歴史的にマクロ=悪の固定観念もってるプログラマも多い気がするから
macro_rules!()はtemplate!()に改名した方がいいかもしれんね
impl Traitとかマクロ使わないと面倒な場合が多い
macro_rules!()はtemplate!()に改名した方がいいかもしれんね
impl Traitとかマクロ使わないと面倒な場合が多い
419デフォルトの名無しさん
2025/03/11(火) 15:16:53.15ID:mrtJh8pq Rustってfor_eachのclosureのなかでbreak出来ないのです
420デフォルトの名無しさん
2025/03/11(火) 16:23:47.17ID:GvJGmymX >>418
名前は Scheme の syntax-rules から持ってきたんだと思う。
名前は Scheme の syntax-rules から持ってきたんだと思う。
421デフォルトの名無しさん
2025/03/11(火) 16:37:58.97ID:FiOBTiHo422デフォルトの名無しさん
2025/03/11(火) 19:10:27.26ID:iBVYkGzp >>419
クロージャは(変数をキャプチャできる)関数の一種なのでbreakなんて概念はない
for_eachはクロージャを引数に取る高階関数なのでbreakなんて概念はない
次々とやってくる「全ての各エレメント」に対して何度もそのクロージャを呼び出すだけなのでクロージャで早期returnしようとしても全てのエレメントに対して処理される
やりたいことはおそらく次々とやってくるエレメントの途中で処理を終えたいのだろうからfor_eachではなく以下のイテレーターメソッドを使う
クロージャは(変数をキャプチャできる)関数の一種なのでbreakなんて概念はない
for_eachはクロージャを引数に取る高階関数なのでbreakなんて概念はない
次々とやってくる「全ての各エレメント」に対して何度もそのクロージャを呼び出すだけなのでクロージャで早期returnしようとしても全てのエレメントに対して処理される
やりたいことはおそらく次々とやってくるエレメントの途中で処理を終えたいのだろうからfor_eachではなく以下のイテレーターメソッドを使う
423デフォルトの名無しさん
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
中断条件を分離できるならばイテレータを返してくれる(そして他のイテレータメソッドを繋げられる)以下を使うのがベター
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
424デフォルトの名無しさん
2025/03/11(火) 21:21:23.37ID:jytsrQer 要点をまとめる力って大事だな
425デフォルトの名無しさん
2025/03/12(水) 00:42:42.49ID:XRphkku6 クロージャが関数の一種なのか関数がクロージャの一種なのかそれが問題だ
426デフォルトの名無しさん
2025/03/12(水) 02:15:27.24ID:ck/kStOw 大雑把な説明としては、
クロージャは(キャプチャがある)関数の一種、
関数は(キャプチャのない)クロージャの一種、
と言っても構わないが、
実際には、
Fnで使えるのはsafeなfnのみ、
fnにコアースできるのはキャプチャのないFnのみ、
といった関係。
クロージャは(キャプチャがある)関数の一種、
関数は(キャプチャのない)クロージャの一種、
と言っても構わないが、
実際には、
Fnで使えるのはsafeなfnのみ、
fnにコアースできるのはキャプチャのないFnのみ、
といった関係。
427デフォルトの名無しさん
2025/03/12(水) 12:58:04.29ID:7dQQHGES クロージャと言えばFn(&mut T) -> ()みたいな定義が許容されてるのはなんでなの?
間違った使い方をすればownershipルールに違反してエラーにはなるだろうけどFnMut(&mut T)->()にするよう弾いたほうがよくない?
間違った使い方をすればownershipルールに違反してエラーにはなるだろうけどFnMut(&mut T)->()にするよう弾いたほうがよくない?
428デフォルトの名無しさん
2025/03/12(水) 13:35:41.11ID:aNDBBqWo429デフォルトの名無しさん
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の最後の行の解説とか
ツッコミどころが盛り沢山
>try_for_each(): Iterator<T> -> (T -> Try<B=()>) -> Try<B=()>
>失敗するかもしれない関数について for_each 的な操作を行う関数。
>これといって特記すべきこともないが、今まで for で書いていたものがシンプルにできる、ありがたい関数である。
>もし成功時にも何らかの意味ある値を返したいのであれば、 try_fold を使うべきである。
例えばtry_for_eachの最後の行の解説とか
ツッコミどころが盛り沢山
430デフォルトの名無しさん
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の引数二つは毎回消費できる。
クロージャの引数は、毎回変わるのだから常に何をしても自由であり、引数を消費してしまおうが、可変参照があって参照先を書き換えようが自由。
クロージャで制限がありうるのはキャプチャした値のみ。
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の引数二つは毎回消費できる。
431デフォルトの名無しさん
2025/03/12(水) 21:01:47.70ID:BjrFEung >>428
一番重要な独自の分類方法を最初にまとめて書かないからクソ記事になる
一番重要な独自の分類方法を最初にまとめて書かないからクソ記事になる
432デフォルトの名無しさん
2025/03/12(水) 21:52:39.29ID:m5dRvsnl433デフォルトの名無しさん
2025/03/13(木) 02:14:17.95ID:RNV6T1tE なんでtypescriptのソースをrustに移植できないの?
プログラムなんだから不可能ってことはないでしょ?
プログラムなんだから不可能ってことはないでしょ?
434デフォルトの名無しさん
2025/03/13(木) 04:38:06.94ID:RfjEKuUj >>433
出来ることと効果的に出来ることは別というシンプルな話。
出来ることと効果的に出来ることは別というシンプルな話。
435デフォルトの名無しさん
2025/03/13(木) 07:14:12.10ID:93baVECr TypeScriptのコンパイラはその利用の多さからもっと高速さを狙ってC/C++・Rust・ZigなどのGC非依存言語で書く価値がありブラウザ上Wasm実行の観点からもそうすべきだったが
担当者の能力不足のため遅いGC依存言語から速いGC依存言語へ書き換えるだけで終わってしまった
そのため早くもWasmでの実行が遅いという指摘が出ている
担当者の能力不足のため遅いGC依存言語から速いGC依存言語へ書き換えるだけで終わってしまった
そのため早くもWasmでの実行が遅いという指摘が出ている
436デフォルトの名無しさん
2025/03/13(木) 07:27:03.63ID:gAHIvnwi 要するに、GC依存症の人にはrustは過ぎた物って事か。
437デフォルトの名無しさん
2025/03/13(木) 07:45:56.77ID:FfpB+bg4 アンダース・ヘルスバーグが能力不足なんて話があるかいな。
Rust や C# が得意なのにあえて Go を選定したんだぞ。
WASM 上で遅いのは WASM のほうの性能不足だ。
Go の優秀さはランタイムサポートの作り込みにあり、それが十全に発揮されない環境ではそりゃ遅い。
Rust や C# が得意なのにあえて Go を選定したんだぞ。
WASM 上で遅いのは WASM のほうの性能不足だ。
Go の優秀さはランタイムサポートの作り込みにあり、それが十全に発揮されない環境ではそりゃ遅い。
438デフォルトの名無しさん
2025/03/13(木) 07:53:47.23ID:TRbLLvdR Rustで書けばwasmの件も問題なかったわけだからGoという中途半端な言語を選んだ選択ミスだな~
439デフォルトの名無しさん
2025/03/13(木) 08:52:01.37ID:FfpB+bg4 WASM ってそんなに絶対に考慮が必要なほど重要なプラットフォームか?
コンパイラを WASM 上で動かそうとする判断をするやつがいたらそのほうが選択ミスだろ。
TypeScript からの移植という前提があったから Go が比較的やりやすいと判断された。
関数単位でほとんど一対一のベタ移植を出来てる。
コンパイラを WASM 上で動かそうとする判断をするやつがいたらそのほうが選択ミスだろ。
TypeScript からの移植という前提があったから Go が比較的やりやすいと判断された。
関数単位でほとんど一対一のベタ移植を出来てる。
440デフォルトの名無しさん
2025/03/13(木) 09:41:53.87ID:9FAKkD2W GC言語で書かれたプログラムをRustに移植しようとするとプログラムの構造を大幅に変えなきゃいけないからな
まあRustでのプロトタイピングも絶対やってるだろうけど
まあRustでのプロトタイピングも絶対やってるだろうけど
441デフォルトの名無しさん
2025/03/13(木) 09:56:55.03ID:yv4NvN1D スパゲッティになってる下手なプログラムは、Rustで書く時にそれをほどいてまともなプログラムにしなきゃいけないもんね
それにより効率改善や機能拡張などの保守性も格段にアップするから、当たり前で必須な作業なんだけど、手間を惜しんだのかね
それにより効率改善や機能拡張などの保守性も格段にアップするから、当たり前で必須な作業なんだけど、手間を惜しんだのかね
442デフォルトの名無しさん
2025/03/13(木) 10:18:55.01ID:9FAKkD2W また的外れなことを
普段Rust書いてれば嫌でも分かることなんだけどなぁ
普段Rust書いてれば嫌でも分かることなんだけどなぁ
443デフォルトの名無しさん
2025/03/13(木) 10:39:22.49ID:FfpB+bg4 TypeScript で書いてあることの弊害としてランタイム (つまりは JavaScript 実行環境) がウェブ用に最適化されてることを挙げてる。
ウェブのプログラムではリクエストごとのターンアラウンドタイムが重要だが、コンパイラは時間あたりの計算量が重要で、違う戦略が要る。
コードの保守などはとりたてて問題になっていない。
もしより良く出来る余地があったとしても組織としてコストを支払うほどの価値じゃない。
ウェブのプログラムではリクエストごとのターンアラウンドタイムが重要だが、コンパイラは時間あたりの計算量が重要で、違う戦略が要る。
コードの保守などはとりたてて問題になっていない。
もしより良く出来る余地があったとしても組織としてコストを支払うほどの価値じゃない。
444デフォルトの名無しさん
2025/03/13(木) 11:03:01.65ID:1bSTG+9t Rustの話題だとダンマリなのに
どうでもいい他の言語の話だと連投するヤツいつもいるな
どうでもいい他の言語の話だと連投するヤツいつもいるな
445デフォルトの名無しさん
2025/03/13(木) 12:14:30.28ID:C23vdZ7h 政治や流行に流されない決断ができる土壌があるのは良い組織
動画を見るとヘルスバーグの優秀さがひしひしと伝わってくる
windowsのPMとは大違い
動画を見るとヘルスバーグの優秀さがひしひしと伝わってくる
windowsのPMとは大違い
446デフォルトの名無しさん
2025/03/13(木) 12:57:02.36ID:TBxE2TsU 一通りいろんな言語でプロトタイプコンパイラー作ってみたって動画内でも言ってたじゃねーか。で、Goが一番一対一で手堅く移植できる上に十分に速度アップもしたと言うことかと
パランスの問題だよ。時間をかけてリターンがどれだけあるか。だって営利企業だしプログラマーは無料じゃない。実際、方針決まってからはギットハブ・コパイロットに大部分やらせたんだろうがな
パランスの問題だよ。時間をかけてリターンがどれだけあるか。だって営利企業だしプログラマーは無料じゃない。実際、方針決まってからはギットハブ・コパイロットに大部分やらせたんだろうがな
447デフォルトの名無しさん
2025/03/13(木) 14:32:17.25ID:XQNYuMCZ なんでfirefoxのソースをrustにできないの?
プログラムなんだから不可能ってことはないでしょ?
プログラムなんだから不可能ってことはないでしょ?
448デフォルトの名無しさん
2025/03/13(木) 15:24:15.58ID:chX1MDYs 新たに作るものはRust一択になりつつあるが
既に別の言語で書かれているものはそれを負の遺産として考慮しなければいけなくなる
サンクコスト効果コンコルド効果に加え既存言語プログラマの抵抗勢力も足を引っ張る要因となる
既に別の言語で書かれているものはそれを負の遺産として考慮しなければいけなくなる
サンクコスト効果コンコルド効果に加え既存言語プログラマの抵抗勢力も足を引っ張る要因となる
449デフォルトの名無しさん
2025/03/13(木) 16:51:18.65ID:FfpB+bg4450デフォルトの名無しさん
2025/03/13(木) 16:55:33.59ID:TBxE2TsU 日本語を型付きにして文法的に正しく無い書き込みは投稿ボタン押した時点で弾くようにならんかな。必ず日本語コンパイルエラー無しなのを確認してからしか誰も会話しちゃいけないなら世の中より良くなるはず。頭の中がスッキリする。
451デフォルトの名無しさん
2025/03/13(木) 17:09:05.03ID:P+4CnHos 型への幻想期は誰しもが通る
そのうち人間には無理なことを悟るまでがテンプレ
そのうち人間には無理なことを悟るまでがテンプレ
452デフォルトの名無しさん
2025/03/13(木) 17:23:47.86ID:jEo0CRn4 >>448
頭おかしい
頭おかしい
453デフォルトの名無しさん
2025/03/13(木) 18:17:51.78ID:TqCxXK+v 状況に応じて適切な言語を選択するのが普通の技術者
特定の言語に入信して
なんでRustじゃないんだなんでC#じゃないんだと
感情的にコメントを書いてるやつが多くてすごく滑稽
特定の言語に入信して
なんでRustじゃないんだなんでC#じゃないんだと
感情的にコメントを書いてるやつが多くてすごく滑稽
454デフォルトの名無しさん
2025/03/13(木) 19:27:26.68ID:k0eZFisu455デフォルトの名無しさん
2025/03/13(木) 20:01:28.10ID:WjiwUoIR 「あると良いね」くらいじゃね
DropboxもPythonだったんだから、Dropboxくらいちゃんとしたサービスのレベルまで行っても必要条件であることはありえない
そしてそれよりデカいサービスの立ち上げは言語どうこうとかよりそもそもそのサービスが参入できる隙間を見つけて高速に参入することが重要。
DropboxもPythonだったんだから、Dropboxくらいちゃんとしたサービスのレベルまで行っても必要条件であることはありえない
そしてそれよりデカいサービスの立ち上げは言語どうこうとかよりそもそもそのサービスが参入できる隙間を見つけて高速に参入することが重要。
456デフォルトの名無しさん
2025/03/13(木) 20:08:43.13ID:k0eZFisu やりたければどんな言語でも手間暇かければできるのは当たり前
強い静的型付け言語で構築しないと開発保守効率が劣り時間と労力の無駄
強い静的型付け言語で構築しないと開発保守効率が劣り時間と労力の無駄
457デフォルトの名無しさん
2025/03/13(木) 20:36:11.24ID:SWRT78Fy 効率の話か
それで言うと、ビジネス感覚のある人が好まない言語はそもそもビジネスが成功しないから開発するだけ無駄だな
それで言うと、ビジネス感覚のある人が好まない言語はそもそもビジネスが成功しないから開発するだけ無駄だな
458デフォルトの名無しさん
2025/03/13(木) 21:26:10.48ID:9FAKkD2W 時間をかけないためにスタートアップは動的言語を使ってるんだけどな
Facebook, Instagram, Youtube, Github, Twitterと例をあげればキリがない
Facebook, Instagram, Youtube, Github, Twitterと例をあげればキリがない
459デフォルトの名無しさん
2025/03/13(木) 21:29:22.70ID:qpPbxTOG ここまでIT時代になる前だけじゃね
460デフォルトの名無しさん
2025/03/13(木) 21:29:44.10ID:qpPbxTOG スタートアップは静的型付言語しか勝たん
https://zenn.dev/ficilcom/articles/static-typing-for-startup
https://zenn.dev/ficilcom/articles/static-typing-for-startup
461デフォルトの名無しさん
2025/03/13(木) 22:02:56.19ID:uZxDbhjk 動的型付け言語を捨てて静的型付け言語に移行したとか
静的型付け拡張の開発を主導してるような…
あと最近はスタートアップでフルスタック
typescriptにしてるところは珍しくない
静的型付け拡張の開発を主導してるような…
あと最近はスタートアップでフルスタック
typescriptにしてるところは珍しくない
462デフォルトの名無しさん
2025/03/13(木) 22:24:27.62ID:FfpB+bg4 それぞれに適したものがあっても関連するプロジェクト全体で一貫した言語を使った方がスキルセットの管理が単純になるから運用が楽になることはある。
ウェブ系だと JavaScript か AltJS は避けられないのでそれに寄ってしまうのは仕方がない。
ウェブ系だと JavaScript か AltJS は避けられないのでそれに寄ってしまうのは仕方がない。
463デフォルトの名無しさん
2025/03/13(木) 22:26:07.36ID:yXHfiD0Z 自分の頭で考えられない人ほど
またスキルや経験の幅が狭い人ほど
特定の技術を宗教化して盲信しやすい
そうなるとますます自分の頭で考えられなくなり
どんな不都合な事実があろうと
教義に反さないよう都合よく解釈しようとする
優秀な技術者の対極
またスキルや経験の幅が狭い人ほど
特定の技術を宗教化して盲信しやすい
そうなるとますます自分の頭で考えられなくなり
どんな不都合な事実があろうと
教義に反さないよう都合よく解釈しようとする
優秀な技術者の対極
464デフォルトの名無しさん
2025/03/13(木) 23:02:12.20ID:9Gk42cK0 >>462
フロントサイドはTypeScript+WebAssemblyで良いけど
サーバーサイドまでTS/JSはリソースの無駄遣いなんだよね
もちろんまだ技術の発展途中なのでSSG/SSRをハイドレーションしてCSRするなら
その部分に限ってTS/JSでコード共通化は理解できるけどね
フロントサイドはTypeScript+WebAssemblyで良いけど
サーバーサイドまでTS/JSはリソースの無駄遣いなんだよね
もちろんまだ技術の発展途中なのでSSG/SSRをハイドレーションしてCSRするなら
その部分に限ってTS/JSでコード共通化は理解できるけどね
465デフォルトの名無しさん
2025/03/14(金) 08:00:59.55ID:UemB6eEp >>460
最も普及しているC++を消している時点で論外。
最も普及しているC++を消している時点で論外。
466デフォルトの名無しさん
2025/03/14(金) 08:20:44.97ID:UemB6eEp 静的であろうと動的であろうと重要なのは(関数呼び出しなどの)コードの接続面・境界面の互換性であって、オブジェクト操作の互換性があれば良い。
動的型付けはこの互換性が実行時でないと判定されないのが問題であって、コード開発時(コンパイル)等に互換性を判定する仕組みがあれば問題無くなる。
コード解析は貧弱なので役に立たないが、静的インターフェイスのサポートなどで改善するだろう(今はそういうの無いけど)
静的型付けは互換性の判定のために型の命名を強制されるので、設計の柔軟性が無いなどの問題を持つ。こちらもC++コンセプトのよう静的インターフェイスで改善するので、今後は変数のコンセプト対応のようなインターフェイス改善で解決していくだろう。
RustのTrait境界もコンセプトのような柔軟性が欲しいところ。
動的型付けはこの互換性が実行時でないと判定されないのが問題であって、コード開発時(コンパイル)等に互換性を判定する仕組みがあれば問題無くなる。
コード解析は貧弱なので役に立たないが、静的インターフェイスのサポートなどで改善するだろう(今はそういうの無いけど)
静的型付けは互換性の判定のために型の命名を強制されるので、設計の柔軟性が無いなどの問題を持つ。こちらもC++コンセプトのよう静的インターフェイスで改善するので、今後は変数のコンセプト対応のようなインターフェイス改善で解決していくだろう。
RustのTrait境界もコンセプトのような柔軟性が欲しいところ。
467デフォルトの名無しさん
2025/03/14(金) 09:19:28.18ID:43evLOjO468デフォルトの名無しさん
2025/03/14(金) 09:28:09.15ID:43evLOjO469デフォルトの名無しさん
2025/03/14(金) 10:32:08.08ID:7EyFuQVw470デフォルトの名無しさん
2025/03/14(金) 11:38:23.16ID:B7+exQLS 「トレイト境界」などという完全な誤訳をいつまで使い続けるのかね?
471デフォルトの名無しさん
2025/03/14(金) 12:33:09.87ID:YVXMDGNS わざわざBoundsと言ってる意味を考えてみてはどうか
第一言語が英語の俺からすると境界で違和感ない
お前は日本語が怪しいだろと言われれば確かにその通りだが
第一言語が英語の俺からすると境界で違和感ない
お前は日本語が怪しいだろと言われれば確かにその通りだが
472デフォルトの名無しさん
2025/03/14(金) 12:47:34.83ID:UemB6eEp 限界とか条件ならbounds じゃなくてlimitationだしな。
interface的な意味合いが強いのにinterfaceにしなかった理由はなんでかね?
interface的な意味合いが強いのにinterfaceにしなかった理由はなんでかね?
473デフォルトの名無しさん
2025/03/14(金) 13:17:04.00ID:B4ilMY36 >>472
英単語としてはそうかもしれんが、他の言語の用語にある interface と似た部分はありつつもやっぱり違うし、そこらへんは違う語をあてたほうが自然だと思う。
英単語としてはそうかもしれんが、他の言語の用語にある interface と似た部分はありつつもやっぱり違うし、そこらへんは違う語をあてたほうが自然だと思う。
474デフォルトの名無しさん
2025/03/14(金) 13:26:54.49ID:g9xx7i1P 通勤電車乗ってなくてうらやましい
> 目的地を意味する表現です。 例文. This train is bound for Tokyo station. この電車は東京駅 ...
> 目的地を意味する表現です。 例文. This train is bound for Tokyo station. この電車は東京駅 ...
475デフォルトの名無しさん
2025/03/14(金) 15:16:32.42ID:0UsQo6GT >>474
それは「bound for」という熟語だし、さらに言えば
bound 境界
for 方向(対象までの間が主眼)
の組み合わせでそういう意味になるから、boundの例示で出すのは不適切かと。
inboundも外→内の境界付近のイメージが強いし、なんか良い例無いんかね。
それは「bound for」という熟語だし、さらに言えば
bound 境界
for 方向(対象までの間が主眼)
の組み合わせでそういう意味になるから、boundの例示で出すのは不適切かと。
inboundも外→内の境界付近のイメージが強いし、なんか良い例無いんかね。
476デフォルトの名無しさん
2025/03/14(金) 15:34:58.04ID:PY82133/ circleじゃなくてdiskの方に適用可能範囲があるから、境界を印象付けてもしょうがない
範囲や領域って言えばいい
範囲や領域って言えばいい
477デフォルトの名無しさん
2025/03/14(金) 15:53:13.20ID:43evLOjO >>472
Java語は要らんのだよ
Java語は要らんのだよ
478デフォルトの名無しさん
2025/03/14(金) 16:27:19.78ID:dr+oAB1W 清々しいまでにバカばっかだなwww
479デフォルトの名無しさん
2025/03/14(金) 16:29:54.73ID:dr+oAB1W480デフォルトの名無しさん
2025/03/14(金) 16:37:10.71ID:dr+oAB1W >>472
>限界とか条件ならbounds じゃなくてlimitationだしな
boundsをそのまま表現できる日本語の二字熟語は存在しないから完璧な訳語というのはない
完全な誤訳というのはあるけれども
>限界とか条件ならbounds じゃなくてlimitationだしな
boundsをそのまま表現できる日本語の二字熟語は存在しないから完璧な訳語というのはない
完全な誤訳というのはあるけれども
481デフォルトの名無しさん
2025/03/14(金) 16:39:22.00ID:dr+oAB1W >>475
おいおいww
bound forのboundとtrait boundsのboundはスペルが同じだけで意味も語源も違う単語だぞ
何が「bound 境界」と「for 方向(対象までの間が主眼)」の組み合わせてそういう意味になるだよ
不適切にもほどがあるかど。
おいおいww
bound forのboundとtrait boundsのboundはスペルが同じだけで意味も語源も違う単語だぞ
何が「bound 境界」と「for 方向(対象までの間が主眼)」の組み合わせてそういう意味になるだよ
不適切にもほどがあるかど。
482デフォルトの名無しさん
2025/03/14(金) 16:41:51.77ID:aBKsJZMd 束縛を誤用してる言語なんだから
483デフォルトの名無しさん
2025/03/14(金) 16:44:31.04ID:dr+oAB1W inboundももちろんbound forのboundと同じでtrait boundsのboundとは関係ないからな
484デフォルトの名無しさん
2025/03/14(金) 16:50:31.18ID:dr+oAB1W485デフォルトの名無しさん
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って俺らプログラマーは普通にコーティングするとき使ってるから。意味もわからずニュアンスだけ知ってりゃコーティングミスしないよ
この例を見てくれよ
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って俺らプログラマーは普通にコーティングするとき使ってるから。意味もわからずニュアンスだけ知ってりゃコーティングミスしないよ
486デフォルトの名無しさん
2025/03/14(金) 19:03:43.60ID:lylWP6au >>485
>他動詞なんだからしゃーない日本語にはその概念が未導入だ
よく意味がわからないんだがなんで他動詞だとしゃーないの?
未導入の概念というのはBoundsのこと?
ちなみにその例にあるBoundsは名詞
>他動詞なんだからしゃーない日本語にはその概念が未導入だ
よく意味がわからないんだがなんで他動詞だとしゃーないの?
未導入の概念というのはBoundsのこと?
ちなみにその例にあるBoundsは名詞
487デフォルトの名無しさん
2025/03/14(金) 22:14:58.94ID:jwX9vfGq >>485
2D描画の文脈で使われるboundsは基本的に矩形領域のこと(3Dなら直方体の領域)
trait boundsと同じように何かを制限する範囲/領域という原義から付けられた名前だがもし「境界」と訳されてるとしたらの機械翻訳の質の問題だろう
2D描画の文脈で使われるboundsは基本的に矩形領域のこと(3Dなら直方体の領域)
trait boundsと同じように何かを制限する範囲/領域という原義から付けられた名前だがもし「境界」と訳されてるとしたらの機械翻訳の質の問題だろう
488デフォルトの名無しさん
2025/03/14(金) 22:53:00.25ID:ujZbdgV7 >>470
オライリー「トレイト制約やで」
オライリー「トレイト制約やで」
489デフォルトの名無しさん
2025/03/14(金) 23:00:22.63ID:XJxEKa47 要するに機械翻訳を誤訳と気づかず採用したんだろ
プロの翻訳家は誤訳に気づいて修正したが間違いを認めたくない勢力が境界で違和感ないと言い張ってるわけだ
プロの翻訳家は誤訳に気づいて修正したが間違いを認めたくない勢力が境界で違和感ないと言い張ってるわけだ
490デフォルトの名無しさん
2025/03/14(金) 23:00:54.38ID:7+++WDHP BoundsChecker って最近見かけなくなったな
491デフォルトの名無しさん
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 下限境界
他の候補はない
Type1: Trait2 Type1の取れうる型のうちTrait2がその境界となっている
Trait3: Trait4 Trait3の…(同様)
つまりトレイトにより境界を引いている
このように各々意味が異なる
境界 bounds
限界 limitation
制約 constraints
他の例
array-bounds checking 配列境界検査
Scalaのupper type bounds 上限境界
Scalaのlower type bounds 下限境界
492デフォルトの名無しさん
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と同じ意味合い
日本語で境界というと、外と内といった「堺目」という意味合いが強い
自分はトレイト境界という表現に慣れてしまったのでそこまで違和感はないけど、訳としては不適当だと思う
余談だけどPythonとRustのFFIに使われるPyO3というクレートがあって、そこでは Bound という型が出てくる
これはPythonのGILに紐付いている意味合いで、trait boundのboundと同じ意味合い
494デフォルトの名無しさん
2025/03/15(土) 00:51:34.13ID:kGvPW5zF 「訳がおかしい」と言ってるアホ達が代案を出さないことからも境界がぴったりな言葉
トレイトで境界を引いている
トレイトで境界を引いている
495デフォルトの名無しさん
2025/03/15(土) 00:56:44.33ID:zVPlAU0P496デフォルトの名無しさん
2025/03/15(土) 01:20:52.90ID:kGvPW5zF boundsに制約なんて意味はない
trait boundsも、ある一定内の数値や、配列のインデックスなどのbounds checkingと同じく境界が定まる
trait boundsも、ある一定内の数値や、配列のインデックスなどのbounds checkingと同じく境界が定まる
497デフォルトの名無しさん
2025/03/15(土) 01:23:20.85ID:24RSx77o 訳語を探すそもそものアプローチというか考え方が間違ってるんだよな
498デフォルトの名無しさん
2025/03/15(土) 01:27:28.34ID:yH3qrd2j お前らそんなに和訳やる気あんならtatsuya6502のケツひっぱたいてこいや
499デフォルトの名無しさん
2025/03/15(土) 01:40:23.59ID:kGvPW5zF 「制約」という違和感ありまくりの間違った単語を使っているアホどもは、
例えばあるクラスに対してその基底クラスやスーパークラスを「制約」だと捉えているのか?
例えばあるクラスに対してその基底クラスやスーパークラスを「制約」だと捉えているのか?
500デフォルトの名無しさん
2025/03/15(土) 01:47:56.77ID:t2/vXXRn 意味的にはNapsterの水平線に近い
501デフォルトの名無しさん
2025/03/15(土) 01:58:38.26ID:CnlaKfFr トレイト境界とかいう和製英語やめて特性規定(特性を持ってますよって規定な)とかにしようや。省略しないなら特性保持規定、特性保有規定
ジェネリック型がある特性を持つという規定があるから、その特性を実装するっていう文なら自然だし
ジェネリック型がある特性を持つという規定があるから、その特性を実装するっていう文なら自然だし
502デフォルトの名無しさん
2025/03/15(土) 01:59:20.63ID:CnlaKfFr しまった、ジェネリックなって書いてしもうたな
503デフォルトの名無しさん
2025/03/15(土) 01:59:55.45ID:8rRdOox4 >>489
プロポですねわかります
プロポですねわかります
504デフォルトの名無しさん
2025/03/15(土) 02:11:53.31ID:kGvPW5zF505デフォルトの名無しさん
2025/03/15(土) 02:27:02.81ID:aXarc3PA 集合論的な意味での境界だな
ベン図のイメージ
T: EqはEqを実装する型の領域
T: CopyはCopyを実装する型の領域
T: Eq + CopyはT: EqとT: Copyが重なった領域
ベン図のイメージ
T: EqはEqを実装する型の領域
T: CopyはCopyを実装する型の領域
T: Eq + CopyはT: EqとT: Copyが重なった領域
506デフォルトの名無しさん
2025/03/15(土) 06:28:21.70ID:ub1zWmmn507デフォルトの名無しさん
2025/03/15(土) 09:13:26.13ID:M+mqoQUv 数学だと制約に相当するんでは?
三角形の内二等辺三角形があるのは条件を満たしているものだけ
プログラムも機能が充実するとイメージとは真逆で制約が強くなっていることになる
出来ることが増える=制約されてる
void*ポインターが無制限で型が付くと型の制限がある
三角形の内二等辺三角形があるのは条件を満たしているものだけ
プログラムも機能が充実するとイメージとは真逆で制約が強くなっていることになる
出来ることが増える=制約されてる
void*ポインターが無制限で型が付くと型の制限がある
508デフォルトの名無しさん
2025/03/15(土) 09:15:25.47ID:M+mqoQUv これはずっと考えていたことで今急にひらめいたとかじゃない
509デフォルトの名無しさん
2025/03/15(土) 09:16:05.70ID:tr5ODwiQ >>495
一般的に constraints の訳語として「制約」をあてるのでこの場合には好ましいとは言えない。
ただ Haskell で constraints と呼んでいるものと Rust で bounds と呼んでいるものに類似点があるかというとまあ結構あるとは思う。
一般的に constraints の訳語として「制約」をあてるのでこの場合には好ましいとは言えない。
ただ Haskell で constraints と呼んでいるものと Rust で bounds と呼んでいるものに類似点があるかというとまあ結構あるとは思う。
510デフォルトの名無しさん
2025/03/15(土) 09:23:16.52ID:M+mqoQUv 二つの辺の長さが等しいと言う制約のと
○○という関数を持っていると言う制約
○○という関数を持っていると言う制約
511デフォルトの名無しさん
2025/03/15(土) 09:24:31.14ID:qQFYiVQo512デフォルトの名無しさん
2025/03/15(土) 09:31:26.54ID:M+mqoQUv カタカナでいいんじゃないかw
英語見た場合に納得できる
英語見た場合に納得できる
513デフォルトの名無しさん
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 は元は「紐で縛る」から来てる
制限、制約、境界といった意味はそこからの派生
英語版の 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 だって制約だと思う
ジェネリクス関数の中で呼べるメソッドが増えることに注目してるようだけど、利用側から見ればその関数に渡せる型について制限が増えるでしょ
ジェネリクス関数の中で呼べるメソッドが増えることに注目してるようだけど、利用側から見ればその関数に渡せる型について制限が増えるでしょ
516デフォルトの名無しさん
2025/03/15(土) 10:02:10.90ID:ub1zWmmn517デフォルトの名無しさん
2025/03/15(土) 10:28:22.62ID:M+mqoQUv■ このスレッドは過去ログ倉庫に格納されています
