-
Notifications
You must be signed in to change notification settings - Fork 126
Open
Description
内容
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
-unwindUnforced foreign unwind panic=unwind
"C-unwind"
unwind unwind panic=unwind
"C"
-likeabort UB panic=abort
"C-unwind"
panic!
abortsabort panic=abort
"C"
-likepanic!
aborts (no unwinding occurs)UB
- というより
Cons 悪くなる点
- release buildのサイズが小さくなるようにした #218 の効果が若干薄くなる
実現方法
❯ 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