Rust に入門します。
前提
MacOSかLinuxを前提とします。
インストール
$ curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh
公式ドキュメント通りに Rust をインストールします。
$ rustc --version
rustc 1.56.0 (09c42c458 2021-10-18)
バージョン情報を標準出力できればインストール成功です。
Hello Worldを出してみる
fn main() {
println!("こんにちは世界!");
}
プログラムのエントリポイントとなる main 関数を定義します。簡単な内容です。println!の ! はマクロの呼び出しを意味するようです。C言語っぽい。
$ rustc firstcode.rs
rustcコマンドでコンパイルする対象を指定します。コンパイルすると同名の実行可能ファイルが生成されます。
$ ./firstcode
こんにちは世界!
標準出力されました。なんてことないコードですが、生成されたバイナリがどのような依存を持つのか見てみます。
$ otool -L firstcode
firstcode:
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1281.100.1)
/usr/lib/libresolv.9.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libiconv.2.dylib (compatibility version 7.0.0, current version 7.0.0)
3つの共有ライブラリに依存していました。 libresolv は DNS のライブラリだと思いますが、どういう理由でリンクされているのでしょうね?
cargo(ビルドシステム)
Rust のライブラリ管理・ビルドは cargo を使います。他言語だとビルドやパッケージ管理が別のツールに切り出されていることがほとんどですが、 Rust では cargo が標準装備のようです。
$ cargo new first_project
Created binary (application) `first_project` package
プロジェクトを作ります。
$ cargo build
Compiling first_project v0.1.0 (/Users/lockhart/pywork/rust-renshu/first_project)
Finished dev [unoptimized + debuginfo] target(s) in 2.73s
プロジェクトをビルドします。
$ ./target/debug/first_project
Hello, world!
ビルド結果は target ディレクトリに生成されます。debugディレクトリの中に実行可能ファイルが出来ているので、実行します。cargo new で作成したプロジェクトの main.rs は初期値が hellow world の標準出力になっています。
production向けのビルドを実行するにはオプションを指定する必要があります。
$ cargo build --release
Compiling first_project v0.1.0 (/Users/lockhart/pywork/rust-renshu/first_project)
Finished release [optimized] target(s) in 1.55s
デフォルトがデバッグビルドになっているんですね。productionビルドは生成物が最適化されるようになっています。
$ cargo run
Finished dev [unoptimized + debuginfo] target(s) in 0.00s
Running `target/debug/first_project`
Hello, world!
ビルド&実行をまとめて実行する run コマンドもあります。こちらも production ビルドで実行する場合は --release
オプションをつけます。
まとめ
Rust の最初の一歩をやってみました。最近何かとシステムプログラミング界隈が Rust でざわついていますよね。最近リリースされた Next.js v12 でもデフォルトのトランスパイラが Babel から Rust に置き換えられて、ビルド速度の大幅改善に成功しているようです。(ソース)
もっと深堀りしないと言語特性が分からないので、何かお題を決めて小さな成果物を作ってみようと思います。
では、今日はここまで。良き Rust ライフを!