BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Rust 1.25はLLVM 6に対応

Rust 1.25はLLVM 6に対応

原文(投稿日:2018/04/02)へのリンク

あなたのリクエストに応じて、ノイズを減らす機能を開発しました。大切な情報を見逃さないよう、お気に入りのトピックを選択して、メールとウェブで通知をもらいましょう。

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

Adoption Stage
Style
 
 

この記事に星をつける

おすすめ度
スタイル

特集コンテンツ一覧

BT