Rustチームは、Rustの新しいバージョン1.24.0を発表します。 Rustは、セキュリティ、速度、および並列コード実行を目的としたシステムプログラミング言語です。
Rustの以前のバージョンがインストールされている場合は、アップグレードするだけです:
$ rustup update stable
rustupをまだインストールしていない場合は、当社のWebサイトの対応するページからインストールできます。 Rust 1.24.0の詳細なリリースノートは GitHubで入手できます。
安定バージョン1.24.0に含まれるもの
このリリースには、 rustfmt
とインクリメンタルコンパイルの2つの非常に興味深い新機能が含まれています。
rustfmt
何年もの間、 Rust
コードをある種の「標準」スタイルに自動的にフォーマットできるツールが必要でした。 このリリースでは、安定バージョン1.24で使用できるrustfmt
のプレビューを発表します。 試すには、次のコマンドを実行します。
$ rustup component add rustfmt-preview
ここには2つの重要なポイントがあります:最初に、 cargo install
代わりにrustup component add
を使用します。 以前にcargo install
rustfmt
を使用した場合は、最初にアンインストールする必要があります。 第二に、タイトルが示すように、これはプレビューです。 rustfmt
はまだバージョン1.0に達していないため、バグ修正と同様にいくつかの設定がまだ行われています。 rustfmt
がバージョン1.0に達するとすぐに、 rustfmt
コンポーネントをリリースし、 rustfmt-preview
は廃止されたと見なされます。
近い将来、このリリース戦略に関する投稿を書く予定です。多くの情報があり、このリリースの投稿の範囲を超えています。
詳細については、github rustfmt
。
インクリメンタルコンパイル
2016年9月に、 インクリメンタルコンパイルについて説明しました。 この投稿では、それがどのように機能するかについて詳しく説明しましたが、重要なアイデアは次のとおりです。プロジェクトで作業する場合、多くの場合、プロジェクトをコンパイルし、コードの小さなセクションを変更して再度コンパイルする必要があります。 歴史的に、すべてのコードは、変更がどれほど小さくてもコンパイルされていました。 インクリメンタルコンパイルの概念は、実際に変更されたコードのみをコンパイルすることです。つまり、後続のコンパイルが高速になります。
バージョン1.24以降、これはデフォルトで有効になります 。 これは、ビルドが高速になることを意味します。 また、 cargo check
コマンドも忘れないでください。最小ビルド時間を取得できます(注:このコマンドはbinarをビルドせず、コードの正確性のみをチェックしますが、インクリメンタルコンパイルキャッシュを理解しているため、デバッグモードでのビルドの高速化につながります) これは、コンパイラのパフォーマンスとインクリメンタルコンパイルに関する作業の終わりではありません。 将来的には、さらに多くの作業を計画しています。 たとえば、このリリースで安定化された別のcodegen-units
変更: codegen-units
デフォルトで16に設定されるようになりました 。 この変更に関する簡単なメモ:ビルドは高速になりますが、最終的なコードは少し遅くなります。 結果のコードのパフォーマンスを最大にするにCargo.toml
、プロジェクトのCargo.toml
codegen-units
を1
にCargo.toml
ます。
リリースに含まれるその他の変更
ここで言及したいもう1つの変更があります。UBです。 Rust
は、安全なコードには単一のコードを、安全でないコードにはできる限り少なくして、UBを最小限に抑えることを目指しています。 UBに出会えるエリアの1つはpanic!
FFIから呼び出されます。 たとえば、次のように:
extern "C" fn panic_in_ffi() { panic!("Test"); }
パニックの正確なメカニズムは、この例でのC
ABIの動作、または他の例での他のABIの動作と一致する必要があるため、これは機能しない場合があります。
Rust 1.24では、未定義の動作を作成するのではなく、このコードが中断されるようになりました。
ライブラリの安定化
str::find
関数( &str
必要なchar
を見つけるために使用される)のファンなら&str
この要求プールを見るとうれしいはずです。 今では10倍高速です! これはmemchr
。 [u8]::contains
もそれを使用しますが 、そのような極端な加速はしません。
また、このリリースでは、いくつかの新しいAPIが安定化されました。
現在、次の関数を定数式で使用して、たとえばstatic
を初期化できstatic
。
Cell
、 RefCell
、およびUnsafeCell
新しい関数- さまざまな数値アトミックタイプの新しい関数(注:AtomicBool、AtomicIsize、AtomicUsize)
- {integer} :: min_valueおよび{integer} :: max_value
- mem :: size_ofおよびmem :: align_of
- ptr :: nullおよびptr :: null_mut
開発者1.24
多くの人々がRust 1.24の開発に参加しました。 皆さん一人一人なしでは、これを達成できませんでした。 よろしくお願いします!