1. 概要
なにはともあれ、「Hello, world!」。
ここでは、「プログラミング言語「Rust」とは? "Hello, World!"で基本を押さえる:基本からしっかり学ぶ Rust 入門」に紹介されているまま、やってみます。
2. パッケージ作成
適切な、作業ディレクトリを作成し、そこをカレントディレクトリとしておいて。
cargo new --bin hello_world
Created binary (application) `hello_world` package
ちゅなことを言われまして。
カレントディレクトリに、下記のディレクトリ・ファイルが作成されました。
hello_world
|-- Cargo.toml
`-- src
`-- main.rs
3. ビルド・実行
ここも、参考サイトのいうがまま。
cd hello_world
cargo run
コンパイルと実行が、同時に動くようです。
Compiling hello_world v0.1.0 (/パス/hello_world)
Finished dev [unoptimized + debuginfo] target(s) in 16.61s
Running `target/debug/hello_world`
Hello, world!
この時点で、ディレクトリ内は、下記のようになっております。
hello_world
|-- Cargo.lock
|-- Cargo.toml
|-- src
| `-- main.rs
`-- target
|-- CACHEDIR.TAG
`-- debug
|-- build
|-- deps
| |-- hello_world-7bfb95fddec9c2f8
| `-- hello_world-7bfb95fddec9c2f8.d
|-- examples
|-- hello_world
|-- hello_world.d
`-- incremental
`-- hello_world-xi5wb5f4hc0j
|-- s-gbyyqn2xyb-1g4i9iy-3uq7ikb1po8yg
| |-- 1d7hbqnt5t89r8o9.o
| |-- 1u6usfkoryhlwuto.o
| |-- 24td2griif9mg94m.o
| |-- 2zm0vfiwz1rxssvj.o
| |-- 3kwbhxw55uzxgwid.o
| |-- 3tl4prjstlgc7qgy.o
| |-- 3vgotgn4mqyoh6am.o
| |-- dep-graph.bin
| |-- query-cache.bin
| |-- r93ifovkcrlnny5.o
| `-- work-products.bin
`-- s-gbyyqn2xyb-1g4i9iy.lock
ロードモジュールは
hello_world/target/debug/hello_world
で、これは、単体で実行可能なロードモジュールになっていますので、単にロードモジュールを起動することで実行もできます。
$ hello_world/target/debug/hello_world
Hello, world!
上記では、ビルドと実行を一気に行ったのですが、それぞれ別途行うこともできるようです。
$ cargo build
Compiling postgres v0.1.0 (/パス/hello_world)
Finished dev [unoptimized + debuginfo] target(s) in 20.15s
$ cargo run
Finished dev [unoptimized + debuginfo] target(s) in 0.08s
Running `target/debug/hello_world`
Hello, world!
てな感じ。
デフォルトでは、デバッグモードでビルドするようです。
4. ソース
ソースは、パッケージ作成の段階でできた
hello_world/src/main.rs
ちゅうのは、アホでもわかりますわな。
覗いてみますと
fn main() {
println!("Hello, world!");
}
「C++」の後継というだけあって、「C++」をある程度理解していれば、「println」の後ろの「!」は、気になりますが、その他は、ほとんど納得できます。
下記のコマンドで、「Hello, world!"」を出力するプログラムが作成されたので
cargo new --bin hello_world
いささか驚いたのですが。
「cargo new --bin」の後ろにいれた文言は、今んとこ理解している限りでは、作成するディレクトリ名に影響するだけで。
「main.rs」のソース内容は、「cargo new --bin」の後ろに何をいれても、今んとこ同じなので、そこまで驚くことでもなかったようです。
ちなみに、上記のソース、わたしは
fn main()
{
println!("Hello, world!");
}
と書きたくなります。
いまやっている、「C」系のプロジェクトのルールでは「{}」は、改行して、同じカラム位置に書くことになっておりますでな。
しかし、「Rust」の推奨では「{」の部分は、前行の末尾にスペースをひとつあけて書くものらしい。
おそらくは、ロードモジュールには、なんら影響はないかとは思います。
要は、ソースの可読性に対する思惑の違いとか、慣れの問題かとは思いますが、わたしは、改行する癖がありますので、以降のソースでも改行しちゃうと思いますが、悪しからず。