2013年12月22日日曜日

The Rust Programming Language

Rust Advent Calender 21 + 1日目の記事です. (ておくれました)

といっても特に良いTipsとかあるわけではないのですが、
今回初めて知って、インストールして使用してみた雑感などをば.

インストール

私が普段使用しているArch Linuxなら、
なんと公式のレポジトリ ( community repo )入りを果たしているために
最新のRust ( rust-0.8 )が特に特別な操作をしなくともインストールできます
# pacman -S rust
Gentooの場合は
# layman -a gentoo-rust
としOverlayを追加した上でrustをemergeしてください.
rust-0.8のebuildのIUSEが間違っててそもそもemergeが開始できなかった問題は修正されたはず
ただ、私の環境ではなぜかstage0のビルドでコンパイラがエラーを吐いたので、
rust-0.8でなくrust-9999をemergeしました.

Debian/Ubuntu/Mintの場合はnightly buildのPPAがある模様

Mac OS Xならhomebrewやmac portsですんなり入るっぽいです.

RedHat系は知りません.

つかってみる

公式にmanualtutorialがあります.
結構詳しくて良いですね.学習しやすそう.

とりあえず定番、フィボナッチ数を表示してみる
実行結果
0 term: 0
1 term: 1
2 term: 1
3 term: 2
4 term: 3
5 term: 5
6 term: 8
7 term: 13
8 term: 21
9 term: 34
変数は基本immutable、mutableな変数の宣言はmutで修飾しています.
パターンマッチが簡単に使えるのが良いです.
また、記法の雰囲気が従来のC系の言語に近いので
この言語を使ってみる精神的障壁が低いかもしれませんね.

見てわかる通り、ifやwhileの条件式(conditioal)は()で括ったりはしません.
関数の返り値はreturnで返しますが、実行の最後の値を返り値とみなせるようです
(returnの省略)
;セミコロンは文末やセパレータではなく、nilまたは()を返す文として;が使われるようです
(return ()と等価)

この言語でおもしろいなーと思ったのがメモリの確保です
    let x = 10;
は普通に領域をスタックに取るようですが
{
    let y = ~5;
}
という風に~を使うと領域がヒープに確保され、{}を抜けた時点で
デストラクタが呼ばれ領域が解放されるようです.
文法としてメモリアロケートがあるのがおもしろい.
システムプログラミングを意識してるためでしょうか.

また、変数の値に@を付けて宣言するmanaged boxというものもあるようで、
これは参照カウントで領域を解放するか判断するっぽいです.

この言語の特徴はこういった変数の取り扱いがシンタクスレベルで豊富なことにあるのではないかと考えます.

おわりに

本記事はテキトーにチュートリアルみながら思った雑感を書いていきましたが、
私の英語力不足による誤解や誤記が含まれているかもやしれないので、
もしそれらを見つけた場合はコメントとかでつっこんでくださると幸いです.
そして、これから低レイヤでこういう言語つかえると楽しそうですね

2012/12/26追記
オンラインのC++実行環境として有名な、めるぽんさんのwandboxにRustが追加されました
これで、いつでもどこでもだれでも、RustのGit最新版を試すことが可能です