Rust
Rust とは?
- Mozilla が支援
- Android OS や Linux カーネルでも使われている
- C/C++/Java/C#のいいとこ取り
- ネイティブコンパイラ言語 (ダイレクトに機械語に変換できる)
- メモリ安全
- スレッドセーフ
- ガベージコレクタが不要
- 自動テスト機能がある
- モジュールシステムが整っている
- プロジェクトを階層化、分割して管理する仕組み
インストールと更新
- インストール
- 公式サイトのスクリプトを実行する
- 更新
rustup update
- フォルダ構成
$HOME/.rustup
- Rust のアップデート用フォルダで、メタデータやツールチェーン(開発に必要なプログラム群)が置かれる
$HOME/.cargo
- パッケージマネジャーのフォルダ
- Rust のコマンド類は bin フォルダに配置される
- Rust のプログラム
- rustup
- ツールチェーンのインストールやアップデートを管理
- rustc
- コンパイラ
- Rust の中核
- 直接使うことは少ない
- cargo
- パッケージマネジャーである
- 外部ライブラリ(crates)のダウンロード、アップデート、バージョン管理
- crates.io での自作の crate を共有
- ビルドツールでもある
- コードのビルド
- コードのテスト
- ドキュメントの作成
- パッケージマネジャーである
- rustup
Hello World
# 新規プロジェクトの作成
cargo new --bin hello_world
cd hello_world
# ビルドと実行(デバッグ用)
cargo run
# ビルドと実行(リリース用)
cargo run --release
- ビルド成果は
target/(debug|release)
フォルダに出力される- ここでは
hello_world
というバイナリが生成されている
- ここでは
コメント
//
と/* */
が使える。///
を使うとドキュメンテーションコメントになる- マークダウンで書いたコメントが HTML ドキュメントになる
Cargo
cargo は以下の全てをこなす、何でもできるひと。
- Package manager (like npm)
- Build system (like
make
) - Test runner
- Docs generator
変数と可変性
Rust では変数はデフォルトで不変である。これは、安全、並列性、スピードのためである。
- 変数
- 不変
let x=5
- 可変
let mut x=5
- 命名規則は小文字のスネークケース
- rust では「値 5 を x に拘束する」という表現をする
- 不変
- 定数
const MAX_POINTS: u32 = 100_000
- 命名規則は大文字のスネークケース
- 型注釈は必須
- コンパイル時に値が定まる式(定数式)のみをセットできる
- 一方で immutable な変数はあらゆる式(e.g. 関数の戻り値など)をセットできる
シャドーイング
- 前に定義した変数と同じ名前の変数を新しく宣言して上書きすること
- ブロック内で使用した場合はブロック内でのみ有効
- シャドーイングは型を変更できるという点で、
mut
とは異なる。 - うまく使うとコードを可読性を向上させたり、凡ミスの可能性を減らしたりできる
let v = 1;
{
let v = 2;
// v === 2
}
// v === 1
let v = 3;
// v === 3