More Related Content
More from Chris Birchall (11)
Rust 超入門
- 3. About me
● Scalaおじさん
● 流行りのGolangが気に入らない
● 本を買ってください(ドヤ
manning.com/birchall
- 4. Rust
● Mozilla発(2009年頃〜)
● システムプログラミング言語
○ バイナリにコンパイルされる
○ 速い
○ ポインター
○ GC無し
● 関数型っぽい機能もある
○ パターンマッチ
○ クロージャー
○ Algebraic Data Types
○ 型推論
- 6. Hello, world!
fn main() {
println!("Hello, world!");
}
$ rustc hello.rs
$ ./hello
Hello, world!
- 7. Algebraic Data Types
● タプル
● Struct
● Enum
enum Expr {
Number(int),
Plus(Expr, Expr),
Minus(Expr, Expr),
Mult(Expr, Expr),
Div(Expr, Expr),
}
- 8. 状態/副作用の管理が面白い
● 変数はデフォルトで immutable
let mut a = 5i;
● データの所有という概念がある
○ 作った人が所有者
○ 所有している物を人に貸すことができる
■ Ex: 関数に渡す時
○ mutable と immutable な貸し出し
○ コンパイラがルールをチェックする
- 9. 並列処理
● Taskをspawnする
● Taskが参照する変数の所有者になる
○ メインスレッドで参照できなくなる
● Channelを使ってTaskとやり取りする
● Futureもある
let (tx, rx) = channel();
spawn(proc() {
tx.send(" タスクだよーん".to_string());
});
let message = rx.recv();
println!("{}", message);
- 10. Crate と Module
● Crate = コンパイルの単位
○ 1個のCrateをコンパイルして1個のライブラリ又
はプログラムが出来上がる
● 他のCrateに依存できる
● Crate内にModuleを作れる
● Moduleはpublicな関数をexportする
mod hello {
pub fn print_hello() {
println!("Hello, world!");
}
}
- 11. Cargo
● ビルドツール
● 依存性管理
# Cargo.toml
[package]
name = "hello"
version = "0.0.1"
authors = [ "Chris Birchall <c-birchall@m3.com>" ]
[[bin]]
name = "hello"
- 12. 気になるとこ、その他
● traitは型クラスである
● マクロがある
● ポインターがある(こわい)
● Stringが2種類ある
● ScalaのIterateesに近い物がある
○ Iterator, iterator adapter, consumer
● 無限ループ用のキーワードがある(loop)