Rust/panicの実装
#Rust がpanic!をどうやって実装しているか調査 Implementation of panics via stack unwinding
..
//! 1. MSVC targets use SEH in the seh.rs file.
//! 2. Emscripten uses C++ exceptions in the emcc.rs file.
//! 3. All other targets use libunwind/libgcc in the gcc.rs file.
ベアメタルとかだとどうしようもないのでこれが使われる
intrinsics::abort() とは?
標準関数のうち、Rustレベルで実装できない(LLVMレベルで書くしかない/書いたほうがいい)ものがここにあると思われる
脱線した。
その下にlibunwindがあると。
getcontext(), setcontext()があればそれを使う
ない環境では自前で実装してたりする
SUSv2, POSIX.1-2001. POSIX.1-2008 では、移植性の問題から getcontext() の仕様が削除された。 代わりに、アプリケーションを POSIX スレッドを使って書き直すことが 推奨されている。
感想
幅広い環境に対応しててすごい。
see also
ところで
C-unwindで検索したらRustのRFCが出てきた。ありがたい