Rust Advent Calender 21 + 1日目の記事です. (ておくれました)
といっても特に良いTipsとかあるわけではないのですが、
今回初めて知って、インストールして使用してみた雑感などをば.
インストール
私が普段使用しているArch Linuxなら、
なんと公式のレポジトリ ( community repo )入りを果たしているために
最新のRust ( rust-0.8 )が特に特別な操作をしなくともインストールできます
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系は知りません.
つかってみる
公式にmanualとtutorialがあります.
結構詳しくて良いですね.学習しやすそう.
とりあえず定番、フィボナッチ数を表示してみる
実行結果
パターンマッチが簡単に使えるのが良いです.
また、記法の雰囲気が従来のC系の言語に近いので
この言語を使ってみる精神的障壁が低いかもしれませんね.
見てわかる通り、ifやwhileの条件式(conditioal)は()で括ったりはしません.
関数の返り値はreturnで返しますが、実行の最後の値を返り値とみなせるようです
(returnの省略)
;セミコロンは文末やセパレータではなく、nilまたは()を返す文として;が使われるようです
(return ()と等価)
この言語でおもしろいなーと思ったのがメモリの確保です
デストラクタが呼ばれ領域が解放されるようです.
文法としてメモリアロケートがあるのがおもしろい.
システムプログラミングを意識してるためでしょうか.
また、変数の値に@を付けて宣言するmanaged boxというものもあるようで、
これは参照カウントで領域を解放するか判断するっぽいです.
この言語の特徴はこういった変数の取り扱いがシンタクスレベルで豊富なことにあるのではないかと考えます.
おわりに
本記事はテキトーにチュートリアルみながら思った雑感を書いていきましたが、
私の英語力不足による誤解や誤記が含まれているかもやしれないので、
もしそれらを見つけた場合はコメントとかでつっこんでくださると幸いです.
そして、これから低レイヤでこういう言語つかえると楽しそうですね
2012/12/26追記
オンラインのC++実行環境として有名な、めるぽんさんのwandboxにRustが追加されました
これで、いつでもどこでもだれでも、RustのGit最新版を試すことが可能です
といっても特に良いTipsとかあるわけではないのですが、
今回初めて知って、インストールして使用してみた雑感などをば.
インストール
私が普段使用しているArch Linuxなら、
なんと公式のレポジトリ ( community repo )入りを果たしているために
最新のRust ( rust-0.8 )が特に特別な操作をしなくともインストールできます
# pacman -S rustGentooの場合は
# 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系は知りません.
つかってみる
公式にmanualとtutorialがあります.
結構詳しくて良いですね.学習しやすそう.
とりあえず定番、フィボナッチ数を表示してみる
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
fn fib( n:int ) -> int { | |
match n { | |
0 => 0, | |
1 => 1, | |
n => fib(n-1) + fib(n-2) | |
} | |
} | |
fn main() { | |
let mut count = 0; | |
while count < 10 { | |
println(fmt!("%? term: %?",count,fib(count))); | |
count += 1; | |
} | |
} |
0 term: 0変数は基本immutable、mutableな変数の宣言はmutで修飾しています.
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
パターンマッチが簡単に使えるのが良いです.
また、記法の雰囲気が従来のC系の言語に近いので
この言語を使ってみる精神的障壁が低いかもしれませんね.
見てわかる通り、ifやwhileの条件式(conditioal)は()で括ったりはしません.
関数の返り値はreturnで返しますが、実行の最後の値を返り値とみなせるようです
(returnの省略)
;セミコロンは文末やセパレータではなく、nilまたは()を返す文として;が使われるようです
(return ()と等価)
この言語でおもしろいなーと思ったのがメモリの確保です
let x = 10;は普通に領域をスタックに取るようですが
{という風に~を使うと領域がヒープに確保され、{}を抜けた時点で
let y = ~5;
}
デストラクタが呼ばれ領域が解放されるようです.
文法としてメモリアロケートがあるのがおもしろい.
システムプログラミングを意識してるためでしょうか.
また、変数の値に@を付けて宣言するmanaged boxというものもあるようで、
これは参照カウントで領域を解放するか判断するっぽいです.
この言語の特徴はこういった変数の取り扱いがシンタクスレベルで豊富なことにあるのではないかと考えます.
おわりに
本記事はテキトーにチュートリアルみながら思った雑感を書いていきましたが、
私の英語力不足による誤解や誤記が含まれているかもやしれないので、
もしそれらを見つけた場合はコメントとかでつっこんでくださると幸いです.
そして、これから低レイヤでこういう言語つかえると楽しそうですね
2012/12/26追記
オンラインのC++実行環境として有名な、めるぽんさんのwandboxにRustが追加されました
これで、いつでもどこでもだれでも、RustのGit最新版を試すことが可能です