SSブログ

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
コメント(0) 
共通テーマ:日記・雑感

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

Facebook コメント