Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

「トレイト境界」という訳語について公式コミュニティでの見解 #172

Open
sundaycrafts opened this issue Nov 22, 2021 · 4 comments

Comments

@sundaycrafts
Copy link

sundaycrafts commented Nov 22, 2021

初めまして、 #20 / #153@rust-lang-ja/the-rust-programming-language-ja で過去に議論されていた件ですが、私も気になって公式コミュニティで質問してみました。

https://users.rust-lang.org/t/what-is-trait-bounds-exact-meaning/67695

詳細はリンク先をご覧いただければと思いますが、結論としてはやはり "trait bound" は「トレイト境界」という訳語で本来のニュアンスと剥離はないようです。

この issue にたどり着いた人のために以下にコミュニティやこれまでの議論から私が得られた「トレイト境界」という名称の意図を要約しておきます:

  • ここでの「bound」は数学における「上界・下界」を意味します。 プログラミング言語に限定した上界下界の解説は Scala のドキュメント がわかりやすいですが、「抽象的な型(ジェネリック型)の取りうる値を、型変数の値を設定する(=境界をひく)ことで制限し、型の詳細を定義する」という意味となります。
  • 例として、 Rust では関数(Fn/fn)の引数の型を定義することもできますが、これは「トレイト(trait: 「特性・特質」の意)の境界を一般的な(大雑把に言ってしまえば曖昧な)関数型に適用することで、その型がとりうる値を制限し、より具体的な型を定義する」と表現することができます。

以上、コメントにて補足・訂正いただければ大変ありがたいです。

@tatsuya6502 tatsuya6502 pinned this issue Nov 22, 2021
@hakoz2016
Copy link

Rust by ExampleのBoundsの項で
”When working with generics, the type parameters often must use traits as bounds to stipulate what functionality a type implements. For example, the following example uses the trait Display to print and so it requires T to be bound by Display; that is, T must implement Display.”となっているので、”制限”とか”束縛”の方が適切かと思います。”to be bound by”で”束縛(拘束)される”ですよね?

@hiroakitakada
Copy link

The Rust Programming Language 日本語版を勉強させていただいている中で,「トレイト境界」という用語に違和感を持ち,ここにたどり着きました。
「bound」が数学における「上界・下界」を意味することはわかりましたが,「上界・下界」には,「値がその範囲に限られている」という意味合いがあります。それに対して「境界」という用語は,2つのものを「区切る」という意味合いが強く,「限る」というニューアンスが薄い用語だと思います。「trait bound」は,ある性質(trait)を持っている型に限るという意味合いだと考えますので,「限る」という意味合いがある用語の方が妥当と思います。
例えば,上のコメントにもありますが,「トレイト制限」は良いように思います。または,意訳が許されるのであれば,日本語では「性質」は「持つ」とか「備える」と言いますので,「トレイト保有」とか「トレイト具備」とする手もあると思います。

@sundaycrafts
Copy link
Author

sundaycrafts commented Jan 2, 2022

私は意見を持ちませんが、掲題のリンク先の質問に対する回答を見る限り、少なくとも上記2件の質問については、翻訳の問題ではなくその機能に対する解釈そのものの問題である(つまりもし「トレイト境界」という訳に違和感があるのであれば、それは英語話者たちの間にもある認識の揺れである)ように思いますので、その議論は本リポジトリの目的のスコープ外であるように思えます。

参考までに、掲題のリンクにある、関連する公式コミュニティでの回答の原文と訳(機械翻訳)を以下に示します。

Borders, yes. In mathematics you might hear about “upper and lower bounds” for a numeric variable — it's the same sort of thing, setting boundaries for what values (types) the type-variable may take on.

(注: trait bound は bind なのか border なのかという質問に対して) 境界線ですね。数学で数値変数の「上限と下限」という言葉を聞くことがありますが、それと同じようなもので、型変数が取りうる値(型)の境界を設定するのです。

@nodamotoki
Copy link

nodamotoki commented Mar 4, 2023

数冊の本を読みましたが、やはり私もトレイト境界という用語にとまどった一人です。

私は、 trait bound は、型に対する制約を課すしくみですから、「トレイト制約」が適切と思います。

hakoz2016さんが記載された to be bound by の訳としてもズレていないと思いますし。

私は、日本語話者の多くに Rust の機能を伝えることを目的とするなら、トレイト境界という用語はなるべく早く変更するべきだと思います。

境界と聞いてその機能を正確に想起できる人はそんなにいないでしょう。
そのため、この用語の意味をキチンと理解しようと思えば、いったん読むのをやめて、何を言っているのだろう? と考えなければならない。

そうなると、ある程度技術書を読み慣れた人は原文にあたろうとするでしょう。あるいは原文にあたらないとしても、読んでいた本を投げ出してネットを検索し始めることになります。

そして、調べた末にたどり着くのは、「つまり型に制約を課すということか」という結論です。それは今読んでいた本やWebサイトに書いてあることだと思いますが、納得するために時間を浪費することになります。

Rust に興味を持っている日本の技術者に早いスピードで情報をお伝えするために、”すっと“、理解しやすい言葉を使うほうがよいと思います。

同じことですが、多くの潜在的 Rust ユーザーに広くアプローチするにはどうするべきかという観点からも、「トレイト制約」とするのがよいかと。

この用語はオライリーの『プログラミング Rust』でも採用されていて、大変理解しやすいと感じています。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants