プログラミング言語 Rust
プログラミング言語Rustの処理系バージョン0.1が出てきました。
404 Blog Not Found:rust - を早速試してみた
Big Sky :: 新言語rustでhello world
自分でもFizzBuzzを書いてみました。
// use宣言はリンクする外部crateの指定
use std;
// import宣言は外部モジュールをローカルに束縛
import sort = std::sort::quick_sort;
// インターフェース
// モジュール、型、値で別の名前空間を持つ
iface str {
fn str() -> str;
}
// インプリメント
impl of str for int {
fn str() -> str { int::str(self) }
}
fn main() {
// 並列処理
// メッセージ受信用ポート
let p = comm::port();
// メッセージ送信用チャンネル
let c = comm::chan(p);
int::range(0, 100) {|i|
task::spawn {||
let j = i + 1;
// alt式でパターンマッチング
let b = alt (j % 3, j % 5) {
(0, 0) { "FizzBuzz" }
(0, _) { "Fizz" }
(_, 0) { "Buzz" }
_ { j.str() }
};
comm::send(c, (i, b));
};
}
// quick_sort関数はmutableの配列を引数に取る
// ベクトルリテラル側にも明示が必要
let res = [mutable];
// 不使用変数には警告が出る
// アンダースコアで始まる変数なら出ない
int::range(0, 100) {|_i|
// ベクトルはユニーク(複数から参照されることがない)
// だからベクトルの伸長は見た目ほど非効率ではない、らしい
res += [mutable comm::recv(p)];
}
sort({|t, u| tuple::first(t) <= tuple::first(u) }, res);
vec::iter(res) {|t|
std::io::println(tuple::second(t));
}
}