Elixir から、形態素解析器 awabi を呼ぶ [awabi]
PyO3 で Rust のコードを Python から簡単に呼び出せたけど
https://nakagami.blog.ss-blog.jp/2020-03-21
https://nakagami.blog.ss-blog.jp/2020-07-08-1
https://nakagami.blog.ss-blog.jp/2020-07-11
・・・そう言えば、同じように Rust のコードを簡単に Elixir の NIF にして
呼べるようなのがあったんじゃなかったっけ?と思って、探した.
Rustler っていうのがそれらしい
https://github.com/rusterlium/rustler
これを参考にして・・・
Writing Rust NIFs for Elixir With Rustler
https://simplabs.com/blog/2020/06/25/writing-rust-nifs-for-elixir-with-rustler/
- mix new exawabi
- {:rustler, "~> 0.22-rc"} を mix.exs の deps に加える
- mix deps.get
- mix rustler.new
・・・を実行して, mix rustler.new の中で聞かれる問いに
Module name に「ExAwabi」
Library name に「awabi_nif」
を指定して、できたファイルに、色々修正してできたのがこれ
- https://github.com/nakagami/exawabi
- https://hex.pm/packages/exawabi
・・・と、簡単には書いているが、途中、色々試行錯誤してしまった。
上の記事では、 mix.exs の修正についての説明がないが、 Rustler 向けの記述をいくつか追加した。
https://github.com/nakagami/exawabi/blob/master/mix.exs
の compilers とか、 rustler_crates のあたり。
Elixir の該当コードを見ると https://github.com/nakagami/exawabi/blob/master/lib/exawabi.ex
エラー関数を呼んでいるよには見えるけど、 Rust の関数を呼んでいるように見えなくて、
なんか、よくわかんないけど、マクロすごい・・・と思っているところ。
Elixir だと、関数として実装しないといけないので(クラスとかメソッドの形で Elixir にExportできないので)制限はあるけど、簡単に NIF が作れるというのは本当だなと思った。
C で NIF 作る気はしないけど、Rust でならできそう。
・・・で、できたもの
https://hexdocs.pm/exawabi/ExAwabi.html
https://github.com/nakagami/exawabi
https://nakagami.blog.ss-blog.jp/2020-03-21
https://nakagami.blog.ss-blog.jp/2020-07-08-1
https://nakagami.blog.ss-blog.jp/2020-07-11
・・・そう言えば、同じように Rust のコードを簡単に Elixir の NIF にして
呼べるようなのがあったんじゃなかったっけ?と思って、探した.
Rustler っていうのがそれらしい
https://github.com/rusterlium/rustler
これを参考にして・・・
Writing Rust NIFs for Elixir With Rustler
https://simplabs.com/blog/2020/06/25/writing-rust-nifs-for-elixir-with-rustler/
- mix new exawabi
- {:rustler, "~> 0.22-rc"} を mix.exs の deps に加える
- mix deps.get
- mix rustler.new
・・・を実行して, mix rustler.new の中で聞かれる問いに
Module name に「ExAwabi」
Library name に「awabi_nif」
を指定して、できたファイルに、色々修正してできたのがこれ
- https://github.com/nakagami/exawabi
- https://hex.pm/packages/exawabi
・・・と、簡単には書いているが、途中、色々試行錯誤してしまった。
上の記事では、 mix.exs の修正についての説明がないが、 Rustler 向けの記述をいくつか追加した。
https://github.com/nakagami/exawabi/blob/master/mix.exs
の compilers とか、 rustler_crates のあたり。
Elixir の該当コードを見ると https://github.com/nakagami/exawabi/blob/master/lib/exawabi.ex
エラー関数を呼んでいるよには見えるけど、 Rust の関数を呼んでいるように見えなくて、
なんか、よくわかんないけど、マクロすごい・・・と思っているところ。
Elixir だと、関数として実装しないといけないので(クラスとかメソッドの形で Elixir にExportできないので)制限はあるけど、簡単に NIF が作れるというのは本当だなと思った。
C で NIF 作る気はしないけど、Rust でならできそう。
・・・で、できたもの
https://hexdocs.pm/exawabi/ExAwabi.html
https://github.com/nakagami/exawabi
コメント 0