Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
内容
Python APIを
panic=unwind
でビルドすることにより、ユーザー環境で万が一パニックが発生した際の挙動を「プロセスのabort」ではなく「例外の発生」に変えます。C APIおよびPython APIでは現在(#218 によって)パニック発生時の動作がデフォルトの
panic=unwind
からpanic=abort
、すなわち「問答無用でのプロセスの強制終了」となっています。提供するのがC APIのみならこれはバイナリサイズ縮小の効果しかありませんでした。なぜならパニックはそもそも
extern "C"
の境界を越えられないからです(リンク先のextern "C-unwind"
はまだnightly-onlyです)。(なのでsh1ma/voicevoxcore.go#5のようなことはおそらく不可能です)
しかしPyO3であれば話は別です。PyO3はRustのパニックを
pyo3_runtime.PanicException
というC Pythonの例外に変換してくれます。例外はCPythonのAPIを通じて外に出るため、DLLの壁を越えることができます。panic=abort
:panic=unwind
:バイナリサイズの微妙な減少と例外への変換を比べたとき、ユーザーにとってどちらが望ましいかですが、個人的には後者だと思っています。
panic=abort
を指定するのをやめるpanic=abort
でビルドされるようにする関連 Issue
なし
その他