Install · The Rust Programming Language
@omasanori
想定
- C言語が読める
- OSの構成や役割について知っている
- 知らない文法のコードが見えても怖気づかない
Rustとは
システムプログラミング言語
資源の制約が厳しい
他
- アセンブリ言語
- C言語
- C++
なぜRustは生まれたのか
Interview on Rust, a Systems Programming Language Developed by Mozilla
他のプログラミング言語の良い所どりをした、いいやつ。
- 占有ポインタ(ヒープ上の所有権を1つだけ有するstd::unique_ptr)
- 参照(所有権を持たない)
- 生ポインタ
owning pointer → owned box
int型の値をヒープ上に確保する
関数が返ってきても開放されるとは限らない
参照に値を「貸して」いる間は所有権を移動できない
C++のスマートポインタセマンティクスとかそういうアレ
(借り物ポインタ)
リソース制約が厳しい環境では、予測可能性
- 有効範囲を出た時に解放する
- 基本はスコープの外に出た時に解放される
const vs mut
- 再代入、変更を許さないのがC++のconst
- 再代入、変更を許すのがRustのmut
一方が他方とくらべて圧倒的に優れているということはない
Rust 不要な再代入を避けるようなプログラミングスタイルに誘導してる?
constをつけなくてもいいときにconstをつける
不要なのにmutをつけると警告がいっぱいいっぱい出てくる
- MLKit(IT Univ. of Copenhagen
- Cyclone (AT&T)
Cでよくあるミステイクがいっぱい掲載されてれぅ
値や参照の有効範囲
Rustの生存期間
A 30 minute introduction to Rust
fn dangling() -> ~int { let i = ~1234; return i; } fn add_one() -> int { let num = dangling(); return *num + 1; }
参照は生存期間をパラメータとして取れる
ML(初期の関数型言語のアレ)
「好きな関数はif」
Rubyのifは関数ではないが、全ての言語のifが関数ではないというわけではない
Rustのifも関数ではない
宣言文と式文(式の末尾に;)
式は濫用せんこと
代数的データ型
値の集合としての型(-1,-2,-3)
直和、直積
cでいうところの
直和、共用体(型と型の組) 直積、構造体
Rustは型検査器の支援を受けやすく、より安全に使える
型検査器を欺くのではなく協力する
暗黙のreturnは使わん方がいい
型クラス: 型の分類(classe)
- トレイトはデフォルト実装
- シグネチャにトレイトを指定
数値のように○○できるならばそれは数値として扱える
少し変わった標準提供トレイト
Zero→One
メッセージパッシング
使うのは難しくないけど実装するのは難しい
@kumagiにきこう!
compilerのwarningを消す
1.0が出てないから最新版は使えない
不満を抱えたC++開発者がターゲット、らしい