如果一个 Rust 程序发生恐慌,并且假设没有恐慌捕捉器(有一段时间没有),那么不运行析构函数并让操作系统在进程之后清理肯定是安全和好的。为什么 Rust 会展开线程?
我能想到的唯一原因是当没有操作系统来回收内存时,但除了那个利基之外,它似乎没有必要。
如果一个 Rust 程序发生恐慌,并且假设没有恐慌捕捉器(有一段时间没有),那么不运行析构函数并让操作系统在进程之后清理肯定是安全和好的。为什么 Rust 会展开线程?
我能想到的唯一原因是当没有操作系统来回收内存时,但除了那个利基之外,它似乎没有必要。
您的问题中有一个错误的前提:它预先假定使用析构函数的唯一原因是清理当前进程的资源。
这确实是最常见的用法,但不是唯一的用法。
例如,我完全可以想象 TCP 连接的析构函数会尝试发送关闭消息:连接越快关闭,另一端的资源就越快释放。当然,这只是尽力而为(在中止/崩溃的情况下,析构函数永远不会运行),但它仍然是值得的。
如果 Rust 程序出现恐慌 [...],只需让操作系统在进程结束后进行清理。
当线程发生panic时,整个进程不需要退出。在这些情况下,最好运行析构函数。
在其他情况下,Drop
实现用于执行代码的某些关键部分的“回滚”。
假设没有恐慌捕手(有一段时间没有)
但是现在有,所以我不清楚你为什么提出它。