Rust
install
$ rustup update stable
rustup -> rustc -> cargoみたいな感じで全部はいるのかな? Editions
開発スタート
toolchains
cargo +nighty build
fromstring/ from
parse/intoメソッドがつかえるようになったりする
exit
std::process::exit(0x0100);
所有権はどこにあるのか、参照なのか、に気をつけるとよさげ
tools
プロセスを作成
tuple
let tup: [型; サイズ] = (x, y, z)
rustでは初期化せずに宣言はできない?
(V; N)で値がVでN要素のtuple
異なる型をグループにできる
アクセスは '.'で
array
長さを変えられない
変更したくない値を入れておく
statementは値を返さない
;がついている。文。
したがって x = y = 1のような書き方は不可
値を返すのはexpression
semicolonなし
{}はexpressionなので最後のexpressionの値を返す。
ifもexpression
ownership
所有権の移動に関して許されるのは「Ownerが、貸与中でないオブジェクトの所有権を移動すること」だけである。Ownerが、貸与中オブジェクトの所有権を移動することはできないし、また、Borrowerが、借用中オブジェクトの所有権を勝手に移動することもできない。
key feature
memory management
スコープから外れたときに自動的ににメモリーを開放する=drop
referenceしたとき=borrowしたときはownershipは持たない=スコープから抜けてもdropしない。
さらに、変数を変更できない。
mutable referenceも可能だが、一つしか存在し得ない
文字列リテラルは変更できないが文字列型の変数は可能
リテラルはメモリ上に固定されるため
だから早い
Stringは配列への参照
mutable 参照はスコープ内でひとつ
mutable refとrefは同時にだめ。
ヒープはmoveされて前の変数(ポインタ)は無効になるがスタックはshallow copyだから無効にはならない
struct
値のグループ
クラスみたいなもの
値を意味にまとめる
親構造体がmutなら子もmut
modules
モジュールも関数も意図的にpublicにする必要あり。
10. Generic Types, Traits, and Lifetimes
関数でlifetime annotationつけたら短い方にそろう