-
Notifications
You must be signed in to change notification settings - Fork 126
Description
内容
#550 の一つとして、managedでsafeなC#のAPIをこのリポジトリから提供します。
Pros 良くなる点
- より大くの人に使って頂けることが期待できる
- 饅頭遣いさんも確かC#使いだったはず
- Unityでも直接利用することができるはず? (要調査)
Cons 悪くなる点
- メンテコスト
実現方法
私の知る限り、PyO3のようなツールは存在しません。なのでC APIをベースにcsbindgenを使うことになるかと思います。以前ちゅうこさんが0.14に対して試してくれていて、そのメモをZennのスクラップにまとめてくれています。
Rust版voicevox_coreのC# Bindingを作るために調べる
ただ今わかっている限りでも、手で書く部分はPyO3以上にはなると思います。またasyncも持って来れないでしょう。
以下の記事はcsbindgenのリリースと共に公開されたものです。そしておそらく、csbindgenのスタンスはこのときから変化していないように見えます。C#メインのコードベースに少量のRustコードを入れることが想定されており、Rustのextern "C"
からC#の[DllImport]
の生成のみ行います。
(余談ですが、safe codeとunsafe codeの境界に関する考えかたとかがRustacean(Rust書き)とは随分違うなと感じました。まあC#の一般的なスタンスではないんでしょうけど)
neue cc - csbindgen - C#のためのネイティブコード呼び出し自動生成、或いはC#からのネイティブコード呼び出しの現代的手法について
csbindgenが対応しているRustの書き方ですが、cbindgenと比べて限定されています(具体的にはBox
とかNonNull
を理解しません)。 C-unwindにも対応していないので、#541をやった日にはすべての関数を見失うでしょう。
(追記) extern "C-unwind"
にしても多分大丈夫...だけどいささか雑では...?
https://github.com/Cysharp/csbindgen/blob/ffea1be84670e2fd8568cfeb67308b8193979fd6/csbindgen/src/parser.rs#L59
そのためちゅうこさんが最初やったように、cbindgenで生成したヘッダーからbindgenでまたRustのコードを生成し、それを読む形になると思います。
まあ下手なことをしなければ、VOICEVOX/csbindgenの誕生は抑えられるとは思います。
VOICEVOXのバージョン
N/A
OSの種類/ディストリ/バージョン
- Windows
- macOS
- Linux