Slide 1

Slide 1 text

2020/12/05 Japan.R 2020 @yutannihilation

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

今日はカニの話をします

Slide 4

Slide 4 text

今日はカニの話をします

Slide 5

Slide 5 text

今日はカニの話をします

Slide 6

Slide 6 text

今日はカニの話をします

Slide 7

Slide 7 text

こっちのカニです

Slide 8

Slide 8 text

非公式Rustマスコット Ferris

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

extendr

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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