新たにリリースされたRust 1.10では,オープンソースのディストリビューションをより容易にするため,ブートストラップに新しいアプローチが導入された。他にも,コンパイラのパフォーマンス向上とバイナリサイズ削減を実現したpanic
のための新たなcargoオプション,共有ライブラリの新フォーマット,多数のパフォーマンス向上が実現されている。
バージョン1.10では,Rustのブートストラップ,つまりRustコンパイラ自体によるRustコンパイラのビルドに関するアプローチが変更され,以前のように不安定なRust機能に依存することがなくなった。不安定な機能を利用することの最大のデメリットは,特定のナイトリービルド版のRustコンパイラを使用する必要があることだ。これはLinuxディストリビューションにとって望ましいことではない。実際に多くのLinuxディストリビューションでは,信頼性の低いバイナリを避けて,以前にパッケージ化されたバージョンを使用してパッケージの構築を行なうのが通常である。アプローチが変更された結果,Rust 1.10はRust 1.9でビルド可能になった。今後の新バージョンについても,その時点での安定版リリース,例えばRust 1.11はRust 1.10でビルドされるようになる予定だ。
前述のようにRust 1.10では,panic!
の動作を定義する新しいビルドオプションが導入されている。デフォルトでは,panic!
はスタックの巻き戻しをトリガするが,これにはコンパイラのパフォーマンス,バイナリサイズの両面で一定のコストを伴う。しかしながら,大部分のアプリケーションにとって予想しない問題の処理として適当なのは,完全に合理的な方法でアボートする方法だ。巻き戻しに代えてアボートを実行するために,コマンドラインオプションとして-C panic=abort
を指定するか,あるいはCaogo.tomlにpanic=abort
を追加することにより,バイナリサイズとコンパイル時間ともに10%の改善が実現する。
同じく,Rust 1.10で新たに導入されたのが,ライブラリが他の言語に組み込まれて使用されることを指定するcdylib
crateタイプである。cdylib
と既存のdylib
との大きな違いは,Rustプロジェクトで使用するライブラリの推奨フォーマットが維持される点にある。具体的には次のようなものだ。
cdylib
は静的リンク用である- メタデータが含まれない
- 実行可能ファイルと同様に,参照可能な
extern
関数のみがシンボルとして公開される -C
フラグによるリンク時最適化が可能
その他にもRust 1.10では,多数のパフォーマンス向上が実現されている。例えば,
Rust 1.10には他にも多数の変更があり,その内容はリリースノートで確認することができる。
この記事を評価
- 編集者評
- 編集長アクション