13
Rust 超入門 Chris Birchall @ M3 2014/10/28 #learnrust_jp

Rust 超入門

Embed Size (px)

Citation preview

Rust 超入門

Chris Birchall @ M32014/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$ ./helloHello, world!

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)

ゲームを作ってみよう

初級:あっち向いてホイ!中級:数字推測ゲーム上級:オセロ

目標● ゲームが動く!● 標準ライブラリを使う● Cargoを使う。外部dependencyを使う● Crateとしてパッケージする