LoginSignup
26
25

More than 5 years have passed since last update.

Rust 1.8 がリリースされました

Posted at

Rust 1.8 が本日(日本時間2016年4月15日)リリースされました。Rust は、安全性、スピード、並列プログラミングにフォーカスした、システムプログラミング向けの言語です。

また同時に、次のバージョン 1.9 がベータ版になりました。1.9 のリリース予定日は、6週間後の2016年5月27日(日本時間)です。

もしこれから Rust を始めるのでしたら、オフィシャルマニュアルの 日本語翻訳版 を読むのがいいでしょう。現状は Rust 1.6 をベースにしていますが、全体の 約93% が翻訳済みとなっています。また、近々、1.8 版のマニュアルへと更新する予定です。

(これ以降はリリースアナウンスの抄訳です)

1.8 安定版の内容

Rust 1.8 には言語上の新機能が2つあり、さらに、Windows ユーザーの方にはグッドニュースがあります! また、私たちの make ベースのビルドシステムを、Cargo をベースにしたものに置き換える作業が進行中です。

最初に紹介する機能は、+=-= のような様々な「代入演算子」が、トレイトでオーバーロードできるようになったことです。この変更は RFC 953 で承認され、こんな風に使います:

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;
    }
}

fn main() {
    let mut c1 = Count { value: 1 };
    let c2 = Count { value: 5 };

    c1 += c2;

    println!("{:?}", c1);
}

これを実行すると Count { value: 6 } と表示されます。また他の演算子トレイトのように、関連型によって、演算子の左右に異なる型を持つこともできます。

2つ目に紹介するのは、RFC 218 で導入された小さな機能です。Rust 1.8 以前では、フィールドを持たない構造体には、{ } を付けられませんでした。

struct Foo; // OK
struct Bar { } // エラー

今後は2つめの書式もエラーになりません。このような制限を設けていたのは、他の中身を持たない宣言との一貫性を保ったり、構文解析の曖昧さを回避するためだったりしました。しかし、Rust 1.0 以降では、(訳注:構文が修正され)そのような曖昧さはもうありません。マクロの作者にとっては、(訳注:match 式などで)以前からの文法を扱うには、スペシャルケースが必要となり、面倒なものでした。また、活発に開発しているユーザーは、構造体を、中身なしバージョンと中身ありバージョンの間で切り替えることがあり、その度に、(訳注:中括弧あり・なしに)編集したり、diff が見づらくなったりすることは、理想的とはいえませんでした。

Windows 関連の最新ニュースは、32ビット MSVC ビルドが unwinding を実装した ことです。これにより i686-pc-windows-msvc が第1級(Tier 1)プラットフォームに仲間入りしました。

最後に、私たちは Rust をビルドするために、長い間 make を使ってきました。しかし、いまや私たちには、Rustプログラムをビルドするための、「Cargo」という素晴らしいツールがあります。Rust 1.8 では、Cargo をベースに、Rust 自身で書かれた新しいビルドシステムの 初期的なサポートが導入されました。まだデフォルトではなく、多くの作業が残っています。作業が完了したらリリースノートでお伝えしますが、今のところ、詳細については GitHub issue を参照してください。

ライブラリの安定化

Rust 1.8 では、約20個のライブラリー関数とメソッドが安定化されました。これらの変更は、大きく次の3つのグループに分けられます:UTF-16 関連の文字列メソッド、時間に関する様々な API、言語セクションで紹介した演算子のオーバーロードに必要となる様々なトレイトです。

詳しくは、詳細なリリースノート を参照してください。

Cargo の機能

Cargo についてもいくつかのアップデートがあります:

  • cargo init は、カレントディレクトリで Cargo プロジェクトを初期化したい時に使います。一方、従来の cargo new はサブディレクトリを新たに作ります。
  • cargo metadata は、プロジェクトのメタデータを取得する新しいサブコマンドです。
  • .cargo/config-v--color のためのキーが加わりました。
  • Cargo でターゲット毎の依存関係を扱う機能が 改良されました

詳しくは、詳細なリリースノート を参照してください。

26
25
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
25