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