为什么析构函数 运行 发生恐慌时?

Why do destructors run when a panic occurs?

如果 Rust 程序发生恐慌,并且假设没有恐慌捕捉器(有一段时间没有),那么不 运行 析构函数并让 OS 处理后清理。为什么 Rust 展开线程?

我能想到的唯一原因是没有OS回收内存,但除了那个利基,似乎没有必要。

你的问题有一个错误的前提:它预先假设使用析构函数的唯一原因是清理当前进程的资源。

这确实是最常见的用法,但不是唯一的用法。

例如,我完全可以想象 TCP 连接的析构函数会尝试发送关闭消息:尽快关闭连接,另一端也会尽快释放资源。当然,这只是尽力而为(在 abort/crash 的情况下,析构函数永远不会 运行),但它仍然是值得的。

If a Rust program panics [...] just let the OS clean up after the process.

一个线程发生panic时,整个进程不需要退出。在这些情况下,最好运行析构函数。

在其他情况下,Drop 实现用于执行某些关键代码部分的 "rollback"。

assuming there are no panic catchers (which for a while there wasn't)

但是now there are,所以我不明白你为什么要提出来。