Rustチームは、Rust 1.17.0のリリースをお知らせします。 Rustは、セキュリティ、速度、および並列コード実行を目的としたシステムプログラミング言語です。
Rustの以前のバージョンがインストールされている場合、アップグレードするには次のようにします。
$ rustup update stable
Rustをまだインストールしていない場合は、当社のWebサイトの対応するページから rustup
を rustup
し、GitHubの詳細なリリースノート1.17.0を読むことができます。
安定バージョン1.17.0に含まれるもの
Rust 1.17.0のリリースでは、主にユーザビリティに関連する小さな改善が導入されています。 たとえば、定数または静的変数に対して 'static
自動的に暗示されるようになりました 。 定数または静的変数を作成する場合:
const NAME: &'static str = "Ferris"; static NAME: &'static str = "Ferris";
Rust 1.17では、これが理にかなっている唯一のライフタイムであるため、 'static
記述できなくなります。
const NAME: &str = "Ferris"; static NAME: &str = "Ferris";
状況によっては、これは不必要な繰り返しを取り除きます:
// const NAMES: &'static [&'static str; 2] = &["Ferris", "Bors"]; // const NAMES: &[&str; 2] = &["Ferris", "Bors"];
別の同様の表面的な改善は、「短いフィールドの初期化」です。 「オブジェクトリテラルプロパティ値の略記」と呼ばれるECMAScript 6のように、構造体を宣言することで重複を削除できます。次に例を示します。
// struct Point { x: i32, y: i32, } let x = 5; let y = 6; // let p = Point { x: x, y: y, }; // let p = Point { x, y, };
つまり、 x, y
の記述形式では、 x
とy
の値が、このスコープ内にある同様の名前の変数に対応すると想定されます。
もう1つの小さいながらも有用な改善は、主にRustの初心者であり、 +
を使用して2つと&str
を接続しようとしています。 ただし、これは機能しません。接続できるのはString + &str
のみです。 したがって、同様のエラーを行うユーザーを支援するために、 新しいエラーメッセージが追加されました。
// "foo" + "bar" // error[E0369]: binary operation `+` cannot be applied to type `&'static str` --> <anon>:2:5 | 2 | "foo" + "bar" | ^^^^^ | note: an implementation of `std::ops::Add` might be missing for `&'static str` --> <anon>:2:5 | 2 | "foo" + "bar" | ^^^^^ // error[E0369]: binary operation `+` cannot be applied to type `&'static str` --> <anon>:2:5 | 2 | "foo" + "bar" | ^^^^^ | = note: `+` can't be used to concatenate two `&str` strings help: to_owned() can be used to create an owned `String` from a string reference. String concatenation appends the string on the right to the string on the left and may require reallocation. This requires ownership of the string on the left. | "foo".to_owned() + "bar"
Cargoビルドスクリプトを使用する場合、 Cargo.toml
スクリプトの場所を指定する必要があります。 ただし、大部分の人々はbuild = "build.rs"
、それによりプロジェクトのルートにあるbuild.rs
ファイルを使用しました。 現在、この契約はCargo自体によってサポートされており、 build.rs
ファイルbuild.rs
場合はデフォルトで使用されます。 過去数回のリリースでこの変更について警告してきました。 build = false
を使用して、この契約を拒否build = false
こともできます。
このリリースでは、古いMakefile
ベースのビルドシステムが削除されています。 Rust 1.15で発表された新しいシステムはRustで記述されており、主にCargoを使用してアセンブリを制御します。 現時点では、すでに唯一のビルドシステムであるほど十分に成熟しています。
この変更の一環として、crates.ioのパッケージをRustビルドシステムで使用できるようになりました。 MdBookは最初に追加されたもので、 現在では多様な書籍ドキュメントの作成に使用されています。
- 書籍「Rustプログラミング言語」 ( リポジトリ )
- Rustヘルプブック ( リポジトリ )
- 本「ラストノミコン」 ( リポジトリ )
対応するリポジトリへのリンクに注意してください。 ドキュメントはメインツリーから移動されました。 さらに、4番目の本を追加しました。これはまだメインツリーにあります: The Unstable Features of Rust book 。 不安定な機能について説明し、安定化に関連するタスクへのリンクを提供します。また、ソースドキュメントが含まれている場合があります。 安定してほしい機会があれば、その議論に参加してください!
数年前、 rustup
はデフォルトでドキュメントのインストールを停止しました。 この変更は、チャネルをわずかにオフロードするために行われました。また、すべてのユーザーが実際にドキュメントのローカルコピーを保持したいとは限らないためです。 ただし、これによりトラップが作成されました。一部のユーザーは、変更が発生したことを認識せず、インターネット接続を失った場合にのみ変更に気付くでしょう。 さらに、一部のユーザーは、接続に関係なく、ドキュメントのローカルコピーを持ちたいと考えていました。 したがって、 この変更をロールバックし 、デフォルトでドキュメントが再度インストールされます。
最後に、このリリースには多くの改善点がありますが、少し後戻りして後悔したことをお知らせします。 Visual Studio 2017はWindowsでリリースされ、Microsoftはソフトウェアインストールの構造を変更しました。 Rustはその場所を自動的に判断できません。必要な変更に取り組みましたが、このリリースの時間はありませんでした。 それまでは、Visual Studio 2015は引き続き正常に動作しています。または、コマンドラインからvcvars.bat
を実行できます。 この作業ができるだけ早く完了することを願っています。
詳細については、リリースノートを参照してください。
ライブラリの安定化
21の新しいインターフェイスが安定化されました。
-
Arc::into_raw
およびRc::into_raw
すると、Arc
またはRc
を選択して生のポインターを取得できます。 -
Arc::from_raw
およびRc::from_raw
を使用すると、未加工のポインターを取得してArc
またはRc
を取得できます。 -
Arc::ptr_eq
およびRc::ptr_eq
は、両方のArc
または両方のRc
が同じ値を指す場合(必ずしも比較される値が等しいとは限らない)、true
返しtrue
。 -
Ordering::then
を使用すると、2つのOrdering
連結できますOrdering::then_with
を使用すると、関数を使用してこれを実行できます。 -
BTreeMap::range
使用すると、BTreeMap
一部のみをBTreeMap
BTreeMap::range_mut
でき、BTreeMap::range_mut
使用すると、変更の可能性がある場合にこれを実行できます。collections::Bound
を使用すると、さらに細かく制御できます。 -
process::abort
はプロセスを異常終了させます。 -
ptr::read_unaligned
およびptr::write_unaligned
、ptr::read
およびptr::write
と似ていますが、アライメント要件はありません。 -
Result::expect_err
Result::expect
ようにミラーリングされます。つまり、Err
バリアントで動作し、Ok
バリアントでは動作しません。 -
Cell::swap
std::mem::swap
に似ていますが、&mut T
代わりに&mut T
&Cell
これを行うことができます&mut T
-
Cell::replace
std::mem::replace
Cell::replace
似ていますが、&mut T
代わりに&mut T
&Cell
これを行うことができます&mut T
-
Cell::into_inner
を使用すると、Cell
を取得してその値を抽出できます。 -
Cell::take
は、Cell
値を取り出してDefault::default
置き換えDefault::default
。
その他の変更については、多くのCell<T>
メソッドでT: Copy
制約が必要でしたが、この要件は大幅に緩和されました 。
Box<T>
は 、 From
した12を超える新しい変換を実装するようになりました。
SocketAddr
とIpAddr
は、 いくつかの新しい変換もあります。 以前は次のようなコードを記述する必要がありました。
"127.0.0.1:3000".parse().unwrap()
今、あなたは書くことができます
SocketAddr::from(([127, 0, 0, 1], 3000)) // ([127, 0, 0, 1], 3000).into())
これにより、実行時に不要な解析が削除されます。 どちらのオプションもほぼ同じように読みやすく、すべて設定に依存します。
バックトラッキングの書式設定が改善され、デフォルトでいくつかの細かい部分が省略されました。 たとえば、完全なバックトレース:
thread 'main' panicked at 'explicit panic', foo.rs:2 stack backtrace: 1: 0x55c39a23372c - std::sys::imp::backtrace::tracing::imp::write::hf33ae72d0baa11ed at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/src/libstd/sys/unix/backtrace/tracing/gcc_s.rs:42 2: 0x55c39a23571e - std::panicking::default_hook::{{closure}}::h59672b733cc6a455 at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/src/libstd/panicking.rs:351 3: 0x55c39a235324 - std::panicking::default_hook::h1670459d2f3f8843 at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/src/libstd/panicking.rs:367 4: 0x55c39a235afb - std::panicking::rust_panic_with_hook::hcf0ddb069e7beee7 at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/src/libstd/panicking.rs:555 5: 0x55c39a22e866 - std::panicking::begin_panic::heb433e9aa28a7408 6: 0x55c39a22e9bf - foo::main::hd216d4a160fcce19 7: 0x55c39a23d44a - __rust_maybe_catch_panic at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/src/libpanic_unwind/lib.rs:98 8: 0x55c39a236006 - std::rt::lang_start::hd7c880a37a646e81 at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/src/libstd/panicking.rs:436 at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/src/libstd/panic.rs:361 at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/src/libstd/rt.rs:57 9: 0x55c39a22e9e9 - main 10: 0x7f5e5ed3382f - __libc_start_main 11: 0x55c39a22e6b8 - _start 12: 0x0 - <unknown>
今の形をしています
thread 'main' panicked at 'explicit panic', foo.rs:2 stack backtrace: 0: std::sys::imp::backtrace::tracing::imp::unwind_backtrace at /checkout/src/libstd/sys/unix/backtrace/tracing/gcc_s.rs:49 1: std::sys_common::backtrace::_print at /checkout/src/libstd/sys_common/backtrace.rs:71 2: std::panicking::default_hook::{{closure}} at /checkout/src/libstd/sys_common/backtrace.rs:60 at /checkout/src/libstd/panicking.rs:355 3: std::panicking::default_hook at /checkout/src/libstd/panicking.rs:371 4: std::panicking::rust_panic_with_hook at /checkout/src/libstd/panicking.rs:549 5: std::panicking::begin_panic 6: foo::main 7: __rust_maybe_catch_panic at /checkout/src/libpanic_unwind/lib.rs:98 8: std::rt::lang_start at /checkout/src/libstd/panicking.rs:433 at /checkout/src/libstd/panic.rs:361 at /checkout/src/libstd/rt.rs:57 9: main 10: __libc_start_main 11: _start
デフォルトで。 環境変数RUST_BACKTRACE = full
を設定して、完全なバックトレースを取得できます。 将来的には、さらに不必要な情報を削除する予定です。 このエラーを参照してください 。
詳細については、リリースノートを参照してください。
貨物の特徴
build.rs
に関する前述の変更に加えて、Cargoにはさらにいくつかの新しい改善があります。 cargo check --all
およびcargo run --package
は、これまでサポートされていなかった2つのフラグです。
これで、 SSL失効チェックを無視できます 。 もちろん、デフォルトでは、検証はまだ進行中です。
Cargo.toml
の新しいフィールドrequired-features
を使用すると、収集する目的のために設定する必要がある特定の機能を指定できます。 例は次のとおりです。データベースとやり取りするコンテナを記述しており、複数のデータベースをサポートする必要があるとします。 Cargo.toml
これを行うことができます。
[features] # ... postgres = [] sqlite = [] tools = []
tools
機能を使用すると追加のツールを有効にできますが、 postgres
およびsqlite
機能はサポートするデータベースを示します。
以前、 cargo build
は、必要なすべての目標を収集しようとしました。 しかし、 postgres
とtools
機能が有効になっている場合にのみ必要なsrc/bin/postgres-tool.rs
ファイルがある場合はどうでしょうか? 以前は次のようなものを書く必要がありました。
#[cfg(not(all(feature = "postgres", feature = "tools")))] fn main() { println!("This tool requires the `postgres` and `tools` features to be enabled."); } #[cfg(all(feature = "postgres", feature = "tools"))] fn main() { // }
cargo build
ための定型コードが多すぎます。 さらに悲しいexamples/
の場合で、これはライブラリの使用方法を示すものです。 ただし、このような詐欺はパッケージ自体の内部で作業している場合にのみ可能であるため、このパッケージ外で例を使用しようとすると失敗します。
新しいrequired-features
キーを使用して、次を追加できます。
[[bin]] # ... required-features = ["postgres", "tools"]
これで、これら2つの機能が有効になっている場合にのみ、 cargo build
がpostgres-tool
cargo build
するため、 cfg
などのヒープなしで通常のfn main
を記述できます。
詳細については、リリースノートを参照してください。
開発者バージョン1.17.0
多くの人々がRust 1.17の作成に貢献しました。 皆さんなしでは、これを行うことはできませんでした。 よろしくお願いします!
翻訳者: @kgv 。
翻訳の手助けをしてくれたvitvakatuに感謝します。
Rustに興味があり、質問がある場合は、ご参加ください !