前回に続いてRustのチュートリアルをやっていきます。
今日は2. Getting Startedからです。
Installing
復習。
MacやLinuxならcurl -sSf https://static.rust-lang.org/rustup.sh | sh
でOK。自分も以前これでやった。
Uninstalling
MacやLinuxならsudo /usr/local/lib/rustlib/uninstall.sh
でOKと書いてあります。
自分の環境にはこのスクリプトはありませんでした。
PlatformSupport
サラーッと流し読みします。 通常のWindowsやOS-XやLinuxなら、問題なくコンパイルもランもできるようです。それ以外のARMのLinuxやios、BSD系などでは、コンパイルできたりできなかったりなどまちまちのようです。
Trouble Shooting
実はドキュメントもローカルにインストールされているらしいです。
デフォルトのロケーションは/usr/local/share/doc/rust
です。自分はそこには何もなくて、↓にありました。
$HOME/.multirust/toolchains/stable-x86_64-apple-darwin/share/doc/rust
https://doc.rust-lang.org/book の内容がまさに入っています。
分からないことがあったら次を参考に。
これ | url |
---|---|
IRC | http://chat.mibbit.com/?server=irc.mozilla.org&channel=%23rust (このURLはmibbitというネットで使えるIRCサービスの) |
ユーザーフォーラム | https://users.rust-lang.org/ |
StackOverflow | http://stackoverflow.com/questions/tagged/rust |
Hello, world! & Creating a Project File
Anatomy of a Rust Program
fn main() { println!("Hello, world!"); }
インデント
インデントはスペース4つ。TABは使いません。
println!
マクロ
println!
は、関数ではなくて実はマクロです。展開されると最終的にprintln
になります。
!
で終わるのは、通常の関数ではなくてマクロです。
Stringリテラル
"Hello, world!"
はString(文字列)のリテラル表記であり、静的にアロケートされた文字列です。
「システムプログラミングでは『文字列』は驚くほど複雑なトピック」なんだそうです。*1
セミコロン(;
)
セミコロンの扱いがJavaやJSとは微妙に違って、特徴的なので少し訳してみます。
The line ends with a semicolon (;). Rust is an expression-oriented language, which means that most things are expressions, rather than statements. The ; indicates that this expression is over, and the next one is ready to begin. Most lines of Rust code end with a ;.
println!("Hello, world!");
の行はセミコロン(;)で終わっています。Rustは式指向の言語(expression-oriented language)です。どういうことかと言うと、多くの要素が文(statements)ではなく式(expressions)なのです。; は、式が終端し次の式が始まることを示しています。Rustのコードのほとんどの行は ; で終わります。
その他
Rustは事前にコンパイルが必要なプログラミング言語。ahead-of-time compiled language。
RubyやPythonやJSはコンパイルと実行のステップが分かれていないが、実行する環境にそれらがインストールされていないといけません。Rustはコンパイルしてできるバイナリだけあれば直接実行できます。
Cargoの設定ファイルはTOMLフォーマット。 TOMLはTom's Obvious, Minimal Languageの略のようです。形式としてはiniに近いです。詳しくはこちら。
Hello, Cargo!
Cargoコマンド
cargo build
: コンパイルします。 前回のビルドからプロジェクトに変更がなければコンパイルしません。cargo build --release
: 本番用にoptimizeしたコンパイルを実行します。 出来上がるバイナリの実行速度は速くなるが、コンパイル時間は長くなります。cargo run
: コンパイルして、できたバイナリを実行します。
cargo build
はコンパイル結果以外にCargo.lock
ファイルを作成します。
このファイルは依存の解決などの設定を保存しビルドに再現性を持たせるためのものです。
基本的にはプログラマが直接いじるファイルではありません。
Node.jsのnpm shrinkwrap
のshrinkwrap.json
やRubyのbundle install
のGemfile.lock
とだいたい似たものだと思います。
以上で 2. Getting Started をざっくり通しました。 次の章の3. Tutorial: Guessing Gameは以前にやったことがある気がするので飛ばして4. Syntax and Semanticsに進みます。*2