|
| 1 | +<!-- |
1 | 2 | # New keywords |
| 3 | +--> |
2 | 4 |
|
| 5 | +# 新しいキーワード |
| 6 | + |
| 7 | +<!-- |
3 | 8 |  |
| 9 | +--> |
| 10 | + |
| 11 | + |
4 | 12 |
|
| 13 | +<!-- |
5 | 14 | ## Summary |
| 15 | +--> |
6 | 16 |
|
| 17 | +## 概要 |
| 18 | + |
| 19 | +<!-- |
7 | 20 | - `dyn` is a [strict keyword][strict], in 2015 it is a [weak keyword]. |
8 | 21 | - `async` and `await` are [strict keywords][strict]. |
9 | 22 | - `try` is a [reserved keyword]. |
| 23 | +--> |
| 24 | + |
| 25 | +- `dyn` は[正格キーワード][strict]です。2015 では[弱いキーワード][strict]です。 |
| 26 | +- `asnyc` と `await` は[正格キーワード][strict]です。 |
| 27 | +- `try` は[予約キーワード]です。 |
10 | 28 |
|
| 29 | +<!-- |
11 | 30 | [strict]: https://doc.rust-lang.org/reference/keywords.html#strict-keywords |
12 | 31 | [weak keyword]: https://doc.rust-lang.org/reference/keywords.html#weak-keywords |
13 | 32 | [reserved keyword]: https://doc.rust-lang.org/reference/keywords.html#reserved-keywords |
| 33 | +--> |
14 | 34 |
|
| 35 | +[strict]: https://doc.rust-lang.org/reference/keywords.html#strict-keywords |
| 36 | +[弱いキーワード]: https://doc.rust-lang.org/reference/keywords.html#weak-keywords |
| 37 | +[予約キーワード]: https://doc.rust-lang.org/reference/keywords.html#reserved-keywords |
| 38 | + |
| 39 | +<!-- |
15 | 40 | ## Motivation |
| 41 | +--> |
| 42 | + |
| 43 | +## 動機 |
16 | 44 |
|
| 45 | +<!-- |
17 | 46 | ### `dyn Trait` for trait objects |
| 47 | +--> |
| 48 | + |
| 49 | +### トレイトオブジェクトを表す `dyn Trait` |
18 | 50 |
|
| 51 | +<!-- |
19 | 52 | The `dyn Trait` feature is the new syntax for using trait objects. In short: |
| 53 | +--> |
20 | 54 |
|
| 55 | +`dyn Trait` 機能は、トレイトオブジェクトを使うための新しい構文です。簡単に言うと: |
| 56 | + |
| 57 | +<!-- |
21 | 58 | * `Box<Trait>` becomes `Box<dyn Trait>` |
22 | 59 | * `&Trait` and `&mut Trait` become `&dyn Trait` and `&mut dyn Trait` |
| 60 | +--> |
| 61 | + |
| 62 | +* `Box<Trait>` は `Box<dyn Trait>` になり、 |
| 63 | +* `&Trait` と `&mut Trait` は `&dyn Trait` と `&mut dyn Trait` になる |
23 | 64 |
|
| 65 | +<!-- |
24 | 66 | And so on. In code: |
| 67 | +--> |
| 68 | + |
| 69 | +といった具合です。プログラム内では: |
25 | 70 |
|
26 | 71 | ```rust |
27 | 72 | trait Trait {} |
28 | 73 |
|
29 | 74 | impl Trait for i32 {} |
30 | 75 |
|
31 | 76 | // old |
| 77 | +// いままで |
32 | 78 | fn function1() -> Box<Trait> { |
33 | 79 | # unimplemented!() |
34 | 80 | } |
35 | 81 |
|
36 | 82 | // new |
| 83 | +// これから |
37 | 84 | fn function2() -> Box<dyn Trait> { |
38 | 85 | # unimplemented!() |
39 | 86 | } |
40 | 87 | ``` |
41 | 88 |
|
| 89 | +<!-- |
42 | 90 | That's it! |
| 91 | +--> |
43 | 92 |
|
| 93 | +これだけです! |
| 94 | + |
| 95 | +<!-- |
44 | 96 | #### Why? |
| 97 | +--> |
| 98 | + |
| 99 | +#### なぜ? |
45 | 100 |
|
| 101 | +<!-- |
46 | 102 | Using just the trait name for trait objects turned out to be a bad decision. |
47 | 103 | The current syntax is often ambiguous and confusing, even to veterans, |
48 | 104 | and favors a feature that is not more frequently used than its alternatives, |
49 | 105 | is sometimes slower, and often cannot be used at all when its alternatives can. |
| 106 | +--> |
50 | 107 |
|
| 108 | +トレイトオブジェクトにトレイト名をそのまま使うのは悪手だったと、後になって分かりました。 |
| 109 | +今までの構文は、経験者にとってさえ往々にして曖昧にして難解で、代替のものより頻繁に使われない機能が優遇され<!-- TODO: "a feature that is not more frequently used" とは何のことですか?-->、時には遅く、代替機能にはできることができないのです。 |
| 110 | + |
| 111 | +<!-- |
51 | 112 | Furthermore, with `impl Trait` arriving, "`impl Trait` vs `dyn Trait`" is much |
52 | 113 | more symmetric, and therefore a bit nicer, than "`impl Trait` vs `Trait`". |
53 | 114 | `impl Trait` is explained [here][impl-trait]. |
| 115 | +--> |
| 116 | + |
| 117 | +その上、`impl Trait` が入ったことで、「`impl Trait` か `dyn Trait` か」の関係はより対称的になり、「`impl Trait` か `Trait` か」よりちょっといい感じです。 |
| 118 | +`impl Trait` の説明は[こちら][impl-trait]です。 |
54 | 119 |
|
| 120 | +<!-- |
55 | 121 | In the new edition, you should therefore prefer `dyn Trait` to just `Trait` |
56 | 122 | where you need a trait object. |
| 123 | +--> |
| 124 | + |
| 125 | +したがって、新しいエディションでは、トレイトオブジェクトが必要なときは、ただの `Trait` でなく `dyn Trait` を使うべきです。 |
57 | 126 |
|
58 | 127 | <!-- |
59 | 128 | [impl-trait]: ../../rust-by-example/trait/impl_trait.html |
60 | 129 | --> |
61 | 130 | [impl-trait]: https://doc.rust-jp.rs/rust-by-example-ja/rust-by-example/trait/impl_trait.html |
62 | 131 |
|
| 132 | +<!-- |
63 | 133 | ### `async` and `await` |
| 134 | +--> |
64 | 135 |
|
| 136 | +### `async` と `await` |
| 137 | + |
| 138 | +<!-- |
65 | 139 | These keywords are reserved to implement the async-await feature of Rust, which was ultimately [released to stable in 1.39.0](https://blog.rust-lang.org/2019/11/07/Async-await-stable.html). |
| 140 | +--> |
66 | 141 |
|
| 142 | +これらのキーワードは Rust に非同期の機能を実装するために予約されました。非同期の機能は[最終的に 1.39.0 でリリースされました](https://blog.rust-lang.org/2019/11/07/Async-await-stable.html)。 |
| 143 | + |
| 144 | +<!-- |
67 | 145 | ### `try` keyword |
| 146 | +--> |
| 147 | + |
| 148 | +### キーワード `try` |
68 | 149 |
|
| 150 | +<!-- |
69 | 151 | The `try` keyword is reserved for use in `try` blocks, which have not (as of this writing) been stabilized ([tracking issue](https://github.com/rust-lang/rust/issues/31436)) |
| 152 | +--> |
| 153 | + |
| 154 | +キーワード `try` は `try` ブロックで使うために予約されましたが、(これを書いている時点で)まだ安定化されていません([追跡イシュー](https://github.com/rust-lang/rust/issues/31436)) |
0 commit comments