From 8e69bee75a5eef30ae8efcee5f9f65ae21e8fac8 Mon Sep 17 00:00:00 2001 From: Ken Sato Date: Fri, 1 Jan 2021 09:34:29 +0900 Subject: [PATCH 1/8] translate "What are editions?" section --- TranslationTable.md | 2 + src/editions/creating-a-new-project.md | 22 ++- src/editions/index.md | 44 ++++-- ...ng-an-existing-project-to-a-new-edition.md | 148 ++++++++++++------ 4 files changed, 153 insertions(+), 63 deletions(-) diff --git a/TranslationTable.md b/TranslationTable.md index f39a463..a7ffa21 100644 --- a/TranslationTable.md +++ b/TranslationTable.md @@ -17,6 +17,7 @@ | allocate | アロケートする | allocation | アロケーション | allocator | アロケータ +| anonymous parameter | 無名パラメータ | antipattern | アンチパターン | application | アプリケーション | arity | アリティ @@ -70,6 +71,7 @@ | documentation comment | ドキュメンテーションコメント | documentation test | ドキュメンテーションテスト | early return | 早期リターン +| edition | エディション | empty tuple | 空タプル | encode | エンコード | entry point | エントリポイント diff --git a/src/editions/creating-a-new-project.md b/src/editions/creating-a-new-project.md index e42f1e8..27e9e0c 100644 --- a/src/editions/creating-a-new-project.md +++ b/src/editions/creating-a-new-project.md @@ -1,9 +1,13 @@ -# Creating a new project + -```console +# 新しいプロジェクトを作成する + +Cargoは新たなプロジェクトを作成する際に自動で最新のエディションをコンフィギュレーションに追加します。 + +```Console > cargo +nightly new foo Created binary (application) `foo` project > cat .\foo\Cargo.toml @@ -16,11 +20,15 @@ edition = "2018" [dependencies] ``` -That `edition = "2018"` setting will configure your package to use Rust 2018. + + +この `edition = "2018"` によってあなたのパッケージが Rust 2018 を利用するように設定されます。これ以外は必要ありません。 + +もし、他の古いエディションを使いたい場合は、その設定の値を変更できます。例えば、 ```toml [package] @@ -32,4 +40,6 @@ edition = "2015" [dependencies] ``` -This will build your package in Rust 2015. + + +とすると、あなたのパッケージは Rust 2015 でビルドされます。 diff --git a/src/editions/index.md b/src/editions/index.md index 7555b09..830d1a0 100644 --- a/src/editions/index.md +++ b/src/editions/index.md @@ -1,17 +1,22 @@ -# What are Editions? + +# エディションとは? -Rust ships releases on a six-week cycle. This means that users get a constant + -Every two or three years, we'll be producing a new *edition* of Rust. Each +Rustは6週間ごとにリリースを行います。これにより、ユーザーは新しい機能を常に手に入れることができます。これは他の言語よりも速いサイクルですが、アップデートのサイズは小さくなります。しばらくするとこれらの小変更が積み重なってきますが、いくつかのリリースを振り返って、「おお、バージョン1.10から1.20の間にRustは大きく変わったなぁ」と言うのは難しいかも知れません。 + + + +2,3年に一度、Rustの新しい「リビジョン」を作成します。各エディションはそれまでRustに加えられた変更をまとめ上げたもので、最新のドキュメントとツールもそれに含まれます。新しいエディションは通常のリリースプロセスを経てリリースされます。 -This serves different purposes for different people: + + +エディションは様々な人の異なる要求を満たします。 + +- Rustのアクティブなユーザーにとっては、6週間ごとににリリースされた機能変更をわかりやすくまとめたパッケージとなります。 + +- Rustを使っていない人にとっては、新たな機能が追加されたことを知らせる役割を果たし、それによってRustを使ってみようと思うようになるかも知れません。 -## Compatibility +- Rustの内部開発者にとっては、プロジェクト全体の集結地点になります。 -When a new edition becomes available in the compiler, crates must explicitly opt + + +## 互換性 + + + +新しいエディションがコンパイラで利用可能になった際に、その利点を最大限に活かすためには、クレートは明示的にオプトインする必要があります。このオプトインはエディションに非互換の変更を加えるために必要で、例えば、既存のコードで使われている識別子と競合する新たなキーワードを導入したり、ウォーニングだったものをエラーにする、などの変更を加えることができるようになります。Rustのコンパイラはこれまでの全てのエディションをサポートしていて、どのエディションでもクレートをコンパイルすることができます。エディションの変更はコンパイラが最初にコードを構文解析する際の動作のみに影響します。従って、例ばあなたがRust 2015を使っていて、依存するクレートが Rust 2018を使っていても全く問題なく動作します。その逆の場合も同様です。 -Just to be clear: most features will be available on all editions. + + + +念の為はっきりさせておきますが、ほとんどの機能は全てのエディションで利用可能です。どのエディションを利用していても、新たな安定板リリースが出た際には改善を見ることができます。時折、例えば新たなキーワードが導入されたりその他の理由で、あるエディション以降でしか利用できない機能追加があります。そのような機能を利用したい時にエディションのアップデートを検討するのが良いでしょう。 diff --git a/src/editions/transitioning-an-existing-project-to-a-new-edition.md b/src/editions/transitioning-an-existing-project-to-a-new-edition.md index 161b742..335d2f4 100644 --- a/src/editions/transitioning-an-existing-project-to-a-new-edition.md +++ b/src/editions/transitioning-an-existing-project-to-a-new-edition.md @@ -1,18 +1,25 @@ -# Transitioning an existing project to a new edition + +# 既存のプロジェクトのエディションを移行する -New editions might change the way you write Rust – they add new syntax, + -> It's our intention that the migration to new editions is as smooth an +新たなエディションによってRustの書き方が変わるかも知れません。新しい構文や新たなライブラリ機能の追加、そして時に機能の削除もあります。例えば、`try`、`async`、`await`は Rust 2018ではキーワードですが、Rust 2015ではそうではありません。もしあなたが Rust 2015のプロジェクトを持っていて、それを Rust 2018に移行したい場合には、やらなければならないことが幾つかあります。 + + + +> 我々は、新しいエディションへの移行をできるだけスムーズに行えるようにしたいと考えています。もし、Rust 2018へアップグレードするのが大変な場合は、我々はそれをバグとみなします。もし移行時に問題があった場合には[バグ登録](https://github.com/rust-lang/rust/issues/new)してください。 -Here's an example. Imagine we have a crate that has this code in -`src/lib.rs`: + + +ここに例を挙げます。`src/lib.rs`に以下のコードがあるクレートがあるとします。 ```rust trait Foo { @@ -20,22 +27,30 @@ trait Foo { } ``` -This code uses an anonymous parameter, that `Box`. This is [not + + +このコードは `Box`という無名パラメータを使用しています。これは [Rust 2018ではサポートされておらず](../rust-2018/trait-system/no-anon-params.md)、コンパイルに失敗します。このコードを更新してみましょう。 -## Updating your code to be compatible with the new edition + -Your code may or may not use features that are incompatible with the new +## あなたのコードを新しいエディションでコンパイルできるようにする + + + +あなたのコードは互換性のない機能を使っているかも知れないし、使っていないかも知れません。Rust 2018への移行を助けるためにCargoに新しいサブコマンドを追加しました。まず初めにそれを起動してみましょう。 ```console > cargo fix --edition ``` -This will check your code, and automatically fix any issues that it can. -Let's look at `src/lib.rs` again: + + +これはあなたのコードをチェックして、自動的に移行の問題を修正してくれます。もう一度 `src/lib.rs`を見てみましょう。 ```rust trait Foo { @@ -43,25 +58,38 @@ trait Foo { } ``` -It's re-written our code to introduce a parameter name for that trait object. + + +パラメータ名が追加された形でコードが書き換えられています。この場合は、パラメータ名がなかったので、使用されていないパラメータの慣習に従って `_` を付加しています。 -`cargo fix` can't always fix your code automatically. + -Keep running `cargo fix --edition` until you have no more warnings. +`Cargo fix`は常に自動的にコードを修正してくれるわけではありません。もし、`cargo fix`がコードを修正できない時にはコンソールに修正できなかったというウォーニングを表示します。その場合は手動でコードを修正してください。助けが必要な時は、このガイドの対応するセクションを参照してください。問題がある場合は、 [ユーザーフォーラム](https://users.rust-lang.org/)で助けを求めてください。 -Congrats! Your code is now valid in both Rust 2015 and Rust 2018! + -## Enabling the new edition to use new features +そしてウォーニングが出なくなるまで `cargo fix --edition` を繰り返し実行してください。 -In order to use some new features, you must explicitly opt in to the new + + +おめでとうございます! あなたのコードはRust 2015とRust 2018の双方で正しいコードになりました。 + + + +## 新機能を使うために新たなエディションを有効化する + + + +新しいエディションの新機能を使うには明示的にオプトインする必要があります。コミットする準備ができたら、`Cargo.toml`に新しいエディションのキーバリューペアを追加してください。例えば以下のような形になります。 + ```toml [package] @@ -71,16 +99,24 @@ authors = ["Your Name "] edition = "2018" ``` -If there's no `edition` key, Cargo will default to Rust 2015. But in this case, -we've chosen `2018`, and so our code is compiling with Rust 2018! + + +もし `edition`キーがなければCargoはデフォルトで Rust 2015をエディションとして使います。しかし上記の例では、`2018`を明示的に指定しているのでコードは Rust 2018でビルドされます。 -## Writing idiomatic code in a new edition + -Editions are not only about new features and removing old ones. In any programming +## 新しいエディションで慣用的なコードを書く + + + +エディションは新機能を追加したり機能を削除するだけのものではありません。どのようなプログラミング言語でも、イディオム(プログラムの書き方のスタイル)は時と共に変化していきます。Rustも例外ではありません。古いスタイルのコードは引き続きコンパイル可能ですが、新しいエディションでは違った書き方で書いた方が良いかも知れません。 -Our sample code contains an outdated idiom. Here it is again: + + +我々のサンプルコードは古いスタイルを含んでいます。もう一度ここにそのコードを示します。 ```rust trait Foo { @@ -88,30 +124,42 @@ trait Foo { } ``` -In Rust 2018, it's considered idiomatic to use the [`dyn` + + +Rust 2018では、トレイトオブジェクトに [`dyn` キーワード](../rust-2018/trait-system/dyn-trait-for-trait-objects.md) を付けるのが良いとされています。 -Eventually, we want `cargo fix` to fix all these idioms automatically in the same + -We have plans to make these idiom migrations a seamless part of the Rust 2018 +いずれ、`cargo fix`によってこのようなイディオムの変更も自動的に行いたいと考えています。**ただし今現在は、イディオムチェッカーが広範囲の自動修正をできるレベルにはなっていません。** 今のところ、コンパイラは多くの場合 `cargo fix`互換のサジェスチョンを出さなかったり、間違ったサジェスチョンを出したりします。 `cargo fix`と共にイディオムチェッカーを有効にすると、おそらくはあなたのコードを壊してしまったり、多くのウォーニングが残り続けるということになってしまいます。 + + + +Rust 2018の体験の一部として、シームレスなイディオム移行を提供する計画があります。しかしまだそこには至っていません。したがって、以下の手順はコンパイラやCargoのバグを乗り越えることを厭わない勇猛な方のみにお勧めします。 + + + -With that out of the way, we can instruct Cargo to fix our code snippet with: +以下のコマンドでCargoがイディオムの修正を行います。 ```console $ cargo fix --edition-idioms ``` -Afterwards, `src/lib.rs` looks like this: + + +実行後は `src/lib.rs`は以下のようになります。 + ```rust trait Foo { @@ -119,26 +167,36 @@ trait Foo { } ``` -We're now more idiomatic, and we didn't have to fix our code manually! + -Note that `cargo fix` may still not be able to automatically update our code. +これでコードはより新しいスタイルになりました。手修正する必要はありませんでした。 + + + +なお、`cargo fix`はコードを自動的に改修することができない場合もあることを覚えておいてください。その場合は `cargo fix`はウォーニングメッセージを出すので、それを見て手動でコードを修正してください。 -As mentioned before, there are known bugs around the idiom lints which + + +上でも述べたようにイディオムチェッカーには幾つかわかっているバグがあり、まだ実践登用できるレベルではありません。Cargoのバグレポートを出すようにという恐ろしげなウォーニングを見るかも知れませんが、これは `rustc`によって提案された修正が誤ってコンパイラを止めてしまった時に起こります。もしコンパイルが止まったとしても `cargo fix`を使ってできるだけ自動修正をしたい場合には以下のコマンドを使います。 ```console $ cargo fix --edition-idioms --broken-code ``` -This will instruct `cargo fix` to apply automatic suggestions regardless of + + +これは、動くかどうかは関係なく`cargo fix`に自動修正を行わせます。全ての修正が適用された後にコードはコンパイルされてその結果を見ることができます。もし何か間違いや異常に気がついた時は、お気軽にCargoにバグ報告してください。 + + -Enjoy the new edition! +それでは、新しいエディションをお楽しみください! From 84bd410fca17418dbb62a7ade92df3dffe997a8e Mon Sep 17 00:00:00 2001 From: Ken Sato Date: Sun, 4 Apr 2021 11:15:34 +0900 Subject: [PATCH 2/8] move comment start and end to separate lines --- src/editions/creating-a-new-project.md | 18 ++- src/editions/index.md | 38 +++-- ...ng-an-existing-project-to-a-new-edition.md | 146 ++++++++++++------ 3 files changed, 139 insertions(+), 63 deletions(-) diff --git a/src/editions/creating-a-new-project.md b/src/editions/creating-a-new-project.md index 27e9e0c..b63308d 100644 --- a/src/editions/creating-a-new-project.md +++ b/src/editions/creating-a-new-project.md @@ -1,13 +1,15 @@ - +configuration for the latest edition: +--> # 新しいプロジェクトを作成する Cargoは新たなプロジェクトを作成する際に自動で最新のエディションをコンフィギュレーションに追加します。 -```Console +```console > cargo +nightly new foo Created binary (application) `foo` project > cat .\foo\Cargo.toml @@ -20,11 +22,13 @@ edition = "2018" [dependencies] ``` - +key, for example: +--> この `edition = "2018"` によってあなたのパッケージが Rust 2018 を利用するように設定されます。これ以外は必要ありません。 @@ -40,6 +44,8 @@ edition = "2015" [dependencies] ``` - + とすると、あなたのパッケージは Rust 2015 でビルドされます。 diff --git a/src/editions/index.md b/src/editions/index.md index 830d1a0..e9e536b 100644 --- a/src/editions/index.md +++ b/src/editions/index.md @@ -1,22 +1,29 @@ - + # エディションとは? - +and say *"Wow, between Rust 1.10 and Rust 1.20, Rust has changed a lot!"* +--> Rustは6週間ごとにリリースを行います。これにより、ユーザーは新しい機能を常に手に入れることができます。これは他の言語よりも速いサイクルですが、アップデートのサイズは小さくなります。しばらくするとこれらの小変更が積み重なってきますが、いくつかのリリースを振り返って、「おお、バージョン1.10から1.20の間にRustは大きく変わったなぁ」と言うのは難しいかも知れません。 - +release process. +--> 2,3年に一度、Rustの新しい「リビジョン」を作成します。各エディションはそれまでRustに加えられた変更をまとめ上げたもので、最新のドキュメントとツールもそれに含まれます。新しいエディションは通常のリリースプロセスを経てリリースされます。 - might make Rust worth another look. - For those developing Rust itself, it provides a rallying point for the project as a - whole. --> + whole. + --> エディションは様々な人の異なる要求を満たします。 @@ -36,10 +44,13 @@ release process. --> - Rustの内部開発者にとっては、プロジェクト全体の集結地点になります。 - + ## 互換性 - +situation works as well. +--> 新しいエディションがコンパイラで利用可能になった際に、その利点を最大限に活かすためには、クレートは明示的にオプトインする必要があります。このオプトインはエディションに非互換の変更を加えるために必要で、例えば、既存のコードで使われている識別子と競合する新たなキーワードを導入したり、ウォーニングだったものをエラーにする、などの変更を加えることができるようになります。Rustのコンパイラはこれまでの全てのエディションをサポートしていて、どのエディションでもクレートをコンパイルすることができます。エディションの変更はコンパイラが最初にコードを構文解析する際の動作のみに影響します。従って、例ばあなたがRust 2015を使っていて、依存するクレートが Rust 2018を使っていても全く問題なく動作します。その逆の場合も同様です。 - +advantage of such features. +--> 念の為はっきりさせておきますが、ほとんどの機能は全てのエディションで利用可能です。どのエディションを利用していても、新たな安定板リリースが出た際には改善を見ることができます。時折、例えば新たなキーワードが導入されたりその他の理由で、あるエディション以降でしか利用できない機能追加があります。そのような機能を利用したい時にエディションのアップデートを検討するのが良いでしょう。 diff --git a/src/editions/transitioning-an-existing-project-to-a-new-edition.md b/src/editions/transitioning-an-existing-project-to-a-new-edition.md index 335d2f4..58c1702 100644 --- a/src/editions/transitioning-an-existing-project-to-a-new-edition.md +++ b/src/editions/transitioning-an-existing-project-to-a-new-edition.md @@ -1,23 +1,31 @@ - + # 既存のプロジェクトのエディションを移行する - +instead, there's a few steps that you need to take. +--> 新たなエディションによってRustの書き方が変わるかも知れません。新しい構文や新たなライブラリ機能の追加、そして時に機能の削除もあります。例えば、`try`、`async`、`await`は Rust 2018ではキーワードですが、Rust 2015ではそうではありません。もしあなたが Rust 2015のプロジェクトを持っていて、それを Rust 2018に移行したい場合には、やらなければならないことが幾つかあります。 - +> [file a bug](https://github.com/rust-lang/rust/issues/new). Thank you! +--> > 我々は、新しいエディションへの移行をできるだけスムーズに行えるようにしたいと考えています。もし、Rust 2018へアップグレードするのが大変な場合は、我々はそれをバグとみなします。もし移行時に問題があった場合には[バグ登録](https://github.com/rust-lang/rust/issues/new)してください。 - + ここに例を挙げます。`src/lib.rs`に以下のコードがあるクレートがあるとします。 @@ -27,19 +35,25 @@ trait Foo { } ``` - +so this would fail to compile. Let's get this code up to date! +--> このコードは `Box`という無名パラメータを使用しています。これは [Rust 2018ではサポートされておらず](../rust-2018/trait-system/no-anon-params.md)、コンパイルに失敗します。このコードを更新してみましょう。 - + ## あなたのコードを新しいエディションでコンパイルできるようにする - +subcommand with Cargo. To start, let's run it: +--> あなたのコードは互換性のない機能を使っているかも知れないし、使っていないかも知れません。Rust 2018への移行を助けるためにCargoに新しいサブコマンドを追加しました。まず初めにそれを起動してみましょう。 @@ -47,8 +61,10 @@ subcommand with Cargo. To start, let's run it: --> > cargo fix --edition ``` - + これはあなたのコードをチェックして、自動的に移行の問題を修正してくれます。もう一度 `src/lib.rs`を見てみましょう。 @@ -58,35 +74,47 @@ trait Foo { } ``` - +which is conventional for unused variables. +--> パラメータ名が追加された形でコードが書き換えられています。この場合は、パラメータ名がなかったので、使用されていないパラメータの慣習に従って `_` を付加しています。 - +problems, please seek help at the [user's forums](https://users.rust-lang.org/). +--> `Cargo fix`は常に自動的にコードを修正してくれるわけではありません。もし、`cargo fix`がコードを修正できない時にはコンソールに修正できなかったというウォーニングを表示します。その場合は手動でコードを修正してください。助けが必要な時は、このガイドの対応するセクションを参照してください。問題がある場合は、 [ユーザーフォーラム](https://users.rust-lang.org/)で助けを求めてください。 - + そしてウォーニングが出なくなるまで `cargo fix --edition` を繰り返し実行してください。 - + おめでとうございます! あなたのコードはRust 2015とRust 2018の双方で正しいコードになりました。 - + ## 新機能を使うために新たなエディションを有効化する - +`edition` key/value pair. For example: +--> 新しいエディションの新機能を使うには明示的にオプトインする必要があります。コミットする準備ができたら、`Cargo.toml`に新しいエディションのキーバリューペアを追加してください。例えば以下のような形になります。 @@ -99,22 +127,30 @@ authors = ["Your Name "] edition = "2018" ``` - + もし `edition`キーがなければCargoはデフォルトで Rust 2015をエディションとして使います。しかし上記の例では、`2018`を明示的に指定しているのでコードは Rust 2018でビルドされます。 - + ## 新しいエディションで慣用的なコードを書く - +will continue to compile, it might be written with different idioms today. +--> エディションは新機能を追加したり機能を削除するだけのものではありません。どのようなプログラミング言語でも、イディオム(プログラムの書き方のスタイル)は時と共に変化していきます。Rustも例外ではありません。古いスタイルのコードは引き続きコンパイル可能ですが、新しいエディションでは違った書き方で書いた方が良いかも知れません。 - + 我々のサンプルコードは古いスタイルを含んでいます。もう一度ここにそのコードを示します。 @@ -124,31 +160,39 @@ trait Foo { } ``` - +trait objects. +--> Rust 2018では、トレイトオブジェクトに [`dyn` キーワード](../rust-2018/trait-system/dyn-trait-for-trait-objects.md) を付けるのが良いとされています。 - +warnings still remaining. +--> いずれ、`cargo fix`によってこのようなイディオムの変更も自動的に行いたいと考えています。**ただし今現在は、イディオムチェッカーが広範囲の自動修正をできるレベルにはなっていません。** 今のところ、コンパイラは多くの場合 `cargo fix`互換のサジェスチョンを出さなかったり、間違ったサジェスチョンを出したりします。 `cargo fix`と共にイディオムチェッカーを有効にすると、おそらくはあなたのコードを壊してしまったり、多くのウォーニングが残り続けるということになってしまいます。 - +compiler/Cargo bugs! +--> Rust 2018の体験の一部として、シームレスなイディオム移行を提供する計画があります。しかしまだそこには至っていません。したがって、以下の手順はコンパイラやCargoのバグを乗り越えることを厭わない勇猛な方のみにお勧めします。 - + 以下のコマンドでCargoがイディオムの修正を行います。 @@ -156,7 +200,9 @@ Rust 2018の体験の一部として、シームレスなイディオム移行 $ cargo fix --edition-idioms ``` - + 実行後は `src/lib.rs`は以下のようになります。 @@ -167,22 +213,28 @@ trait Foo { } ``` - + これでコードはより新しいスタイルになりました。手修正する必要はありませんでした。 - +you'll have to fix it manually. +--> なお、`cargo fix`はコードを自動的に改修することができない場合もあることを覚えておいてください。その場合は `cargo fix`はウォーニングメッセージを出すので、それを見て手動でコードを修正してください。 - +compiling, you can execute: +--> 上でも述べたようにイディオムチェッカーには幾つかわかっているバグがあり、まだ実践登用できるレベルではありません。Cargoのバグレポートを出すようにという恐ろしげなウォーニングを見るかも知れませんが、これは `rustc`によって提案された修正が誤ってコンパイラを止めてしまった時に起こります。もしコンパイルが止まったとしても `cargo fix`を使ってできるだけ自動修正をしたい場合には以下のコマンドを使います。 @@ -190,13 +242,17 @@ compiling, you can execute: --> $ cargo fix --edition-idioms --broken-code ``` - +to report an issue to Cargo and we'll help prioritize and fix it. +--> これは、動くかどうかは関係なく`cargo fix`に自動修正を行わせます。全ての修正が適用された後にコードはコンパイルされてその結果を見ることができます。もし何か間違いや異常に気がついた時は、お気軽にCargoにバグ報告してください。 - + それでは、新しいエディションをお楽しみください! From 6435b19d925fc31da8d9d194029e9d1b51676d75 Mon Sep 17 00:00:00 2001 From: Ken Sato Date: Sun, 4 Apr 2021 11:38:10 +0900 Subject: [PATCH 3/8] =?UTF-8?q?add=20return=20after=20each=20period,=20use?= =?UTF-8?q?=20=E8=AD=A6=E5=91=8A=20for=20warning?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TranslationTable.md | 2 +- src/editions/creating-a-new-project.md | 3 +- src/editions/index.md | 21 ++++-- ...ng-an-existing-project-to-a-new-edition.md | 72 ++++++++++++++----- 4 files changed, 74 insertions(+), 24 deletions(-) diff --git a/TranslationTable.md b/TranslationTable.md index a7ffa21..3769fb8 100644 --- a/TranslationTable.md +++ b/TranslationTable.md @@ -217,6 +217,6 @@ | variant | ヴァリアント | vector | ベクタ | version | バージョン -| warning | ウォーニング +| warning | 警告 | wildcard | ワイルドカード | wrapper | ラッパ diff --git a/src/editions/creating-a-new-project.md b/src/editions/creating-a-new-project.md index b63308d..e5ccf16 100644 --- a/src/editions/creating-a-new-project.md +++ b/src/editions/creating-a-new-project.md @@ -30,7 +30,8 @@ If you'd prefer to use an older edition, you can change the value in that key, for example: --> -この `edition = "2018"` によってあなたのパッケージが Rust 2018 を利用するように設定されます。これ以外は必要ありません。 +この `edition = "2018"` によってあなたのパッケージが Rust 2018 を利用するように設定されます。 +これ以外は必要ありません。 もし、他の古いエディションを使いたい場合は、その設定の値を変更できます。例えば、 diff --git a/src/editions/index.md b/src/editions/index.md index e9e536b..e7c1a6d 100644 --- a/src/editions/index.md +++ b/src/editions/index.md @@ -11,7 +11,10 @@ tiny changes add up. But, from release to release, it can be hard to look back and say *"Wow, between Rust 1.10 and Rust 1.20, Rust has changed a lot!"* --> -Rustは6週間ごとにリリースを行います。これにより、ユーザーは新しい機能を常に手に入れることができます。これは他の言語よりも速いサイクルですが、アップデートのサイズは小さくなります。しばらくするとこれらの小変更が積み重なってきますが、いくつかのリリースを振り返って、「おお、バージョン1.10から1.20の間にRustは大きく変わったなぁ」と言うのは難しいかも知れません。 +Rustは6週間ごとにリリースを行います。 +これにより、ユーザーは新しい機能を常に手に入れることができます。 +これは他の言語よりも速いサイクルですが、アップデートのサイズは小さくなります。 +しばらくするとこれらの小変更が積み重なってきますが、いくつかのリリースを振り返って、「おお、バージョン1.10から1.20の間にRustは大きく変わったなぁ」と言うのは難しいかも知れません。 -2,3年に一度、Rustの新しい「リビジョン」を作成します。各エディションはそれまでRustに加えられた変更をまとめ上げたもので、最新のドキュメントとツールもそれに含まれます。新しいエディションは通常のリリースプロセスを経てリリースされます。 +2,3年に一度、Rustの新しい「リビジョン」を作成します。 +各エディションはそれまでRustに加えられた変更をまとめ上げたもので、最新のドキュメントとツールもそれに含まれます。 +新しいエディションは通常のリリースプロセスを経てリリースされます。 -新しいエディションがコンパイラで利用可能になった際に、その利点を最大限に活かすためには、クレートは明示的にオプトインする必要があります。このオプトインはエディションに非互換の変更を加えるために必要で、例えば、既存のコードで使われている識別子と競合する新たなキーワードを導入したり、ウォーニングだったものをエラーにする、などの変更を加えることができるようになります。Rustのコンパイラはこれまでの全てのエディションをサポートしていて、どのエディションでもクレートをコンパイルすることができます。エディションの変更はコンパイラが最初にコードを構文解析する際の動作のみに影響します。従って、例ばあなたがRust 2015を使っていて、依存するクレートが Rust 2018を使っていても全く問題なく動作します。その逆の場合も同様です。 +新しいエディションがコンパイラで利用可能になった際に、その利点を最大限に活かすためには、クレートは明示的にオプトインする必要があります。 +このオプトインはエディションに非互換の変更を加えるために必要で、例えば、既存のコードで使われている識別子と競合する新たなキーワードを導入したり、警告だったものをエラーにする、などの変更を加えることができるようになります。 +Rustのコンパイラはこれまでの全てのエディションをサポートしていて、どのエディションでもクレートをコンパイルすることができます。 +エディションの変更はコンパイラが最初にコードを構文解析する際の動作のみに影響します。 +従って、例ばあなたがRust 2015を使っていて、依存するクレートが Rust 2018を使っていても全く問題なく動作します。 +その逆の場合も同様です。 -念の為はっきりさせておきますが、ほとんどの機能は全てのエディションで利用可能です。どのエディションを利用していても、新たな安定板リリースが出た際には改善を見ることができます。時折、例えば新たなキーワードが導入されたりその他の理由で、あるエディション以降でしか利用できない機能追加があります。そのような機能を利用したい時にエディションのアップデートを検討するのが良いでしょう。 +念の為はっきりさせておきますが、ほとんどの機能は全てのエディションで利用可能です。 +どのエディションを利用していても、新たな安定板リリースが出た際には改善を見ることができます。 +時折、例えば新たなキーワードが導入されたりその他の理由で、あるエディション以降でしか利用できない機能追加があります。 +そのような機能を利用したい時にエディションのアップデートを検討するのが良いでしょう。 diff --git a/src/editions/transitioning-an-existing-project-to-a-new-edition.md b/src/editions/transitioning-an-existing-project-to-a-new-edition.md index 58c1702..903b011 100644 --- a/src/editions/transitioning-an-existing-project-to-a-new-edition.md +++ b/src/editions/transitioning-an-existing-project-to-a-new-edition.md @@ -11,7 +11,10 @@ have a project that's using Rust 2015, and you'd like to use Rust 2018 for it instead, there's a few steps that you need to take. --> -新たなエディションによってRustの書き方が変わるかも知れません。新しい構文や新たなライブラリ機能の追加、そして時に機能の削除もあります。例えば、`try`、`async`、`await`は Rust 2018ではキーワードですが、Rust 2015ではそうではありません。もしあなたが Rust 2015のプロジェクトを持っていて、それを Rust 2018に移行したい場合には、やらなければならないことが幾つかあります。 +新たなエディションによってRustの書き方が変わるかも知れません。 +新しい構文や新たなライブラリ機能の追加、そして時に機能の削除もあります。 +例えば、`try`、`async`、`await`は Rust 2018ではキーワードですが、Rust 2015ではそうではありません。 +もしあなたが Rust 2015のプロジェクトを持っていて、それを Rust 2018に移行したい場合には、やらなければならないことが幾つかあります。 -> 我々は、新しいエディションへの移行をできるだけスムーズに行えるようにしたいと考えています。もし、Rust 2018へアップグレードするのが大変な場合は、我々はそれをバグとみなします。もし移行時に問題があった場合には[バグ登録](https://github.com/rust-lang/rust/issues/new)してください。 +> 我々は、新しいエディションへの移行をできるだけスムーズに行えるようにしたいと考えています。 +> もし、Rust 2018へアップグレードするのが大変な場合は、我々はそれをバグとみなします。 +> もし移行時に問題があった場合には[バグ登録](https://github.com/rust-lang/rust/issues/new)してください。 +> +> 訳注:Rustの日本語コミュニティもあります。 +> Slackを使用しており[こちら](https://rust-jp.herokuapp.com/)から登録できます。 -このコードは `Box`という無名パラメータを使用しています。これは [Rust 2018ではサポートされておらず](../rust-2018/trait-system/no-anon-params.md)、コンパイルに失敗します。このコードを更新してみましょう。 +このコードは `Box`という無名パラメータを使用しています。 +これは [Rust 2018ではサポートされておらず](../rust-2018/trait-system/no-anon-params.md)、コンパイルに失敗します。 +このコードを更新してみましょう。 -あなたのコードは互換性のない機能を使っているかも知れないし、使っていないかも知れません。Rust 2018への移行を助けるためにCargoに新しいサブコマンドを追加しました。まず初めにそれを起動してみましょう。 +あなたのコードは互換性のない機能を使っているかも知れないし、使っていないかも知れません。 +Rust 2018への移行を助けるためにCargoに新しいサブコマンドを追加しました。 +まず初めにそれを起動してみましょう。 ```console > cargo fix --edition @@ -66,7 +78,8 @@ This will check your code, and automatically fix any issues that it can. Let's look at `src/lib.rs` again: --> -これはあなたのコードをチェックして、自動的に移行の問題を修正してくれます。もう一度 `src/lib.rs`を見てみましょう。 +これはあなたのコードをチェックして、自動的に移行の問題を修正してくれます。 +もう一度 `src/lib.rs`を見てみましょう。 ```rust trait Foo { @@ -80,7 +93,8 @@ In this case, since it had no name, `cargo fix` will replace it with `_`, which is conventional for unused variables. --> -パラメータ名が追加された形でコードが書き換えられています。この場合は、パラメータ名がなかったので、使用されていないパラメータの慣習に従って `_` を付加しています。 +パラメータ名が追加された形でコードが書き換えられています。 +この場合は、パラメータ名がなかったので、使用されていないパラメータの慣習に従って `_` を付加しています。 -`Cargo fix`は常に自動的にコードを修正してくれるわけではありません。もし、`cargo fix`がコードを修正できない時にはコンソールに修正できなかったというウォーニングを表示します。その場合は手動でコードを修正してください。助けが必要な時は、このガイドの対応するセクションを参照してください。問題がある場合は、 [ユーザーフォーラム](https://users.rust-lang.org/)で助けを求めてください。 +`Cargo fix`は常に自動的にコードを修正してくれるわけではありません。 +もし、`cargo fix`がコードを修正できない時にはコンソールに修正できなかったという警告を表示します。 +その場合は手動でコードを修正してください。 +助けが必要な時は、このガイドの対応するセクションを参照してください。 +問題がある場合は、 [ユーザーフォーラム](https://users.rust-lang.org/)で助けを求めてください。 -そしてウォーニングが出なくなるまで `cargo fix --edition` を繰り返し実行してください。 +そして警告が出なくなるまで `cargo fix --edition` を繰り返し実行してください。 -新しいエディションの新機能を使うには明示的にオプトインする必要があります。コミットする準備ができたら、`Cargo.toml`に新しいエディションのキーバリューペアを追加してください。例えば以下のような形になります。 +新しいエディションの新機能を使うには明示的にオプトインする必要があります。 +コミットする準備ができたら、`Cargo.toml`に新しいエディションのキーバリューペアを追加してください。 +例えば以下のような形になります。 ```toml @@ -132,7 +152,8 @@ If there's no `edition` key, Cargo will default to Rust 2015. But in this case, we've chosen `2018`, and so our code is compiling with Rust 2018! --> -もし `edition`キーがなければCargoはデフォルトで Rust 2015をエディションとして使います。しかし上記の例では、`2018`を明示的に指定しているのでコードは Rust 2018でビルドされます。 +もし `edition`キーがなければCargoはデフォルトで Rust 2015をエディションとして使います。 +しかし上記の例では、`2018`を明示的に指定しているのでコードは Rust 2018でビルドされます。 -エディションは新機能を追加したり機能を削除するだけのものではありません。どのようなプログラミング言語でも、イディオム(プログラムの書き方のスタイル)は時と共に変化していきます。Rustも例外ではありません。古いスタイルのコードは引き続きコンパイル可能ですが、新しいエディションでは違った書き方で書いた方が良いかも知れません。 +エディションは新機能を追加したり機能を削除するだけのものではありません。 +どのようなプログラミング言語でも、イディオム(プログラムの書き方のスタイル)は時と共に変化していきます。 +Rustも例外ではありません。 +古いスタイルのコードは引き続きコンパイル可能ですが、新しいエディションでは違った書き方で書いた方が良いかも知れません。 -我々のサンプルコードは古いスタイルを含んでいます。もう一度ここにそのコードを示します。 +我々のサンプルコードは古いスタイルを含んでいます。 +もう一度ここにそのコードを示します。 ```rust trait Foo { @@ -178,7 +203,10 @@ even with `cargo fix`, is likely to leave your crate either broken or with many warnings still remaining. --> -いずれ、`cargo fix`によってこのようなイディオムの変更も自動的に行いたいと考えています。**ただし今現在は、イディオムチェッカーが広範囲の自動修正をできるレベルにはなっていません。** 今のところ、コンパイラは多くの場合 `cargo fix`互換のサジェスチョンを出さなかったり、間違ったサジェスチョンを出したりします。 `cargo fix`と共にイディオムチェッカーを有効にすると、おそらくはあなたのコードを壊してしまったり、多くのウォーニングが残り続けるということになってしまいます。 +いずれ、`cargo fix`によってこのようなイディオムの変更も自動的に行いたいと考えています。 +**ただし今現在は、イディオムチェッカーが広範囲の自動修正をできるレベルにはなっていません。** +今のところ、コンパイラは多くの場合 `cargo fix`互換のサジェスチョンを出さなかったり、間違ったサジェスチョンを出したりします。 + `cargo fix`と共にイディオムチェッカーを有効にすると、おそらくはあなたのコードを壊してしまったり、多くの警告が残り続けるということになってしまいます。 -Rust 2018の体験の一部として、シームレスなイディオム移行を提供する計画があります。しかしまだそこには至っていません。したがって、以下の手順はコンパイラやCargoのバグを乗り越えることを厭わない勇猛な方のみにお勧めします。 +Rust 2018の体験の一部として、シームレスなイディオム移行を提供する計画があります。 +しかしまだそこには至っていません。 +したがって、以下の手順はコンパイラやCargoのバグを乗り越えることを厭わない勇猛な方のみにお勧めします。 -これでコードはより新しいスタイルになりました。手修正する必要はありませんでした。 +これでコードはより新しいスタイルになりました。 +手修正する必要はありませんでした。 -なお、`cargo fix`はコードを自動的に改修することができない場合もあることを覚えておいてください。その場合は `cargo fix`はウォーニングメッセージを出すので、それを見て手動でコードを修正してください。 +なお、`cargo fix`はコードを自動的に改修することができない場合もあることを覚えておいてください。 +その場合は `cargo fix`は警告メッセージを出すので、それを見て手動でコードを修正してください。 -上でも述べたようにイディオムチェッカーには幾つかわかっているバグがあり、まだ実践登用できるレベルではありません。Cargoのバグレポートを出すようにという恐ろしげなウォーニングを見るかも知れませんが、これは `rustc`によって提案された修正が誤ってコンパイラを止めてしまった時に起こります。もしコンパイルが止まったとしても `cargo fix`を使ってできるだけ自動修正をしたい場合には以下のコマンドを使います。 +上でも述べたようにイディオムチェッカーには幾つかわかっているバグがあり、まだ実践登用できるレベルではありません。 +Cargoのバグレポートを出すようにという恐ろしげな警告を見るかも知れませんが、これは `rustc`によって提案された修正が誤ってコンパイラを止めてしまった時に起こります。 +もしコンパイルが止まったとしても `cargo fix`を使ってできるだけ自動修正をしたい場合には以下のコマンドを使います。 ```console $ cargo fix --edition-idioms --broken-code @@ -249,7 +283,9 @@ all fixes are applied. If you notice anything wrong or unusual, please feel free to report an issue to Cargo and we'll help prioritize and fix it. --> -これは、動くかどうかは関係なく`cargo fix`に自動修正を行わせます。全ての修正が適用された後にコードはコンパイルされてその結果を見ることができます。もし何か間違いや異常に気がついた時は、お気軽にCargoにバグ報告してください。 +これは、動くかどうかは関係なく`cargo fix`に自動修正を行わせます。 +全ての修正が適用された後にコードはコンパイルされてその結果を見ることができます。 +もし何か間違いや異常に気がついた時は、お気軽にCargoにバグ報告してください。 -2,3年に一度、Rustの新しい「リビジョン」を作成します。 +2,3年に一度、Rustの新しい「エディション」を作成します。 各エディションはそれまでRustに加えられた変更をまとめ上げたもので、最新のドキュメントとツールもそれに含まれます。 新しいエディションは通常のリリースプロセスを経てリリースされます。 From 2419f660a397b06d59d831ec28e68bdc8acab531 Mon Sep 17 00:00:00 2001 From: Ken Sato Date: Sun, 4 Apr 2021 19:10:48 +0900 Subject: [PATCH 5/8] Update src/editions/transitioning-an-existing-project-to-a-new-edition.md Co-authored-by: Tatsuya Kawano --- .../transitioning-an-existing-project-to-a-new-edition.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/editions/transitioning-an-existing-project-to-a-new-edition.md b/src/editions/transitioning-an-existing-project-to-a-new-edition.md index 903b011..1a516ea 100644 --- a/src/editions/transitioning-an-existing-project-to-a-new-edition.md +++ b/src/editions/transitioning-an-existing-project-to-a-new-edition.md @@ -93,7 +93,7 @@ In this case, since it had no name, `cargo fix` will replace it with `_`, which is conventional for unused variables. --> -パラメータ名が追加された形でコードが書き換えられています。 +トレイトオブジェクトのためのパラメータ名が追加された形でコードが書き換えられています。 この場合は、パラメータ名がなかったので、使用されていないパラメータの慣習に従って `_` を付加しています。 -いずれ、`cargo fix`によってこのようなイディオムの変更も自動的に行いたいと考えています。 +いずれ、`cargo fix`によってこのようなイディオムの変更も、2018エディションへアップグレードしたときのように自動的に行いたいと考えています。 **ただし今現在は、イディオムチェッカーが広範囲の自動修正をできるレベルにはなっていません。** 今のところ、コンパイラは多くの場合 `cargo fix`互換のサジェスチョンを出さなかったり、間違ったサジェスチョンを出したりします。 `cargo fix`と共にイディオムチェッカーを有効にすると、おそらくはあなたのコードを壊してしまったり、多くの警告が残り続けるということになってしまいます。 From e40022d9038a585d0bbc1ba20d907119245b40d8 Mon Sep 17 00:00:00 2001 From: Ken Sato Date: Sun, 4 Apr 2021 19:11:39 +0900 Subject: [PATCH 7/8] Update src/editions/transitioning-an-existing-project-to-a-new-edition.md Co-authored-by: Tatsuya Kawano --- .../transitioning-an-existing-project-to-a-new-edition.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/editions/transitioning-an-existing-project-to-a-new-edition.md b/src/editions/transitioning-an-existing-project-to-a-new-edition.md index b075d81..cc9df01 100644 --- a/src/editions/transitioning-an-existing-project-to-a-new-edition.md +++ b/src/editions/transitioning-an-existing-project-to-a-new-edition.md @@ -224,7 +224,7 @@ Rust 2018の体験の一部として、シームレスなイディオム移行 With that out of the way, we can instruct Cargo to fix our code snippet with: --> -以下のコマンドでCargoがイディオムの修正を行います。 +以上を踏まえたうえで、私たちのコード片をCargoに修正させてみましょう。 ```console $ cargo fix --edition-idioms From dca625be80cbca3663d3f23c264d1ab5483ca1cd Mon Sep 17 00:00:00 2001 From: Ken Sato Date: Sun, 4 Apr 2021 19:19:41 +0900 Subject: [PATCH 8/8] reflect review comments --- src/editions/index.md | 6 +++--- .../transitioning-an-existing-project-to-a-new-edition.md | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/editions/index.md b/src/editions/index.md index 65603ff..26959bd 100644 --- a/src/editions/index.md +++ b/src/editions/index.md @@ -44,9 +44,9 @@ This serves different purposes for different people: - Rustのアクティブなユーザーにとっては、6週間ごとににリリースされた機能変更をわかりやすくまとめたパッケージとなります。 -- Rustを使っていない人にとっては、新たな機能が追加されたことを知らせる役割を果たし、それによってRustを使ってみようと思うようになるかも知れません。 +- Rustを使っていない人にとっては、大きな変更が施されたことを知らせる役割を果たし、それによってRustを使ってみようと思うようになるかも知れません。 -- Rustの内部開発者にとっては、プロジェクト全体の集結地点になります。 +- Rustの内部開発者にとっては、プロジェクト全体の長期的なゴールになります。 上でも述べたようにイディオムチェッカーには幾つかわかっているバグがあり、まだ実践登用できるレベルではありません。 -Cargoのバグレポートを出すようにという恐ろしげな警告を見るかも知れませんが、これは `rustc`によって提案された修正が誤ってコンパイラを止めてしまった時に起こります。 +Cargoのバグレポートを出すようにという恐ろしげな警告を見るかも知れませんが、これは `rustc`によって提案された修正が誤ってコードをコンパイルできなくしてしまった時に起こります。 もしコンパイルが止まったとしても `cargo fix`を使ってできるだけ自動修正をしたい場合には以下のコマンドを使います。 ```console