Rust 1.8 が本日(日本時間2016年4月15日)リリースされました。Rust は、安全性、スピード、並列プログラミングにフォーカスした、システムプログラミング向けの言語です。
-
- オフィシャルブログの リリースアナウンス
リリースノート(GitHubリリースページ)
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 でターゲット毎の依存関係を扱う機能が 改良されました。
詳しくは、詳細なリリースノート を参照してください。