Skip to content

C-unwind ABIに切り替える #541

@qryxip

Description

@qryxip

内容

C APIのextern "C"を、Rust 1.71で使えるようになったextern "C-unwind"に置き換えます。

C-unwind ABI - Announcing Rust 1.71.0 - Rust Blog

これにより、C APIも #505 のようにできることが期待できます。

Pros 良くなる点

  • C APIでパニックが発生した場合も、プロセスの強制終了とならずにFFIの呼び出し側でキャッチできる? (未調査)
    • というより extern "C"からパニックを送出しようとする行為がそもそもUBらしく、プロセスの強制終了も実は保証されている動作ではなかったらしい?
      (追記) Rustのパニックを出したときの挙動は保証されていて、コールバックからC++の例外とかが発射されたときがUBだったらしい (例えpanic=abortであっても)
      panic runtime ABI panic-unwind Unforced foreign unwind
      panic=unwind "C-unwind" unwind unwind
      panic=unwind "C"-like abort UB
      panic=abort "C-unwind" panic! aborts abort
      panic=abort "C"-like panic! aborts (no unwinding occurs) UB
      2945-c-unwind-abi - The Rust RFC Book

Cons 悪くなる点

実現方法

sed -i 's/extern "C"/extern "C-unwind"/' ./crates/voicevox_core_c_api/src/lib.rs && cargo fmt
diff --git a/.github/workflows/build_and_deploy.yml b/.github/workflows/build_and_deploy.yml
index cbb3ab2..4408fe6 100644
--- a/.github/workflows/build_and_deploy.yml
+++ b/.github/workflows/build_and_deploy.yml
@@ -205,7 +205,6 @@ jobs:
             build > /dev/null 2>&1
           fi
         env:
-          RUSTFLAGS: -C panic=abort
           ORT_USE_CUDA: ${{ matrix.use_cuda }}
       - name: build voicevox_core_python_api
         if: matrix.whl_local_version

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