Upgrade to Pro — share decks privately, control downloads, hide ads and more …

🦀

 🦀

Japan.R 2020での発表です。

extendr: https://github.com/extendr/
YouTube 録画: https://www.youtube.com/watch?v=yp5faIkXt64

C95cdabc569dc4c7750d776687f66037?s=128

yutannihilation

December 05, 2020
Tweet

Transcript

  1. 2020/12/05 Japan.R 2020 @yutannihilation

  2. ドーモ! • @yutannihilation • 某メッセージングアプ リの会社でデータサイ エンティスト見習い • 好きな言語: R、Rust、忍殺語

  3. 今日はカニの話をします

  4. 今日はカニの話をします

  5. 今日はカニの話をします

  6. 今日はカニの話をします

  7. こっちのカニです

  8. 非公式Rustマスコット Ferris

  9. Rustとは • メモリ管理が安全 • 速い • 並行処理に優れている … みたいな話はググってください

  10. extendr

  11. extendr • RからRustを使えるようにするフレーム ワーク • C++に対してRcppがあるのと同じような 位置づけ • (RustからRを使うこともできる)

  12. なぜRからRustを 使いたいのか?

  13. 理由その1: 時代はジェンダー ニュートラルな表現を求めている

  14. 理由その1: 時代はジェンダー ニュートラルな表現を求めている • Rustを使う人は「Rustacean」 • この圧倒的かっこよさよ...

  15. 理由その2: ツールチェーンがOSに依存しない • 組み込みのパッケージマネージャ cargo • GCCのバージョンの違いでコケるみたい なことがない • コンパイル済みバイナリの配布も簡単

  16. 理由その3: Rustのエコシステムに乗っかれる • Gamedev系が発達している(行列計算、 3D、物理シミュレーションなど) • その他は謎... • Rust-Bio っていうのもあるのでバイオ系

    の人の感想を聞きたい
  17. extendrの使い方 ※絶賛開発中なので参考までに

  18. 1. Rustの関数を書く fn hello() -> &'static str { "hello" }

  19. 2. extendrのマクロをつける #[extendr] fn hello() -> &'static str { "hello"

    } wrap__関数名 というCの関数が自動で生成される
  20. 3. Cに生成された関数を書く void wrap__hello(); void *dummy = (void*) &wrap__hello; リンカに勝手に消されるのを防ぐため、とのこと

    ここはそのうちextendrが勝手にやってくれそう
  21. 4. Rから.Call()で呼び出す hello <- function() { .Call("wrap__hello") }

  22. その他 • 単一の文字列や数値などは勝手に変換し てくれる • ベクトルや構造体などは Robj という型に 明示的に変換が必要 •

    エラー処理については不明
  23. その他 • バインディングはbindgenというツール で自動生成しているので、Cの関数をほぼ そのままRust側で使える(Rf_...みたい なやつ)

  24. まとめ • この冬、RustをはじめてRustaceanを名 乗ってライバルに差をつけよう • RからRustを使うための仕組みextendr が絶賛開発中

  25. 参考 • extendr https://github.com/extendr • Using Rust code in R

    packages https://jeroen.github.io/erum2018/ • https://github.com/clauswilke/helloexten dr/