Rust 0.4
以前もRustを取り上げた。(プログラミング言語 Rust - M59の記録)
先月(2012年10月15日)バージョン0.4がリリースされていたので、同じプログラムをもう一度書いてみる。
// for Rust 0.4 // Rust 0.1のuseはextern modに変更された // extern modはクレイトをリンクする extern mod std; // Rust 0.1のimportはuseに変更された // useは識別子のエイリアスを作る use sort = std::sort::quick_sort; // ifaceはtraitに変更された trait Str { fn str() -> ~str; } impl int: Str { fn str() -> ~str { int::str(self) } } fn main() { // 並列処理 // チャネルとポート let (chan, port) = pipes::stream(); // 共有チャネル let chan = pipes::SharedChan(move chan); // for文が追加された for int::range(0, 100) |i| { // 共有チャネルの複製 let chan = chan.clone(); // do文が追加された do task::spawn { let i = i + 1; // altはmatchに変更された // match式でパターンマッチング let b = match (i % 3, i % 5) { (0, 0) => ~"FizzBuzz", (0, _) => ~"Fizz", (_, 0) => ~"Buzz", _ => i.str() }; chan.send((i, b)); } } // mutableなベクター let mut res = ~[]; // timesはiter::Timesトレイトのメソッド for 100.times { // メソッドの形で書ける res.push(port.recv()); } // ~strがimplicitly copyable typeでないのでコンパイル時に警告が出る。 sort(|t, u| {t.first() <= u.first()}, res); for res.each |t| { io::println(t.second()); } }
既にGitHubの開発リポジトリのバージョンでは動作しない。