rust primer

39
rust primer 2015/06/06() プログラミング生放送勉強会 第34@サイボウズ株式会社 松山オフィス You&I
  • date post

    30-Jul-2015
  • Category

    Technology

  • view

    1.513
  • download

    1

Transcript of rust primer

rust primer2015/06/06(土)

プログラミング生放送勉強会第34回

@サイボウズ株式会社松山オフィス

You&I

ジコ、ショウカイ。

• H/N: You&I(読み:ユーアンドアイ)

• SNS: @you_and_i

•出身: 生まれも育ちも名古屋市

•年齢: 30代後半

•本職: 商学部出身の職業プログラマ

•言語: C++, C#他

•所属: プログラミング生放送勉強会名古屋支部長

名古屋アジャイル勉強会

わんくま同盟名古屋勉強会

2rust primer

ワタシハプロ生ちゃん新参組デス

3rust primer

プロ生勉強会について

回数 参加 回数 参加 回数 参加 回数 参加

第1回@渋谷 不参加 第11回@大阪 不参加 第21回@福岡 参加 第31回@大阪 参加

第2回@新宿 不参加 第12回@品川 参加 第22回@松山 参加 第32回@GMO 参加

第3回@大阪 不参加 第13回@愛媛 参加 第23回@大阪 参加 第33回@DMM 不参加

第4回@名古屋 参加 第14回@品川 不参加 第24回@名古屋 参加 第34回@松山 参加

第5回@新宿 不参加 第15回@大阪 参加 第25回@品川 不参加

第6回@大阪 参加 第16回@名古屋 参加 第26回@大阪 不参加

第7回@新宿 参加 第17回@品川 参加 第27回@品川 参加

第8回@名古屋 参加 第18回@大阪 参加 第28回@仙台 参加

第9回@大阪 参加 第19回@品川 参加 第29回@松山 参加

第10回@品川 参加 第20回@品川 不参加 第30回@名古屋 参加

4

名古屋支部長のこれまでの勉強会参加状況→29回中20回

rust primer

Agenda

1. Rustとは

2. Rustの環境構築

3. Rustで開発する

4. Rustの言語仕様

rust primer 5

1. Rustとはrust primer

rust primer 6

1. Rustとは

•http://www.rust-lang.org

•Rustは、Mozilla財団の職員であるGraydon Hoare氏が2006年に開発を始めたプログラミング言語です。2009年からMozilla財団の支援を受けており、2010年に公開されました。

•2012年1月にRustコンパイラを含むα版のRust 0.1がリリース。

•2015年5月16日(JST)にRust 1.0がリリースされました。

rust primer 7

1. Rustとは

•Rustの3つのゴール•安全性•実行速度•並行性

rust primer 8

1. Rustとは

•Rustは、先の3つのゴールを以下により維持します•ガベコレなし

•他の言語が不得意とする以下のユースケースを数多く持つ、使いやすい言語に作り上げる•他のプログラミング言語や特定の領域と時間を要求するプログラムの埋め込み

• デバイスドライバーやOSのようなLow-Levelなコードの記述

rust primer 9

1. Rustとは

•Rustは、以下のマルチパラダイムをサポートしたコンパイル型言語です。•純関数型プログラミング•アクターモデル(並行計算モデル)•手続き型プログラミング•オブジェクト指向プログラミング

rust primer 10

※詳細は各自でbingってクレメンス・・・

1. Rustとは

•Rustの特徴• コストゼロな抽象化•ムーブセマンティスク• メモリ安全保障•データ競合のないスレッド•トレイトを基盤としたジェネリックプログラミング•パターンマッチ•型インターフェース• ランタイムサイズの最小化•効率的なC言語バインディング

rust primer 11

2. Rustの環境構築rust primer

rust primer 12

2. Rustの環境構築

•オンラインコンパイラあります!

•https://play.rust-lang.org

以上

rust primer 13

2. Rustの環境構築

•公式の実行可能プラットフォーム• Microsoft Windows (7, 8, Server 2008 R2) (32/64 bit)• Linux (2.6.18 or later, various distributions) (32/64 bit)• Apple Mac OSX 10.7(Lion) or greater (32/64 bit)

•上記以外にAndroidでも動作確認が行われている。

rust primer 14

2. Rustの環境構築

•Windowsについては、第一線のリリース対象となっていてLinux/OSXと同じテストが行われているものの、Linux/OSXで開発した時のような体感は得られないでしょう。

•ビルド時にネットワーク経由でcratesと呼ばれるパッケージをダウンロードしたりするので、インターネット環境も必要です。• https://crates.io

rust primer 15

2. Rustの環境構築

•Rustコンパイラのインストール• Windows

• インストーラーからインストール

• Linux/OSX• インストールスクリプトからインストール

•Rustコンパイラの動作確認

rust primer 16

$ curl -sSf https://static.rust-lang.org/rustup.sh | sh

$ rustc

2. Rustの環境構築

• gitのインストール•分散バージョン管理システム• https://git-scm.com

•Rustに関連するプロジェクトは大体GitHubでホストされていたり、Rustのパッケージのダウンロードなどでも使われるのでgitは入れておきましょう。•以下のgitクライアントを利用するのも良いです。

• Atlassian SourceTree

• GitHub for Windows

rust primer 17

2. Rustの環境構築

•Rustの統合開発環境• Eclipse Plug-in

• RustDT

• RustyCage

• JetBrains IntelliJ Plug-in• idea-rust

• Sublime Text 3 Plug-in• Sublime Text package for

Rust

• RustAutoComplete

• SolidOak• Vim(with Racer)• Emacs(with Racer)• Atom(with Racer)• LightTable

沢山あるけど、一長一短。

好きなのを使いましょう。

rust primer 18

2. Rustの環境構築

•Racer(Rust Auto-Complete-ER)•オートコンプリート補助ツール• https://github.com/phildawes/racer•インストール

rust primer 19

$ git clone https://github.com/phildawes/racer.git

$ cd racer

$ cargo build --release

3. Rustで開発するrust primer

rust primer 20

3. Rustで開発する

•プロジェクトの作成

•ビルド

•実行

rust primer 21

$ cd some_dir

$ cargo new project_name --bin

$ cargo build --release -j 4

$ cargo run --release

4. Rustの言語仕様rust primer

rust primer 22

4. Rustの言語仕様

•Rust言語仕様• https://doc.rust-lang.org/reference.html

•Rust Book• https://doc.rust-lang.org/stable/book/

活発に開発が行われていますので、今後破壊的変更が入る可能性もあります。

rust primer 23

4. Rustの言語仕様

•Rust言語使いの呼び名• Rustaceans

•ソースコードファイル• ファイル名は必ず「snake_case」で•拡張子は「.rs」

•プロジェクトファイル• Rustにはプロジェクト管理の「cargo」コマンドが含まれる• ファイル名は「Cargo.toml」

rust primer 24

4. Rustの言語仕様

•プロジェクトフォルダ構成

rust primer 25

(root)

│ .gitignore

│ Cargo.lock

│ Cargo.toml

├─src/

│ main.rs

└─target/

├─debug/

└─release/

│ test_proj1.exe

├─build/

├─deps/

├─examples/

└─native/

4. Rustの言語仕様

•エントリーポイント• main関数を定義する

rust primer 26

fn main() {

}

4. Rustの言語仕様

•基本データ型• bool : 論理型• char : Unicode Scalar Value• str : 文字列• i8~i64 : 符号あり整数• u8~u64 : 符号なし整数• f32~f64 : 単精度・倍精度浮動小数• isize : 符号ありポインターサイズ• usize : 符号なしポインターサイズ

rust primer 27

4. Rustの言語仕様

•変数宣言• letキーワードを使う

rust primer 28

let i = 1; // i32

let f = 2.3; // f64

let a: u8 = 0b00101000; // u8

let b: i16 = 0x123_456u16; // u16

let c: f32 = 456_789.1_f32; // f32

let s = "hoge"; // str

4. Rustの言語仕様

•変数宣言(続き)•変数はデフォルトでimmutableなので、可変(mutable)にしたい場合は「mut」を付ける。

rust primer 29

let mut i = 1; // i32

let mut f = 2.3; // f64

4. Rustの言語仕様

•複合データ型•配列

rust primer 30

let a = [1, 2, 3, 4];

let a1 = a[0];

let a2 = a[1];

let a4 = a[3];

4. Rustの言語仕様

•複合データ型•スライス

rust primer 31

let a = ['a', 'b', 'c', 'd', 'e', 'f'];

let mid = &a[1..4]; // 配列aの[1]~[3]

let all = &a[..]; // 配列a全部

4. Rustの言語仕様

•複合データ型• タプル

rust primer 32

let a = (1, "hoge", 3.141_516);

let t1 = a.0; // 1

let t2 = a.1; // "hoge"

let t3 = a.2; // 3.141_516

4. Rustの言語仕様

•複合データ型•構造体

rust primer 33

struct Point {

x: i32,

y: i32,

z: i32,

}

let mut pos = Point { x: 0, y: 0, z: 0 };

pos.z = 5;

pos = Point { y: 1, .. pos };

4. Rustの言語仕様

•関数

rust primer 34

fn no_return() {

println!("hello");

}

fn return_i32_value(a: i32, b: i32) -> i32 {

a + b // returnは書かない}

4. Rustの言語仕様

• if

rust primer 35

let x = 5;

if x == 5 {

println!("x is five!");

} else if x == 6 {

println!("x is six!");

} else {

println!("x is not five or six :(");

}

4. Rustの言語仕様

• forループ

rust primer 36

for x in 0..10 {

println!("{}", x); // x: i32

}

4. Rustの言語仕様

•whileループ

rust primer 37

let mut x = 5;

let mut done = false;

while !done {

x += x - 3;

println!("{}", x);

if x % 5 == 0 {

done = true;

}

}

4. Rustの言語仕様

•Match & Patterns

rust primer 38

let x = 1;

match x {

1 | 2 => println!("one or two"),

3 => println!("three"),

13..19 => println!("teenager"),

_ => println!("anything"),

}

4. Rustの言語仕様

•まだまだ沢山あって全部紹介しきれません•列挙型•スレッド•マクロ•エラーハンドリング•オーナーシップ & Borrowing•外部関数インターフェース•ジェネリックプログラミング•トレイト

rust primer 39