(-> % read write unlearn)

My writings on this area are my own delusion

rust-lang#01 Getting Started

前回に続いてRustのチュートリアルをやっていきます。

今日は2. Getting Startedからです。

Installing

復習。 MacLinuxならcurl -sSf https://static.rust-lang.org/rustup.sh | shでOK。自分も以前これでやった。

Uninstalling

MacLinuxならsudo /usr/local/lib/rustlib/uninstall.shでOKと書いてあります。 自分の環境にはこのスクリプトはありませんでした。

PlatformSupport

サラーッと流し読みします。 通常のWindowsやOS-XやLinuxなら、問題なくコンパイルもランもできるようです。それ以外のARMのLinuxiosBSD系などでは、コンパイルできたりできなかったりなどまちまちのようです。

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。
RubyPythonや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 shrinkwrapshrinkwrap.jsonRubybundle installGemfile.lockとだいたい似たものだと思います。

以上で 2. Getting Started をざっくり通しました。 次の章の3. Tutorial: Guessing Gameは以前にやったことがある気がするので飛ばして4. Syntax and Semanticsに進みます。*2

*1:この表現を見る限り、このチュートリアルシステムプログラミングに馴染みのない人をある程度ターゲットにしているように思える。それはとてもありがたい。

*2:いつになるか分かりませんが。。。