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といった今後のリリースにおいて、これらが使えるようになる可能性が高いとのことで、これは良いニュースである。