BT

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

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Rust 1.49が64ビット ARM LinuxのTier-1サポートでリリース

Rust 1.49が64ビット ARM LinuxのTier-1サポートでリリース

原文(投稿日:2021/01/09)へのリンク

Rustチームは昨年の大みそかにRust 1.49をリリースした。Rustの新しいバージョンには、64ビットARMサポートとマイナーな言語拡張機能が含まれる。

Rustのunionは、Dropトレイトを実装できるようになった(オブジェクトがスコープ外になると、dropメソッドが自動的に呼び出される)。開発者が手動でdropしたいunionフィールドには、ManuallyDrop<T>タイプのアノテーションが付けられる。Rustのドキュメントには次にように記述されている

unionの宣言は、structの代わりにunionを使用することを除いて、structの宣言と同じ構文を使用します。

#[repr(C)]
union MyUnion {
   f1: u32,
   f2: f32,
}

unionがdropされるとき、どのフィールドをdropする必要があるかはわかりません。このため、すべてのunionフィールドは、CopyタイプまたはManuallyDrop<_>である必要があります。これにより、unionがスコープ外になったときに何もdropする必要がなくなります。

ある運用担当者は、新しい言語機能の1つの利点について詳しく説明した。

これは、低レベルの非同期コードで一般的な「アトミックステートマシン」パターンを正しく実装するのに役立ちます。このパターンでは、アトミックに更新されるタグ(ロックされた状態など)を持つタグ付きunionを得ることができます。

値を持たない列挙型(たとえば、enum Foo { })を整数にキャストできるようになった。この変更により、マクロコードに現れたエッジケースに対応できる

Rust開発者は、パターンの参照や移動によってバインドできるようになった。主な使用例は、個々の型のコンポーネントを借用することである。

fn main() {
    #[derive(Debug)]
    struct Person {
        name: String,
        age: u8,
    }

    let person = Person {
        name: String::from("Alice"),
        age: 20,
    };

    // `name` is moved out of person, but `age` is referenced
    let Person { name, ref age } = person;

    println!("The person's age is {}", age);

    println!("The person's name is {}", name);

    // Error! borrow of partially moved value: `person` partial move occurs
    //println!("The person struct is {:?}", person);

    // `person` cannot be used but `person.age` can be used as it is not moved
    println!("The person's age from person struct is {}", person.age);
} 

新しいバージョンのRustにより、aarch64-unknown-linux-gnuターゲットがTier1サポートに昇格した。これは、Linuxで64ビットARMシステムを使用している開発者は、コンパイラにマージされたすべての変更に対して完全なテストスイートが実行されていることを意味する。ビルド済みのバイナリも利用できる。チームは、64ビットARMサポートが、組み込みからデスクトップおよびサーバに及ぶワークロードに役立つことを期待している。リリースノートで次にように説明されている。

これはプロジェクトにとって重要なマイルストーンです。x86以外のターゲットがTier1サポートに到達するのは初めてであるためです。これをきっかけに、将来、より多くのターゲットが最上位のTierに到達するための道が開かれることを願っています。

新しいRustバージョンでは、Apple M1システム(aarch64-apple-darwinターゲット)およびWindowsを実行する64ビットARMデバイス(aarch64-pc-windows-msvcターゲット)のTier2サポートも追加されている。

以前のバージョンのRustをrustupでインストールしている開発者は、次のコマンドを使用してRust 1.49.0にアップグレードできる。

rustup update stable

詳細なリリースノートはオンラインで閲覧できる

この記事に星をつける

おすすめ度
スタイル

BT