Rust(http://www.rust-lang.org/)というMozillaが開発している言語に興味を持っている。マルチコアを生かす次世代のブラウザエンジンであるServoの開発に使われている。
- 実行速度重視の、静的型付けのマルチパラダイム言語。
- Actorモデルに基づいた並列計算。
- Haskellの型クラスのようなオープンなtrait(Javaのインターフェイスのようなものだが、型を定義した後にtraitを外から足せる)に基づく簡潔なOOP。
- バイナリ(構造体のメモリ配置、関数の呼び出し)がC互換。OOPも構造体のデータ定義とメソッドを定義が分離した形になっている。
- 安全性を保ちつつ、パフォーマンスを落とさないポインタ操作。ポインタに&@~と異なる修飾子をつけることで扱いが変わり、グローバルなGCに頼らず静的にヒープオブジェクトの寿命チェックができる(ここのところはちょっと難しいのでまだ勉強中)。
- 関数型言語の機能(クロージャ、代数的データ型とパターンマッチ)を持つ。
まだバージョンが0.5なので仕様も相当変わることが予想される。そのせいもあってか、まだドキュメントがあまり十分でない。公式のTutorialもあまり出来が良くないのだが、ライブラリのソースコードを読んだりすれば理解が深まりそう。
とりあえず、前にCで書いたプログラムをRustで書き換えてみたたが、実行速度はかなり速かった。
https://gist.github.com/nebuta/4975736
注釈:このコードはRust 0.5で書かれたもので、最新のバージョン(1.3)では全く動かない
ロジックを微妙に変えたので単純比較はできないが、Cの物よりも速かった。あとはより関数型っぽく抽象化を進めたときにどのくらい速さが保たれるか、が気になる所。