Hatena::ブログ(Diary)

M59の記録 Twitter

2012年03月21日

2012年01月26日

プログラミング言語 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));
    }
}

2012年01月01日