Skip to content

C# API #559

@qryxip

Description

@qryxip

内容

#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

その他

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions