狠狠撸

狠狠撸Share a Scribd company logo
Rust 超入門 
Chris Birchall @ M3 
2014/10/28 
#learnrust_jp
今日の流れ 
19:00?Rust紹介 
19:30?20:30 ゲームを作ってみよう! 
20:30?成果?感想?質問?雑談 
21:00 おしまい
About me 
● Scalaおじさん 
● 流行りのGolangが気に入らない 
● 本を買ってください(ドヤ 
manning.com/birchall
Rust 
● Mozilla発(2009年頃?) 
● システムプログラミング言語 
○ バイナリにコンパイルされる 
○ 速い 
○ ポインター 
○ GC無し 
● 関数型っぽい機能もある 
○ パターンマッチ 
○ クロージャー 
○ Algebraic Data Types 
○ 型推論
ドキュメントがすごすぎる件
Hello, world! 
fn main() { 
println!("Hello, world!"); 
} 
$ rustc hello.rs 
$ ./hello 
Hello, world!
Algebraic Data Types 
● タプル 
● Struct 
● Enum 
enum Expr { 
Number(int), 
Plus(Expr, Expr), 
Minus(Expr, Expr), 
Mult(Expr, Expr), 
Div(Expr, Expr), 
}
状態/副作用の管理が面白い 
● 変数はデフォルトで immutable 
let mut a = 5i; 
● データの所有という概念がある 
○ 作った人が所有者 
○ 所有している物を人に貸すことができる 
■ Ex: 関数に渡す時 
○ mutable と immutable な貸し出し 
○ コンパイラがルールをチェックする
並列処理 
● 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 <c-birchall@m3.com>" ] 
[[bin]] 
name = "hello"
気になるとこ、その他 
● traitは型クラスである 
● マクロがある 
● ポインターがある(こわい) 
● Stringが2種類ある 
● ScalaのIterateesに近い物がある 
○ Iterator, iterator adapter, consumer 
● 無限ループ用のキーワードがある(loop)
ゲームを作ってみよう 
初級:あっち向いてホイ! 
中級:数字推測ゲーム 
上級:オセロ 
目標 
● ゲームが動く! 
● 標準ライブラリを使う 
● Cargoを使う。外部dependencyを使う 
● Crateとしてパッケージする

More Related Content

Rust 超入門

  • 1. Rust 超入門 Chris Birchall @ M3 2014/10/28 #learnrust_jp
  • 2. 今日の流れ 19:00?Rust紹介 19:30?20:30 ゲームを作ってみよう! 20:30?成果?感想?質問?雑談 21:00 おしまい
  • 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)
  • 13. ゲームを作ってみよう 初級:あっち向いてホイ! 中級:数字推測ゲーム 上級:オセロ 目標 ● ゲームが動く! ● 標準ライブラリを使う ● Cargoを使う。外部dependencyを使う ● Crateとしてパッケージする