Skip to content

Commit 2cd9594

Browse files
"favors...than its alternatives" の翻訳を変更、訳注を追加
Co-authored-by: Tatsuya Kawano <tatsuya@hibaridb.org>
1 parent e2bc65c commit 2cd9594

File tree

1 file changed

+14
-1
lines changed

1 file changed

+14
-1
lines changed

src/rust-2018/new-keywords.md

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ is sometimes slower, and often cannot be used at all when its alternatives can.
106106
-->
107107

108108
トレイトオブジェクトにトレイト名をそのまま使うのは悪手だったと、後になって分かりました。
109-
今までの構文は、経験者にとってさえ往々にして曖昧にして難解で、代替のものより頻繁に使われない機能が優遇され<!-- TODO: "a feature that is not more frequently used" とは何のことですか?-->、時には遅く、代替機能にはできることができないのです。
109+
今までの構文は、経験者にとってさえ往々にして曖昧にして難解で、代替機能を使うべきで本来お呼びでないような場面[^1]で頻繁に使われ、時には遅く、代替機能にはできることができないのです。
110110

111111
<!--
112112
Furthermore, with `impl Trait` arriving, "`impl Trait` vs `dyn Trait`" is much
@@ -129,6 +129,19 @@ where you need a trait object.
129129
-->
130130
[impl-trait]: https://doc.rust-jp.rs/rust-by-example-ja/rust-by-example/trait/impl_trait.html
131131

132+
133+
> [^1] *訳注*:
134+
原文ではこの文は、本ページで説明する新構文を提案する [RFC](https://rust-lang.github.io/rfcs/2113-dyn-trait-syntax.html) から抜粋された文章になっています。
135+
特に脚注で示した箇所は、原文では "favors a feature that is not more frequently used than its alternatives" とあり、その文意は[同 RFC に解説されています](https://rust-lang.github.io/rfcs/2113-dyn-trait-syntax.html#favors-a-feature-that-is-not-more-frequently-used-than-its-alternatives)。以下では、それを要約します。
136+
特定のトレイトを実装した異なる型を共通して扱いたいとき、大抵はトレイトオブジェクトを使う必要はありません。
137+
単一のコンテナに複数の型の構造体を入れたい場合、`enum` を使えばよいです。
138+
関数の返り値が特定のトレイトを実装していると示すには、`impl Trait` 構文を使えばよいです。
139+
特定のトレイトを実装する任意の型を関数の引数や構造体のフィールドにした場合、ジェネリクスを使えばよいです。
140+
大抵の場合は、このようにセマンティクス面からもパフォーマンス面からもより適切な代替案があり、トレイトオブジェクトの出る幕はありません。
141+
トレイトオブジェクトが真に必要なのは、これより複雑なことをしたい場合だけです。
142+
しかし、Rust 2015 では、`&Trait` のように書くだけで、「気軽に」トレイトオブジェクトが作れてしまうという罠がありました。
143+
そこで、Rust 2018 では、どうしてもトレイトオブジェクトを作りたい場合は `&dyn Trait` 構文を使用することが必要になりました。
144+
132145
<!--
133146
### `async` and `await`
134147
-->

0 commit comments

Comments
 (0)