BT

言語構文とツーリングを改善したRust 1.21

| 作者: Sergio De Simone フォローする 18 人のフォロワー , 翻訳者 h_yoshida _ フォローする 1 人のフォロワー 投稿日 2017年11月20日. 推定読書時間: 3 分 |

原文(投稿日:2017/10/18)へのリンク

RustコアチームがRust 1.21をリリースした。リテラルの柔軟性を高める新たな言語機能に加えて、ライブラリの安定性向上とツールサポートの改善が行なわれている。

Rustの新しい言語機能では、スタックではなく静的メモリに格納された変数にリテラルを昇格することが可能になり、リテラルの参照を安全に渡せるようになる。この変更に伴って、次のようなコードが有効になる。

    let x: &'static u32 = &5;
    thread::spawn(move || {
        println!("{}", x);
    }); 

以前のバージョンのRustでは、このようなコードは、スレッド本体のxで参照されるリテラル5の生存期間に問題があるものとして、コンパイラによって拒否される。ここで問題なのは、5がスタックに配置されているため、関数の終了時に削除される点である。リテラルの生存時間をスタックまき戻し以降にまで拡張するため、Rust 1.21のコンパイラは、上記のコードを大まかに言って次のようなコードに変換する。

    static FIVE: i32 = 5;
    let x = &FIVE;

ツーリングの面では、翻訳フェーズの実行中にLLVMが動作することにより、コンパイラのメモリ使用量が削減されている。これによるメリットは2つある。まず、2つのフェーズを効果的に並列化し、メインスレッドで翻訳とLLVM実行を切り換えることが可能になる。さらにrustpでは、“rustp component add rls-preview”を実行するRust言語サーバ(RLS)のインストールがサポートされるようになる。Rustコア開発者によると、これはRLSやClippy、rustfmtなどのRustツールをナイトリビルドではなく、Rustの安定ビルドで実行可能にするための第一歩である。

ライブラリの安定化に話題を移すと、次のようなコードのforループをIterator::for_eachに置き換えられるようになった。

// old
for i in 0..10 {
    println!("{}", i);
}

// new
(0..10).for_each(|i| println!("{}", i));

This change makes it easier to chain a number of iterators together, like in the following example:

(0..100)
    .map(|x| x + 1)
    .filter(|x| x % 2 == 0)
    .for_each(|i| println!("{}", i));

さらに、maxmin関数がOrdトレート上に移動して、トータルオーダセットを形成するタイプで使用されるようになった。単一およびスレッド化された参照カウンタであるRc<T>Arc<T>には、From<&[T]> where T: CloneFrom<str>From<String>From<Box<T>> where T: ?SizedFrom<Vec<T>>といった、より親しみやすいインターフェースが用意された。

Rustの最新バージョンは、 rustup update stableを実行すれば入手できる。新機能の詳細に関しては、1.21リリースノートを見落とさないようしてほしい。

 
 

この記事を評価

採用ステージ
スタイル
 
 

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

特集コンテンツ一覧

C# 8の非同期ストリーム

Bassam Alugili 2018年10月11日 午前3時13分

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT