Rustチームは、Rust 1.19のリリースをお知らせします。 Rustは、速度、セキュリティ、および並列コード実行に重点を置いたシステムプログラミング言語です。
Rustの以前のバージョンがインストールされている場合は、アップグレードするだけです:
$ rustup update stable
Rustがまだインストールされていない場合は、当社のWebサイトの対応するページから rustup
を rustup
し、GitHub でのRust 1.19のリリースに関する詳細なメモを読むことができます。
安定バージョン1.19.0に含まれるもの
Rust 1.19.0には待望の機能がいくつか含まれていますが、まずはWindowsユーザー向けのメモです。 このOSでは、Rustはlink.exe
を使用してビルドします。これは、Microsoft Visual C ++ビルドツールの一部です。 Visual Studio 2017の最新リリースでは、これらのツールのディレクトリ構造が変更されています。 このため、2015バージョンのツールを使用するか、環境変数を変更する必要がありました(たとえば、 vcvars.bat
を実行して)。 Rust 1.19.0では、 rustc
は2017バージョンのツールを見つける方法を知っているため、回避策を使用する必要はありません。
そして今、新しい機会のために! Rust 1.19.0は、 union
をサポートする最初のリリースです。
union MyUnion { f1: u32, f2: f32, }
ユニオンはenum
(
)に似ていますが、後者とは異なり「ラベル」がありません。 enum
の「ラベル」を使用すると、実行時に次のどれが変数に格納されているかを確認できます。
ユニオンに保存されたデータを誤って解釈する可能性があり、Rustはこれを検証できないため、ユニオンフィールドの読み取りと書き込みは安全ではありません。
let u = MyUnion { f1: 1 }; unsafe { u.f1 = 5 }; let value = unsafe { u.f1 };
パターンマッチングも機能します。
fn f(u: MyUnion) { unsafe { match u { MyUnion { f1: 10 } => { println!(""); } MyUnion { f2 } => { println!("{}", f2); } } } }
関連付けはいつ便利ですか? 主なアプリケーションは、Cと対話することです。CAPIは、ユニオンを提供することができます(多くの場合、提供しています)。 また、 このRFCから:
組み込みの結合の言語サポートは、値の表現に基づいて、整列ポインタの下位ビットを使用するマシンワードサイズの結合など、メモリまたはキャッシュ効率の良い構造の実装も簡素化します。
この機会は長い間期待されていましたが、改善する価値のあるものは他にもたくさんあります。 現在、関連付けにはCopy
を実装する型のみを含めることができ、 Drop
実装することはできません。 これらの制限は将来削除される予定です。
ところで、Rustに新しい機能がどのように追加されるのか疑問に思ったことはありませんか? 協会はJosh Triplettによって提案され、彼はRustConf 2016で統合プロセスについて話しました。 これを見てください!
他のニュースとして、 loop
はbreak
を通じて値を返すことができるようになりました :
// let x; loop { x = 7; break; } // let x = loop { break 7; };
Rustは伝統的にそれ自体を「式指向言語」として位置づけており、ほとんどの構文構造はステートメントではなく値を返します。 loop
は、値を返さずにこのシリーズから少し際立っていました。
残りのループはどうですか? まだ明確ではありません。 このRFCの説明を参照してください。
わずかな改善:環境をキャプチャしないクロージャーを関数ポインターにキャストできるようになりました :
let f: fn(i32) -> i32 = |x| x + 1;
現在 xz
を提供し、デフォルトで使用しています。これにより、データ転送を高速化できます。 何らかの理由でxz
を使用できない場合に備えて、 gzip
圧縮は引き続き使用できます。
コンパイラーはAndroidで実行できるようになりました 。 私たちは長い間Android開発をサポートしてきましたが、サポートは引き続き改善されています。
結論として、互換性について。 以前、Rust 1.0に移行したとき、すべてが「安定」および「不安定」としてマークされるように多くの作業を行いました。 しかし、私たちは一つのことを見ました: -Z
フラグ。 -Z
コンパイラフラグには不安定なフラグが含まれます。 他のものとは異なり、安定したRustで-Z
を使用できます。 2016年4月、Rust 1.8で、Rustの安定バージョンとベータバージョンで-Z
を使用する場合の警告を追加しました。 1年以上後、 コンパイラのナイトリービルドを除くすべての場所で -Z
を -Z
で、安定性の物語のこの穴を修正しました 。
標準ライブラリの安定化
標準ライブラリの最大の変更点は eprint!
そしてeprintln!
。 print!
同じように機能しprint!
そしてprintln!
、ただし、標準出力ではなく標準エラー出力に書き込みます。
その他の変更:
-
String
は、FromIterator<Cow<'a, str>>
および
Extend<Cow<'a, str>>
-
Vec
はFrom<&mut [T]>
実装するようになりました -
Box<[u8]>
はFrom<Box<str>>
実装するようになりました -
SplitWhitespace
Clone
実装するようになりました -
[u8]::reverse
5倍高速になり、[u16]::reverse
1.5倍高速になりました
そして、いくつかの安定化されたAPI:
貨物の強化
このリリースでは、Cargoにマイナーながら重要な改善が追加されました。 最大のもの: Cargoはgitオブジェクトで直接動作するようになりました 。 これにより、レジストリのサイズが縮小され、特にWindowsでのクローン作成が高速化されます。
その他の改善:
-
(crate).
: println!("cargo:rustc-env=FOO=bar");
- Workspace.membersが検索テンプレートを受け入れるようになりました。
- テストを実行する
cargo bench
サブコマンドに--all
を--all
ワークスペース内のすべてのコンテナのパフォーマンス。 - 使用時に一部のコンテナを除外する
--exclude
が--exclude
オプション--all
-
--features
は、コンマまたは
スペース。 - 実行可能ファイルの起動方法をカスタマイズする機能を追加しました
クロスコンパイル
開発者1.19.0
多くの人々がRust 1.19の開発に参加しました。 皆さん一人一人なしでは、これを達成できませんでした。 よろしくお願いします!
翻訳者から
翻訳を手伝ってくれたozkriffとgordon-fに感謝