あなたのリクエストに応じて、ノイズを減らす機能を開発しました。大切な情報を見逃さないよう、お気に入りのトピックを選択して、メールとウェブで通知をもらいましょう。
Rust 1.25はLLVM 6に向けてアップグレードが行われた。 加えて、use
文の中でグループのインポートをネストできるようになり、struct
のアラインメントを個別に設定できるようになり、ライブラリの安定化が行われた。 ただし、今回のRustのリリースでは、impl Trait
、安定したSIMDのサポート、128ビット整数などの待望の機能は追加されなかった。
LLVM 6へのアップデートには、様々なメリットがある。例えば、SIMD関連のコンパイルエラーを含む数々のバグ修正がある。 しかし何より、LLVMの上流のWebAssembly(Wasm)バックエンドに追随しやすくなることにより、新しいWasmの機能を迅速にサポートできるのは大きなメリットである。 これには重要な例外がある。Emscripted-powered JavaScriptバックエンドはLLVM 4限定である。 Rustの開発者であるSteve Klabnik氏によれば、LLVM 6は、一般的には性能向上をもたらさない。コンパイルの速さは、個々のコードに依存する。
新しいuse
文の文法では、グループのインポートのネスト化が可能になった。これにより、コードが簡潔になり、読みやすくなる。 例として、以下のインポート文を考える。
use std::fs::File;
use std::io::Read;
use std::path::{Path, PathBuf};
これは、以下のように記述できる。
use std::{fs::File, io::Read, path::{Path, PathBuf}};
加えて、Rust 1.25のstructs
は、#[repr(align(x))]
アノテーションを使用することで、アラインメントを設定できる。
struct Number(i32);
assert_eq!(std::mem::align_of::<Number>(), 4);
assert_eq!(std::mem::size_of::<Number>(), 4);
#[repr(align(16))]
struct Align16(i32);
assert_eq!(std::mem::align_of::<Align16>(), 16);
assert_eq!(std::mem::size_of::<Align16>(), 16);
この機能は、特定のアラインメントを要求するハードウェアを使用する際に有用であり、C言語コードとの相互運用性を向上させる。 例えば、特定のアラインメントが期待されているC言語コードに構造体を渡すことを簡単にする。 また、発展的な例としては、カーネル内で静的に配置されているページテーブルを扱うことなどがある。
ライブラリ面での大きな変更には、std::ptr::NonNull
の導入がある。 これは、*mut T
に似ているが、非ゼロであることが保証されており、かつ共変性(covariant)を持つ。 安全でないコードにおいてデータ構造を構築する時に有用だろう。
Rust 1.25は、多くの開発者が待ち望んだような大きなリリースではない。 このリリースには、Rustチームが長年取り組んできた主要な機能が含まれていない。 例えば、impl Trait
(パフォーマンスの向上や、ジェネリクスの単純化、診断を可能にする)、128ビット整数、安定したSIMDライブラリのサポート、などが含まれていない。 Klabnik氏によれば、1.26および1.27といった今後のリリースにおいて、これらが使えるようになる可能性が高いとのことで、これは良いニュースである。
Rate this Article
- Editor Review
- Chief Editor Action