Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

FFIバインディングの提供 #550

Open
5 of 12 tasks
qryxip opened this issue Jul 27, 2023 · 2 comments
Open
5 of 12 tasks

FFIバインディングの提供 #550

qryxip opened this issue Jul 27, 2023 · 2 comments

Comments

@qryxip
Copy link
Member

qryxip commented Jul 27, 2023

内容

このリポジトリから、C以外のFFIバンディングを提供していきます。

Pros 良くなる点

  • より多くの人に使っていただけることが期待できる
  • ユーザー、特にCやC++やZigやRustといった言語に馴染みが無い方々が、C ABIに触らずにすむようになる

Cons 悪くなる点

  • メンテコスト

実現方法

VOICEVOXのバージョン

N/A

OSの種類/ディストリ/バージョン

  • Windows
  • macOS
  • Linux

その他

@Hiroshiba
Copy link
Member

issue作成ありがとうございます!!

どの言語を実装していくかですが、個人的には需要が大きそうなプログラミング言語を優先的にサポートしていきたい気持ちがあります!
あと僕たちが使う言語も率先的にサポートできると嬉しそう。
と思って並べ替えようかなと思ってみたんですが、 @qryxip さんの書いてくださっている順序と全く一緒でした!!!

@qryxip
Copy link
Member Author

qryxip commented Mar 31, 2024

Apache OpenDALという、参考になりそうなRust実装のプロジェクトがありました。

現在リリースされている言語対応は4種類で、どれも非同期に対応している、というより非同期がメインです(まあI/Oを扱うものですし)。class Operatorに対してその同期版がBlockingOperatorと呼ばれていたりします。

言語 同期 非同期 バインディング リリース先
Rust N/A crates.io
Java jni-rs Maven Central
Node.js NAPI-RS npm
Python PyO3 + pyo3-asyncio PyPI

また次の言語がWIPの状態だそうです。こちらでは逆にRust実装で言うBlockingOperatorOperatorと呼称していたりします。ただどうにかして非同期実装を提供できないか一応議論中なように見えます。

言語 同期 非同期 バインディング
C cbindgen
C++ CXX
.NET cdylibから手で (C APIは介さない)
Go cdylibから手で (C APIから)
Haskell cdylibから手で (C APIは介さない)
Lua mula
OCaml ocaml-rs
PHP ext-php-rs
Ruby Magnus
Swift cdylibから手で (C APIから)
Zig cdylibから手で (C APIから)

(ざっと調べた感じなので、抜け漏れがあるかも)

(追記) とりあえず私は次の二つをwatchしておきます。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants