From 33a7778ce55e3327c028ca4f4e7b3af2a5b57273 Mon Sep 17 00:00:00 2001 From: TonalidadeHidrica <47710717+TonalidadeHidrica@users.noreply.github.com> Date: Sat, 13 Nov 2021 01:12:54 +0900 Subject: [PATCH 1/4] =?UTF-8?q?=E3=80=8CCargo=20=E3=81=B8=E3=81=AE?= =?UTF-8?q?=E5=A4=89=E6=9B=B4=E3=80=8D=E3=82=92=E7=BF=BB=E8=A8=B3=EF=BC=88?= =?UTF-8?q?=E4=B8=80=E9=83=A8=E8=A8=B3=E6=B3=A8=E3=81=8C=20WIP=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/SUMMARY.md | 2 +- src/rust-2018/cargo.md | 37 ++++++++++++++++++++++++++++++++++++- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/src/SUMMARY.md b/src/SUMMARY.md index ebb93b9..5e0ac21 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -36,7 +36,7 @@ - [Anonymous trait function parameters deprecated](rust-2018/trait-fn-parameters.md) - [New keywords](rust-2018/new-keywords.md) - [Method dispatch for raw pointers to inference variables](rust-2018/tyvar-behind-raw-pointer.md) - - [Cargo changes](rust-2018/cargo.md) + - [Cargo への変更](rust-2018/cargo.md) ## Rust 2021 diff --git a/src/rust-2018/cargo.md b/src/rust-2018/cargo.md index 6b7ee9b..3a5a63f 100644 --- a/src/rust-2018/cargo.md +++ b/src/rust-2018/cargo.md @@ -1,10 +1,45 @@ + +# Cargo への変更 + + + +## 概要 + + +- `Cargo.toml` にターゲットの指定がある場合であっても、他のターゲットの自動探索がされなくなるということはなくなりました[^1]。 +- `path` フィールドが指定されていないターゲットに対して、`src/{target_name}.rs` の形のターゲットパスは自動設定されなくなりました[^2]。 +- 現在のディレクトリに対して `cargo install` できなくなりました。現在のパッケージをインストールしたい場合は `cargo install --path .` と指定する必要があります[^3]。 + +[^1] *訳注*: + Cargo は、`Cargo.toml` 内に明示的に指定されていなくても、[フォルダ構成の慣習][package-layout]に従っているファイルに関しては、自動でターゲットに追加します。 + 例えば、`src/bin/my_application.rs` というファイルがプロジェクト内に存在したら、`Cargo.toml` に `[[bin]]` セクションで `my_application` の存在が宣言されていなくても、自動的にこのファイルがバイナリターゲット(つまり、`cargo run --bin my_application` として実行できるもの)としてビルドされるようになっています。 + これは、[*ターゲットの自動探索*][target-auto-discovery]と呼ばれています。
+ Rust 2015 と Rust 2018 の違いは、`Cargo.toml` に明示的にターゲットが1つ以上宣言されている場合(つまり、`[lib]`, `[[bin]]`, `[[test]]`, `[[bench]]`, `[[example]]` のどれかが1つ以上ある場合)に生じます。 + Rust 2015 では、これらのうちどれか1つが指定されていた場合、ターゲットの自動探索は無効化されました。 + Rust 2018 では、その場合であっても、ターゲットの自動探索は無効化されません。
+ 詳細は、[Cargo Book の "Target auto-discovery"(英語)][target-auto-discovery]も御覧ください。 + +[^2] *訳注*: + [WIP] 詳細は不明です。 + +[^3] *訳注*: + [`cargo install`][cargo-install] コマンドは、指定したクレートのバイナリターゲットをインストールする、つまりビルドして実行ファイルを所定の場所に配置するためのコマンドです。 + Rust 2015 では、カレントディレクトリが Cargo プロジェクト下であったときに `cargo install` とだけ実行すると、そのプロジェクトに含まれるクレートを対象としてインストールが実行されました。 + Rust 2018 ではこの挙動は廃止され、`cargo install --path .` と明示的にカレントディレクトリのクレートをインストールの対象にすると宣言しなければならなくなりました。 + +[package-layout]: https://doc.rust-lang.org/cargo/guide/project-layout.html +[target-auto-discovery]: https://doc.rust-lang.org/cargo/reference/cargo-targets.html#the-path-field +[cargo-install]: https://doc.rust-lang.org/cargo/commands/cargo-install.html From c0c17dc814161d7e21aaec7d9447b9ed87db759c Mon Sep 17 00:00:00 2001 From: TonalidadeHidrica <47710717+TonalidadeHidrica@users.noreply.github.com> Date: Sat, 13 Nov 2021 01:15:55 +0900 Subject: [PATCH 2/4] =?UTF-8?q?fix:=20=E5=BE=A1=E8=A6=A7=E2=86=92=E3=81=94?= =?UTF-8?q?=E8=A6=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/rust-2018/cargo.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rust-2018/cargo.md b/src/rust-2018/cargo.md index 3a5a63f..5159831 100644 --- a/src/rust-2018/cargo.md +++ b/src/rust-2018/cargo.md @@ -30,7 +30,7 @@ Rust 2015 と Rust 2018 の違いは、`Cargo.toml` に明示的にターゲットが1つ以上宣言されている場合(つまり、`[lib]`, `[[bin]]`, `[[test]]`, `[[bench]]`, `[[example]]` のどれかが1つ以上ある場合)に生じます。 Rust 2015 では、これらのうちどれか1つが指定されていた場合、ターゲットの自動探索は無効化されました。 Rust 2018 では、その場合であっても、ターゲットの自動探索は無効化されません。
- 詳細は、[Cargo Book の "Target auto-discovery"(英語)][target-auto-discovery]も御覧ください。 + 詳細は、[Cargo Book の "Target auto-discovery"(英語)][target-auto-discovery]もご覧ください。 [^2] *訳注*: [WIP] 詳細は不明です。 From 5ac7b09b8c37b58d6a584cac86bf1e6d2c791503 Mon Sep 17 00:00:00 2001 From: TonalidadeHidrica <47710717+TonalidadeHidrica@users.noreply.github.com> Date: Wed, 17 Nov 2021 00:19:52 +0900 Subject: [PATCH 3/4] =?UTF-8?q?`src/{target=5Fpath}.rs`=20=E3=81=AE?= =?UTF-8?q?=E5=BD=A2=E3=81=AE=E3=83=91=E3=82=B9=E3=81=AE=E8=87=AA=E5=8B=95?= =?UTF-8?q?=E6=8E=A8=E8=AB=96=E3=81=AB=E3=81=A4=E3=81=84=E3=81=A6=E8=BF=BD?= =?UTF-8?q?=E8=A8=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/rust-2018/cargo.md | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/rust-2018/cargo.md b/src/rust-2018/cargo.md index 5159831..43c72e9 100644 --- a/src/rust-2018/cargo.md +++ b/src/rust-2018/cargo.md @@ -20,7 +20,7 @@ --> - `Cargo.toml` にターゲットの指定がある場合であっても、他のターゲットの自動探索がされなくなるということはなくなりました[^1]。 -- `path` フィールドが指定されていないターゲットに対して、`src/{target_name}.rs` の形のターゲットパスは自動設定されなくなりました[^2]。 +- `path` フィールドが指定されていないターゲットに対して、`src/{target_name}.rs` の形のターゲットパスは自動推定されなくなりました[^2]。 - 現在のディレクトリに対して `cargo install` できなくなりました。現在のパッケージをインストールしたい場合は `cargo install --path .` と指定する必要があります[^3]。 [^1] *訳注*: @@ -33,7 +33,18 @@ 詳細は、[Cargo Book の "Target auto-discovery"(英語)][target-auto-discovery]もご覧ください。 [^2] *訳注*: - [WIP] 詳細は不明です。 + Cargo は、ターゲットを宣言するセクション(つまり、例えば `[lib]` セクションや `[[bin]]` セクション)に `path` フィールドがなかった場合、 + `name` フィールドと[フォルダ構成の慣習][package-layout]に従ってパスを推論し、そのパスが存在すればそれを使用します。 + たとえば、`Cargo.toml`に + ```toml + [[bin]] + name = "my_binary" + ``` + というセクションがあった場合、`path` フィールドが `src/bin/my_binary.rs` であると自動的に判断します。 + そして、`src/bin/my_binary.rs` が存在すれば、これをターゲットのソースとして採用することになります。 + Rust 2015 では、これに加えて `path` が `src/my_binary.rs` である可能性も候補になりました。 + すなわち、上の状況において `src/bin/my_binary.rs` が存在しないが `src/my_binary.rs` が存在する場合は、`src/my_binary.rs` をターゲットのソースとして採用しました。 + しかし、この挙動は時にわかりにくいエラーを生むため、この形のパスが候補とされる挙動を利用することは[非推奨となり](https://github.com/rust-lang/cargo/pull/4259#issuecomment-314138552)、Rust 2018 では挙動そのものが廃止されました。 [^3] *訳注*: [`cargo install`][cargo-install] コマンドは、指定したクレートのバイナリターゲットをインストールする、つまりビルドして実行ファイルを所定の場所に配置するためのコマンドです。 From 6871329effb3c54185b07263be3e393977b35ef8 Mon Sep 17 00:00:00 2001 From: TonalidadeHidrica <47710717+TonalidadeHidrica@users.noreply.github.com> Date: Wed, 17 Nov 2021 19:34:03 +0900 Subject: [PATCH 4/4] Apply suggestions from code review Co-authored-by: Tatsuya Kawano --- src/rust-2018/cargo.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/rust-2018/cargo.md b/src/rust-2018/cargo.md index 43c72e9..2e6e41b 100644 --- a/src/rust-2018/cargo.md +++ b/src/rust-2018/cargo.md @@ -26,7 +26,7 @@ [^1] *訳注*: Cargo は、`Cargo.toml` 内に明示的に指定されていなくても、[フォルダ構成の慣習][package-layout]に従っているファイルに関しては、自動でターゲットに追加します。 例えば、`src/bin/my_application.rs` というファイルがプロジェクト内に存在したら、`Cargo.toml` に `[[bin]]` セクションで `my_application` の存在が宣言されていなくても、自動的にこのファイルがバイナリターゲット(つまり、`cargo run --bin my_application` として実行できるもの)としてビルドされるようになっています。 - これは、[*ターゲットの自動探索*][target-auto-discovery]と呼ばれています。
+ これは、[ターゲットの自動探索][target-auto-discovery]と呼ばれています。
Rust 2015 と Rust 2018 の違いは、`Cargo.toml` に明示的にターゲットが1つ以上宣言されている場合(つまり、`[lib]`, `[[bin]]`, `[[test]]`, `[[bench]]`, `[[example]]` のどれかが1つ以上ある場合)に生じます。 Rust 2015 では、これらのうちどれか1つが指定されていた場合、ターゲットの自動探索は無効化されました。 Rust 2018 では、その場合であっても、ターゲットの自動探索は無効化されません。
@@ -52,5 +52,5 @@ Rust 2018 ではこの挙動は廃止され、`cargo install --path .` と明示的にカレントディレクトリのクレートをインストールの対象にすると宣言しなければならなくなりました。 [package-layout]: https://doc.rust-lang.org/cargo/guide/project-layout.html -[target-auto-discovery]: https://doc.rust-lang.org/cargo/reference/cargo-targets.html#the-path-field +[target-auto-discovery]: https://doc.rust-lang.org/cargo/reference/cargo-targets.html#target-auto-discovery [cargo-install]: https://doc.rust-lang.org/cargo/commands/cargo-install.html