Rust入門① 環境について

インストール

公式を見るのが良さそう
インストールをするとホームディレクトリ配下に .rustup.cargo というディレクトリができる。
- .rustup
ツールチェインの本体 - .cargo
rustc, cargo, rustupなどのコマンドが格納されている

windowsの場合先にVisual StudioC++開発ツールのインストールをしてください

リンカーのインストール

をそれぞれ行う。
windowsVisual Studioをインストールをすればついて来るので特別やることはない

インストールをして使えるようになるコマンドのバージョンを確認

rustup --version

rustc --version

cargo --version

更新

rustup update で本体の更新ができる。

パッケージ作成

cargo new コマンドを作ってパッケージを作ることができる。
パッケージの種類はバイナリとライブラリを作る2種類ある。
cargo new コマンドを実行するときに指定することで、必要な設定をしてくれる。

バイナリとライブラリの指定

  • バイナリ
    ビルドをして、実行ファイルの出力をしてくれる。
    cargo new --bin <パッケージ名> この様なコマンドになる
  • ライブラリ
    ライブラリファイルを出力してくれる。
    cargo new --lib <パッケージ名> この様なコマンドになる

例えばhelloworldとコンソールに出力するプロジェクトを作る場合

cargo new --bin helloworld

となる

ビルド

cargo build でビルドができる。
ビルドをすると <package root>/target/debug に成果物が出力される。
cargo build --release とするとリリースビルドになり、出力先は<package root>/target/release になる。

その他コマンド

  • 実行
    cargo run で実行ができる。ビルドをしていなくても実行ができる
  • クリーン
    cargo clean<package root> 配下にあるtargetディレクトリを削除する

開発環境

neovimならcocの拡張でcoc-rust-analyzerがあるのでこれを使うのがよさそう。
vscodeでも同様にrust-analyzerを利用するパッケージがある。(試してない)
共にrust-analyzerを利用してのコード補完をしてくれる。

rust-analyzerのインストール

coc-rust-analyzerをインストール後にneovimを立ち上げると rust-analyzer が存在しないのでインストールをするかと聞かれるがインストールしてくれなかったので手動のインストール方法も書いておく

参照

$ curl -L https://github.com/rust-analyzer/rust-analyzer/releases/latest/download/rust-analyzer-linux -o ~/.local/bin/rust-analyzer
$ chmod +x ~/.local/bin/rust-analyzer

以上でrust-analyzerをインストールができる。
nvimの場合:CocConfig で設定ファイルを開いてから rust-analyzer.serverPath の指定を行う。

デバッガ

vscode

ターミナル

LLDB, GDBを利用する。
これらをインストールした状態でrustツールチェインに含まれる。rust-lldb, rust-gdbを使いデバッガを起動する。

※v1.46.0での注意 v1.46.0でrust-lldbを実行したら file specified in --source (-s) option doesn't exist: というエラーがでた。
解決方 の手順で起動に成功。 パッケージを作るたびに

$ ln -s ~/repos/rust/src/etc/lldb_commands ./
$ ln -s ~/repos/rust/src/etc/lldb_providers.py ./
$ ln -s ~/repos/rust/src/etc/lldb_lookup.py ./
$ ln -s ~/repos/rust/src/etc/lldb_batchmode.py ./

これを行う。

命名規則

  • 小文字スネークケース
    関数、変数、モジュール
  • 大文字スネークケース
    定数、グローバル変数
  • キャメルケース
    ユーザー定義型、ジェネリックス、トレイト

この命名規則に違反をしている場合コンパイルをした時に警告が表示される。
無視をしたい場合アトリビュートを利用して警告の抑制ができる。

  • #[allow(non_snake_case)]
    関数、変数、モジュール
  • #[allow(non_upper_came_globals)]
    定数、グローバル変数
  • #[allow(non_camel_case_types)]
    ユーザー定義型、ジェネリックス、トレイト

コーディング規約

Rust Style Guideを参照
rustには rustfmt というフォーマットの整形をしてくれるツールがあるのでこれを動かせば良い。