$30 off During Our Annual Pro Sale. View Details »

🦀

 🦀

Japan.R 2020での発表です。

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

yutannihilation

December 05, 2020
Tweet

More Decks by yutannihilation

Other Decks in Programming

Transcript


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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  7. こっちのカニです

    View Slide

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

    View Slide

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

    View Slide

  10. extendr

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  17. extendrの使い方
    ※絶賛開発中なので参考までに

    View Slide

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

    View Slide

  19. 2. extendrのマクロをつける
    #[extendr]
    fn hello() -> &'static str {
    "hello"
    }
    wrap__関数名 というCの関数が自動で生成される

    View Slide

  20. 3. Cに生成された関数を書く
    void wrap__hello();
    void *dummy = (void*) &wrap__hello;
    リンカに勝手に消されるのを防ぐため、とのこと
    ここはそのうちextendrが勝手にやってくれそう

    View Slide

  21. 4. Rから.Call()で呼び出す
    hello <- function() {
    .Call("wrap__hello")
    }

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  25. 参考
    ● extendr
    https://github.com/extendr
    ● Using Rust code in R packages
    https://jeroen.github.io/erum2018/
    ● https://github.com/clauswilke/helloexten
    dr/

    View Slide