From 8e69bee75a5eef30ae8efcee5f9f65ae21e8fac8 Mon Sep 17 00:00:00 2001 From: Ken Sato Date: Fri, 1 Jan 2021 09:34:29 +0900 Subject: [PATCH] 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! +それでは、新しいエディションをお楽しみください!