最近仕事でRustも書いているので、LT会行ってみようということでRust LT #2 〜いま使う!Rust〜に参加枠で参加しました。記念にブログを書きます。 トーク2本とLT5本と、盛りだくさんな内容でした。
会場
主催のどらやき(@dorayaki_kun)さんさんの勤務先であるNAVITIMEさんのオープンセミナールーム。
ステージめっちゃきれい。椅子めっちゃ座り心地いい。あのおじさんのお茶はめっちゃお茶。
当日ハッシュタグは#rust_jpです。
Rustを支えるインタープリター: qnighyさん
Masaki Hara(@qnighy)さんのスライドはInterpreters in Rust compiler - Speaker Deckで公開されています。
コンパイラ内にはインタープリターが棲んでいる。
コンパイラ・インタープリターの知識が絶望的に不足していてほぼ理解できていないです。
miri: MIRインタープリター
- MIRというLLVM用の中間言語に変換する直前の中間表現をRust Abstract Machineで動かす
- miriは参照がコンパイル時に評価できて嬉しい
- miriでは実行できてもCTFE(コンパイル時間数評価)では禁止される操作がある(∵非決定的な操作を許可すると未定義動作になりうる)
Chalk: トレイトロジックソルバー
- rust-lang-nursery/chalk: A PROLOG-ish interpreter written in Rust, intended eventually for use in the compiler
- トレイト解決のためのProlog風ソルバー
- コンパイラから機能を切り出すことで責務が分割され、改修しやすくなるはず(「少なくとも彼はそういっています」という表現好きでした)
Rust の安全性を数学的に証明する 〜最新の研究から学ぶ形式手法と Rust の基礎〜
RustBeltというRustの安全性をCoqを使って証明するプロジェクトの論文紹介。 正直記号をいい感じに処理していくといい感じのことが示せるのね????という感じでした。(無学で申し訳ない。)
RustBeltについて軽めに知りたい人はRalf Jung氏のブログを読むのがオススメです。 https://t.co/xH8hQguiYU
— Masaki Hara (@qnighy) 2018年8月1日
#rust_jp
Rustの安全性を証明する際に難しいポイント
- リソースが複製できない
- substructual typying(型を消費して型を作る)で表現する
- ライブラリで後から拡張できるように示したい
- ライブラリを使わない閉じた系であれば文法的に安全であることが証明できる?
- 意味論の世界であればunsafeを使っても示せる?
証明の流れ
- unsafeが扱える簡単な言語を作る
- 簡単な言語のサブセットの言語でRustを表現する(継続を使うと安全にgotoがかける)
- サブセットの言語に型をつけていく
- 高階分離論理(マルチスレッド向けのホーア論理的な)という「ごつい論理でなんとかする」
論文の新規性はlife timeに関する推論をしたこと。
ここからはLT。
lopdfの話: skojiさん
Satoshi Kojima(@skoji)さんのJ-F-Liu/lopdf: A Rust library for PDF document manipulation.を実務で使った話。 プロダクトはVersaType|イースト株式会社でHTML/CSSからPDFに変換する版組システムようです。
prawnなら簡単だけどlopdfは低レイヤーまで触れてよいという内容でした。貴重な実務ネタありがとうございます。 スライドはlopdfの話 - Speaker Deckで公開されています。
発表時に使ったPDFはlopdfで作られているらしく、めっちゃかっけ!と思いました。
Rust でクロスコンパイルして Raspberry Pi Zero W で動かす: legokichiさん
legokichiさんのRust でクロスコンパイルして Raspberry Pi Zero W で動かす。 legokichiさんは普段Rustでサーバーサイド書いてる人らしい。 Rustはどこでも動くのでIoTと相性がいいらしい。
ターゲットトリプル
これ、ターゲットトリプルっていうんだ……という学び
- コンパイルで必要なシステムを表す
{arch}-{vendor}-{sys}-{abi}
- ターゲットトリプルの例
- x86_64-pc-windows-msvc
- x86_64-apple-darwin
- x86_64-unknown-linux-gnu
インタプリタを作ってまなぶRustらしい書き方: yuki toyodaさん
yuki(@helloyuk13)さんのインタプリタを作ってまなぶ Rust らしい書き方 - Speaker Deck。 Rustで抽象構文木を簡約するインタープリターを作った話でした。詳細は御本人の記事を待ちましょう。
インタプリタの説明とならびにその実装の詳細の解説は5分では無理だったので記事にします
— yuki (@helloyuk13) 2018年8月1日
ソースコードはyuk1ty/simple-interpreter-rsです。
Rust 2018とは?〜安定した進化の真の意味〜: Pyry Kontioさん
Pypy(@GolDDranks)さんのRust 2018の話。 資料はRust 2018とは? 〜安定した進化の真の意味〜 - Speaker Deck。
Rust 2018のコンセプトを翻訳していただいて非常にありがたい。
Rust 2018はRust 2015と互換性があって、cargo fix
ってするとコードが自動で統合されたりするらしい。つまり併用できるってことらしい。すげえ。
コンパイラの更新をさりげなく
それってどういう思想なのって言うと
- バージョン上げてもコードが壊れてほしくない
- 新機能をエコシステムで導入できる
- みんな最新バージョンを使っている状態にしたい
1.5月毎にリリースがある
- 新機能開発が次のバージョンに間に合わなくても、更に次のバージョンに乗せられるので、継続的に開発できる
シンタックスだけ変える?⇒Rust2018
- Cargo.tomlでedition='2018'
- Rust 2015と100%互換
この場で使う!Rust 〜アルゴリズムの実装を通して感じる使いやすさ〜: kenkooooさん
宇宙ツイッタラーX(@kenkoooo)さんはAtCoderの身体バランスをライブコーディング。
Dijkstra法の実装がサンプルコードになっている⇒コピペで使える。
発表慣れてる感+実装慣れてる感満載でした。
まとめ
今回のイベントは普段意識できていない理論的なトークから、ライブラリの紹介・コンセプトの紹介といったカジュアルなLTまでいろいろな話が聞けて、すごく刺激になりました。 もう少し深いところまで手を広げて勉強できるようにしながら、業務で得た知識を近い内にPublishできるといいなと思います。
会場を提供していただいたNAVITIME様、主催のどらやき(@dorayaki_kun)さん様ありがとうございました!
宣伝
弊社でも一部Rustを使っていて、Rustで検索エンジンを開発するフォルシア株式会社のSummer Internship 2018としてサマーインターンを募集しています。 興味のある方はぜひご応募ください。(サマーインターンの企画者の一人として頑張ってるので、露骨な宣伝ですが大目に見ていただけると)
次回のイベントRustのLT会! Rust入門者の集い #5は2018/08/08(水) 12:00から募集開始だそうです。