Autocxx -RustからC++を安全かつ楽に-

C61a5036d6b7b0529dcac43b411ead62?s=47 minami
September 02, 2020

Autocxx -RustからC++を安全かつ楽に-

下町.rs #3

C61a5036d6b7b0529dcac43b411ead62?s=128

minami

September 02, 2020
Tweet

Transcript

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

  2. 自己紹介 • 岡南 直哉 (@vinami) • LayerX Labs リサーチャー ◦

    ブロックチェーンのスケーラビリティ、 特にシャーディング • 未踏2020で『Shargri-La』開発中 ◦ シャーディングプロトコル開発を支援 するソフトウェア ◦ Rustです 2
  3. Autocxxとは? 3

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

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

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

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

  8. 仕組み 8

  9. 三段階の Procedural macro 仕組み 9 1. bindgen でバインディングを生成 2. それを解釈し

    cxx::bridge に適したバインディングへ変換 3. cxx::bridge を実行
  10. 1. bindgen でバインディングを生成 仕組み 10 • bindgen (https://github.com/rust-lang/rust-bindgen) ◦ C(C++)のヘッダファイルからRust

    FFIバインディングを自動 的に生成してくれるツール
  11. 2. cxx::bridge に適したバインディングへ変換 仕組み 11 • CXX (https://github.com/dtolnay/cxx) ◦ RustからC++をunsafeなしに呼び出せるツール

    ◦ C++からRustも可能
  12. 開発状況 12

  13. 対応済み 開発状況 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
  14. 未対応 開発状況 14 • std::unique_ptr of opaque types • Methods

    • #defines • Constants • Enums • Structs containing UniquePtr • Structs containing strings • make_unique
  15. RustからC++を呼ぶ重要性 15

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

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

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

  19. まとめ 19

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