Open6
『The Rust Programming Language』でRust入門
まずはRustのインストール
$ curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh
このコマンドで、rustup
コマンドをインストール
export PATH="$HOME/.cargo/bin:$PATH"
.zshrc
に追記して、PATHを設定しておきます。
$ rustup update
$ rustc --version
コマンドが正常に実行できたら準備完了。
やっぱり最初はHello World!
$ mkdir hello_world
$ cd hello_world
$ vi main.rs
fn main() {
println!("Hello, world!");
}
$ rustc main.rs
$ ./main
Hello, world!
rustc
でコンパイルされて、実行ファイルが生成される。
npmじゃなくてcargo
$ cargo new [project_name] # projectの作成
$ cargo build # debug build、生成ファイルは ./target/debug/ の下
$ cargo check # compile check
$ cargo run # build + execute
$ cargo build --release # release build
$ cargo update # update dependencies
変数の定義方法
const MAX_POINT: u32 = 100_000; // 定数の定義は const で。また定数の変数名は全て大文字で単語区切りは `_` を使う
fn main() {
let x = 1; // 変数の定義は let で
let mut y = 1.2; // mutを付けた場合だけ、変更可能な変数になる。
}
変数宣言がデフォルトで不変な代わりに、同じ変数名を使ってシャドーイングをする事が推奨されている。
ここは既存の言語とはちょっと違う点かな?ESLintには no-shadow
というそのものズバリなルールがあるし。
Rustのデータ型
整数型
大きさ | 符号付き | 符号なし |
---|---|---|
8-bit | i8 | u8 |
16-bit | i16 | u16 |
32-bit | i32 | u32 |
64-bit | i64 | u64 |
arch | isize | usize |
Rustの整数型の基準はi32型。
『符号付き数値は、 2の補数表現で保持されます』と明示されているんですね。Cは未規定だったはず。
浮動小数点型
f32
, f64
の2つ。
基準型は f64
。IEEE-754規格に従って表現されていることが保証されている。
論理値型
型は 'bool、取りうる値は
trueor
false`
文字型
char
型はユニコードのスカラー値を表す。
『ユニコードスカラー値は、 U+0000からU+D7FFまでとU+E000からU+10FFFFまでの範囲になります。』
なので日本語の文字もそのまま扱える。
絵文字も扱えるけれど、一見一文字に見える絵文字でも複数のユニコード値で表される場合は対象外。
複合型
タプル
fn main() {
let tup: (i32, f64, u8) = (500, 6.4, 1);
let (x, y, z) = tup;
println!("The value of y is: {}", y);
}
タプルから個々の値を取り出すためには、パターンマッチを使うことができる。
fn main() {
let x: (i32, f64, u8) = (500, 6.4, 1);
let five_hundred = x.0;
let six_point_four = x.1;
let one = x.2;
}
もしくは、数字の添え字を使って個々の要素にアクセスも可能。
配列
『Rustの配列は、他の言語と異なっています。Rustの配列は、 固定長なのです。』
fn main() {
let a: [i32; 5] = [1, 2, 3, 4, 5];
let a = [3; 5]; // [3, 3, 3, 3, 3] と同じ
let first = a[0];
let second = a[1];
}
添え字に範囲外の値を指定した場合には、実行時にpanicが発生する。