rust primer
Post on 30-Jul-2015
1.513 views
TRANSCRIPT
ジコ、ショウカイ。
• H/N: You&I(読み:ユーアンドアイ)
• SNS: @you_and_i
•出身: 生まれも育ちも名古屋市
•年齢: 30代後半
•本職: 商学部出身の職業プログラマ
•言語: C++, C#他
•所属: プログラミング生放送勉強会名古屋支部長
名古屋アジャイル勉強会
わんくま同盟名古屋勉強会
2rust 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
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つのゴールを以下により維持します•ガベコレなし
•他の言語が不得意とする以下のユースケースを数多く持つ、使いやすい言語に作り上げる•他のプログラミング言語や特定の領域と時間を要求するプログラムの埋め込み
• デバイスドライバーやOSのようなLow-Levelなコードの記述
rust primer 9
1. Rustとは
•Rustは、以下のマルチパラダイムをサポートしたコンパイル型言語です。•純関数型プログラミング•アクターモデル(並行計算モデル)•手続き型プログラミング•オブジェクト指向プログラミング
rust primer 10
※詳細は各自でbingってクレメンス・・・
1. Rustとは
•Rustの特徴• コストゼロな抽象化•ムーブセマンティスク• メモリ安全保障•データ競合のないスレッド•トレイトを基盤としたジェネリックプログラミング•パターンマッチ•型インターフェース• ランタイムサイズの最小化•効率的なC言語バインディング
rust primer 11
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 21
$ cd some_dir
$ cargo new project_name --bin
$ cargo build --release -j 4
$ cargo run --release
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の言語仕様
•基本データ型• 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の言語仕様
•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"),
}