BT

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

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Rust 1.8、Cargoベースの新しいビルドシステムなどを導入

Rust 1.8、Cargoベースの新しいビルドシステムなどを導入

ブックマーク

原文(投稿日:2016/04/19)へのリンク

Rust 1.8では、2つの新しい言語機能と多数の標準ライブラリの改善が追加された。加えて、rustcのためのCargoベースの新しいビルドシステムが導入された。これはRustのブートストラッピングに向けた最初のステップのように見える。

1つ目の新機能は、+=-=などの等号オペレーターファミリーに関係するもので、トレイトを使ったオーバーロードが可能になる。次のようなコードを書くことで、Countのための+=を定義できる。

use std::ops::AddAssign;

#[derive(Debug)]
struct Count {
    value: i32,
}

impl AddAssign for Count {
    fn add_assign(&mut self, other: Count) {
        self.value += other.value;
    }
}

2つ目はマイナーな構文変更で、フィールドのないstructを定義する際、中括弧を付けてもエラーにならなくなる。(訳注:原文に誤り、訂正済み)例:

struct Foo {}; // 正しい。以前は {} を省略する必要があった。

この変更によりマクロが少し書きやすくなるだろう。structが空か空でないかで切り替える必要がなくなる。

大きなものは、Rust 1.8がCargoをベースとする新しいビルドシステムを導入したことだ。最終的にMakeを置き換えることになる。Rustの開発者でこの変更を実装するプルリクエストを出したAlex Crichton氏によると、新しいビルドシステムの導入にはいくつかの理由があるという。

  • Makefileは不可解なことが多い。したがって、必要に応じて変更を加えるのがとても大変だ。
  • makeはかなりポータブルだが、「非常に」ポータブルというわけではない。注目すべきは、Windowsシステムにデフォルトのmakeがないことだ。
  • Rustコンパイラと標準ライブラリがCargoに移行することは、Rustプログラマーの開発プロセスに一貫性をもたらす。また、crates.ioパッケージマネージャーのようなツールも共通で使えるようになる。

だが、こうしたメリットを得るには、非常にコストがかかる。Rustのmakeベースのビルドシステムは、何年もかけて注意深く丹念に作られてきたものだ。makeの置き換えは「長い道のり」になるだろう。Crichton氏は語る。

100%-Rustのビルドシステムが利用可能になることは、完全なRustのブートストラッピングに向けた第一歩のように見える。これはRust 1.10で実現される予定だ。

最後に、標準ライブラリはさらに安定になっている。特に、UTF–16関連メソッド、各種time関連API、先に述べたオペレーターのオーバーロードに必要なトレイトなど。

なお、まだベータ品質だと見なされて、明記されていない新機能にrustupがある。これを使うことで、開発者は異なるプラットフォームのための追加のstdlibバージョンをインストールできるようになる。例えば、依存関係のあるものを自動的に処理することで、クロスコンパイルの扱いが簡単になるだろう。

$ rustup target add x86_64-unknown-linux-musl
  info: downloading component 'rust-std' for 'x86_64-unknown-linux-musl'
  13.77 MiB / 13.77 MiB (100.00%) 1.47 MiB/s ETA: 0s
  info: installing component 'rust-std' for
  'x86_64-unknown-linux-musl'

Rust 1.8はインストールページからダウンロードできる。GitHubに詳細なリリースノートがある。

 
 

Rate this Article

Relevance
Style
 
 

この記事に星をつける

おすすめ度
スタイル

特集コンテンツ一覧

BT