2020年6月1日月曜日

Rustを学ぶ(1) : Rustの環境構築

はじめに


Rust langに入門します。
モチベーションは次の2つです。
  • 新しいプログラミング言語パラダイム(所有権やライフタイムなど)を学びたい。
  • システムプログラミングとして低レイヤを学びたい。

環境


Mac miniを使います。RustはMacをサポートしています。
  • CPU: 6コア Intel Core i7
  • メインメモリ: 16GB
  • シェル: zsh
%はプロンプトを示し、<code>ぽいところは実際の画面出力やコードです。

Installation


公式にあるrustupを使います。TerminalやiTermなどからcurlを実行します。

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

curlを実行すると3つのツールがインストールされます。
  • rustc
    • Rustのソースコードをコンパイルします。
  • cargo
    • ビルドシステムとパッケージマネージャの役割をします。一番よく使います。
  • rustup
    • Rustのバージョンアップや異なるリリースチャネルからのインストールやクロスコンパイル(異なる機種へのコンパイル)をします。
途中で次の選択肢が出ます。初心者のためデフォルトの1を選択します。
やりたいことが他にあれば考える項目だと思います。

Current installation options:
    
    
       default host triple: x86_64-apple-darwin
         default toolchain: stable
                   profile: default
      modify PATH variable: yes
    
    1) Proceed with installation (default)
    2) Customize installation
    3) Cancel installation
    >1

ここでシェルを読み込み直す(. ~/.zshrc)かTerminalを閉じると、rustcなどのツールが使えるようになります。

% rustc --version
    rustc 1.43.1 (8d69840ab 2020-05-04)

今回インストールされたのは1.43.1のようです。
ちなみにRustにはstableとnightlyとbetaのチャネルがあります。基本は安定しているstableか、新実装の入ったnightlyで良いと思います。僕はstableにしています。

コンパイルと実行


Rustを任意の場所で動かします。僕はRustを書くときにVS Codeを使いたいと思いますので、事前にVS CodeのRust Extensionを入れています。

% mkdir rust_projects
   workspace % cd rust_projects
   rust_projects % mkdir hello_world
   rust_projects % cd hello_world
   hello_world % code .

コードは次の通りです。記念すべき最初の1歩、"Hello, World"です。

fn main() {
      println!("Hello, world!");
}

コンパイルして実行します。rustcを使います。

hello_world % rustc main.rs
hello_world % ./main
Hello, world!

出ました!
ところで、rustcではなくcargoを使うともっと簡単に実行できます。

プロジェクトの作成


せっかくcargoを使うのでプロジェクトから作ってみます。先の場所とは違う任意の場所に移動します。

% cargo new sample --bin
Created binary (application) `sample` package
% cd sample
% ls
Cargo.toml src

Cargo.tomlはビルドの設定ファイルです。その中身はgitに設定された内容が入っています。次のようになっているはずです。yournameとmailは個別に置き換えてください。

   [package]
   
   name = "sample"
   version = "0.0.1"
   authors = [ "yourname <mail@example.com>" ]

src/main.rsには先ほど手で作った"Hello, World"と同じ内容が書かれているはずです。では実行します。

% cargo run
       Finished dev [unoptimized + debuginfo] target(s) in 0.00s
        Running `target/debug/sample`
Hello, world!

出ました!
cargo runでコンパイルと実行をセットでやってくれます。
コンパイルだけしたいときはcargo buildでできます。
リリースビルドをしたいときはcargo build --releaseです。

ちなみに、次の2つは等価です。
  • cargo new sample --bin
  • cargo new sample
ライブラリを作る場合はcargo new sample --libにします。

おわりに


Rustの環境構築をしました。ほとんどの場合はRustがサポートされているため環境構築は難しくないと思います。次回はRustでサーバーを作りたいと思います。


参考