Rustのこれまでとこれから
Rustこれまでとこれから
About Me
- κeen
- ちゅーんさんだよー
- @blackenedgold
- Github: KeenS
- Idein Inc.のエンジニア
- Rustで開発してるよ
- Lisp, ML, Rust, Shell Scriptあたりを書きます
今日話すこと
- X Rustの勉強法
- X Rust言語の紹介
- O Rustの歩み
- O Rustの開発体制
Rustとは
- システムプログラミング言語
- 安定性、信頼性が売り
- 2015年に1.0リリース
いつまで20年ものの言語使ってるの
- 大体の便利な言語機能を取り入れてる
- 所有権システムにより GCがない
- コンパイラが
free
を自動挿入
- コンパイラが
// ジェネリクス+トレイト境界
// move セマンティクス
fn dup<T: Clone>(t: T) -> (T, T) {
// タプルあるよ
(t.clone(), t)
}
fn main() {
// マクロ
let vec = vec![1, 2, 3];
// パターンマッチで分配束縛
let (v1, v2) = dup(vec);
// 雑にデータ型を印字できる
println!("v1: {:?}, v2: {:?}", v1, v2);
// `v1`, `v2`はコンパイラが勝手にfreeしてくれる
// (`vec`はmoveしてるのでそもそも関係ない)
}
特徴
- エルゴノミクスに拘った設計
- explicitな言語
- 後方互換を大事に
- SemVerベースの管理
- バージョンアップでコードが壊れることは殆ど無い
- 学習難易度は高め
学習難易度
- 難しい(直球)
- 悪い難しさではない
- プログラミング本来の難しさ
- その代わり学習補助が手厚い
- エラーメッセージが親切
- 公式ドキュメントがよく出来てる
ドキュメント文化
- The Rust Programming Languageがよく出来てる
- 他にもRust by Example、Rustnomicon、The Unstable Bookなどなど
- 全クレート(ライブラリ)のドキュメントもある
- This Week in Rustなどのニュースレター
日本
- ドキュメントの和訳とか頑張ってる
- Slackコミュニティ
- 勉強会
- 初心者向けハンズオンなども
- などなど
Rustの開発体制
意思決定とか
- サーベイしてデータドリブンで注力領域を決めてる
- Survey 2017
- 2018もやってる(和訳もあるよ)
- サーベイの結果Domain Working Groupが発足
- WGのミーティングなども公開されてる
- GitHub
- 徹底的にオープンだよね。
4つのWorking Groupとその目標
最近の話題
- SIMD Intrinsic
- メモリアロケータが選択可能に
- 非同期
- futureやasync/awaitなど
- Generic Associated Type
- Chalkプロジェクト
- 雑にいうとProlog処理系をコンパイル時に動かす
- Compile Time Function Execution
- Miriプロジェクト
- 雑に言うとRustインタプリタをコンパイル時に動かす
SIMD
#[cfg(all(any(target_arch = "x86", target_arch = "x86_64"),
target_feature = "avx2"))]
fn foo() {
#[cfg(target_arch = "x86")]
use std::arch::x86::_mm256_add_epi64;
#[cfg(target_arch = "x86_64")]
use std::arch::x86_64::_mm256_add_epi64;
unsafe {
_mm256_add_epi64(...);
}
}
メモリアロケータ
use std::alloc::System;
#[global_allocator]
static GLOBAL: System = System;
fn main() {
let mut v = Vec::new();
// This will allocate memory using the system allocator.
v.push(1);
}
Rustのこれから
Rust 2018 Edition
Rust 2018
- 言語に非互換アップデート入るよ
- キーワードの追加とか
- 今までのを2015、新しいのを2018と呼ぶ
- Rust 2015: stability
- Rust 2018: productivity
- 3年に1度更新される
- 互換性はないけど相互運用性はある
- コンパイラは2015と2018同時サポート
- 2015と2018は混ぜて使える
- さらに移行ツールも提供されてる
変わるところ
- 新規構文
async
/await
try
- ライフタイムの省略や自動推論などの強化
- 2015も継続して改善される
- 急に大きく変わる訳ではない
- 2018の機能が既に入っているものも
- いままでの変更のまとめ的な意味もある
- edition guideで2015(1.0.0)との差分が見れる
まとめ
- Rustは新しい言語だよ
- Rustはオープンな開発体制をしてるよ
- アウトリーチの努力がすごいよ
- 今も継続的に改善されてるよ
1
Rustこれまでとこれから
Learn Languages 2018 in ODC (LL2018)