Slide 1

Slide 1 text

Autocxx - RustからC++を安全かつ楽に - minaminao @vinami - 下町.rs #3 1

Slide 2

Slide 2 text

自己紹介 ● 岡南 直哉 (@vinami) ● LayerX Labs リサーチャー ○ ブロックチェーンのスケーラビリティ、 特にシャーディング ● 未踏2020で『Shargri-La』開発中 ○ シャーディングプロトコル開発を支援 するソフトウェア ○ Rustです 2

Slide 3

Slide 3 text

Autocxxとは? 3

Slide 4

Slide 4 text

4 RustからC++を安全かつ楽に呼ぶツール https://github.com/google/autocxx

Slide 5

Slide 5 text

とりあえず試してみる(定義側) Autocxxとは? 5 再帰で階乗

Slide 6

Slide 6 text

とりあえず試してみる(呼び出し側) Autocxxとは? 6

Slide 7

Slide 7 text

とりあえず試してみる(実行) Autocxxとは? 7 できた!簡単 Source: https://github.com/minaminao/autocxx/tree/shitamachi/demo

Slide 8

Slide 8 text

仕組み 8

Slide 9

Slide 9 text

三段階の Procedural macro 仕組み 9 1. bindgen でバインディングを生成 2. それを解釈し cxx::bridge に適したバインディングへ変換 3. cxx::bridge を実行

Slide 10

Slide 10 text

1. bindgen でバインディングを生成 仕組み 10 ● bindgen (https://github.com/rust-lang/rust-bindgen) ○ C(C++)のヘッダファイルからRust FFIバインディングを自動 的に生成してくれるツール

Slide 11

Slide 11 text

2. cxx::bridge に適したバインディングへ変換 仕組み 11 ● CXX (https://github.com/dtolnay/cxx) ○ RustからC++をunsafeなしに呼び出せるツール ○ C++からRustも可能

Slide 12

Slide 12 text

開発状況 12

Slide 13

Slide 13 text

対応済み 開発状況 13 ● Primitives (u8, etc.) ● Plain-old-data structs ● std::unique_ptr of POD ● std::unique_ptr of std::string ● Reference to POD ● Reference to std::string

Slide 14

Slide 14 text

未対応 開発状況 14 ● std::unique_ptr of opaque types ● Methods ● #defines ● Constants ● Enums ● Structs containing UniquePtr ● Structs containing strings ● make_unique

Slide 15

Slide 15 text

RustからC++を呼ぶ重要性 15

Slide 16

Slide 16 text

例: Chromium RustからC++を呼ぶ重要性 16 ● 2015年度以降のインパクト高のバグの内訳 https://www.chromium.org/Home/chromium-security/memory-safety

Slide 17

Slide 17 text

例: Chromium RustからC++を呼ぶ重要性 17 https://www.chromium.org/Home/chromium-security/memory-safety/rust-and-c-interoperability

Slide 18

Slide 18 text

例: Chromium RustからC++を呼ぶ重要性 18 ● ChromiumのコアはC++ ● RustからC++の呼び出しが重要視されている https://www.chromium.org/Home/chromium-security/memory-safety

Slide 19

Slide 19 text

まとめ 19

Slide 20

Slide 20 text

20 ● AutocxxはRustからC++を安全かつ楽に呼ぶツール ○ 絶賛開発中 ○ C++ベースのプロジェクトは、RustからC++を呼ぶ機能を 求めており、注目されている まとめ