Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
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無し 
● 関数型っぽい機能もある 
○ パターンマッチ 
○ クロージャー 
○ ...
ドキュメントがすごすぎる件
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...
状態/副作用の管理が面白い 
● 変数はデフォルトで immutable 
let mut a = 5i; 
● データの所有という概念がある 
○ 作った人が所有者 
○ 所有している物を人に貸すことができる 
■ Ex: 関数に渡す時 
○...
並列処理 
● Taskをspawnする 
● Taskが参照する変数の所有者になる 
○ メインスレッドで参照できなくなる 
● Channelを使ってTaskとやり取りする 
● Futureもある 
let (tx, rx) = chan...
Crate と Module 
● Crate = コンパイルの単位 
○ 1個のCrateをコンパイルして1個のライブラリ又 
はプログラムが出来上がる 
● 他のCrateに依存できる 
● Crate内にModuleを作れる 
● Mod...
Cargo 
● ビルドツール 
● 依存性管理 
# Cargo.toml 
[package] 
name = "hello" 
version = "0.0.1" 
authors = [ "Chris Birchall <c-birch...
気になるとこ、その他 
● traitは型クラスである 
● マクロがある 
● ポインターがある(こわい) 
● Stringが2種類ある 
● ScalaのIterateesに近い物がある 
○ Iterator, iterator ada...
ゲームを作ってみよう 
初級:あっち向いてホイ! 
中級:数字推測ゲーム 
上級:オセロ 
目標 
● ゲームが動く! 
● 標準ライブラリを使う 
● Cargoを使う。外部dependencyを使う 
● Crateとしてパッケージする
Upcoming SlideShare
Loading in …5
×

Rust 超入門

3,565 views

Published on

Rust

Published in: Technology
  • Be the first to comment

Rust 超入門

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

×