未定义行为只是未探索的好 — Rust 官方团队指出:未知才是无限可能
2023-09-11 05:27:04
在编程的世界中,未定义行为 (Undefined Behavior,简称 UB) 常常被视为洪水猛兽,是程序员应该竭尽全力避免的陷阱。然而,Rust 官方团队 Ralf Jung 在 PL 观点 (PL Perspectives) 博客 上发表的一篇文章 《Undefined Behavior deserves a better reputation》中提出了一个大胆的观点:未定义行为并非一无是处,在某些情况下,它甚至可以带来意想不到的好处,推动程序语言的创新和发展。
Jung 在文章中首先澄清了 UB 的定义。他指出,UB 是指程序中那些无法被语言规范明确定义的行为。这可能包括访问越界数组、使用未初始化的变量、除以零等操作。当程序遇到 UB 时,可能会发生任何事情,包括程序崩溃、产生错误结果、或者继续执行但产生不可预测的行为。
Jung 认为,UB 之所以会带来好处,是因为它为程序员提供了更大的灵活性。当程序员遇到一个无法被语言规范明确定义的情况时,他们可以自由地选择如何处理。这可能会导致一些意想不到的后果,但也有可能带来一些创新性的解决方案。
例如,在 Rust 语言中,UB 可以被用来实现一些非常高效的算法。这些算法通常被称为 "unsafe" 代码,因为它们可能会导致 UB。然而,如果程序员能够正确地使用这些算法,那么它们可以极大地提高程序的性能。
Jung 还指出,UB 可以帮助程序员更好地理解计算机的工作原理。当程序员遇到 UB 时,他们必须深入研究语言规范和底层硬件的细节,才能理解程序为什么会发生这样的行为。这有助于程序员更好地理解计算机的本质,并写出更健壮、更可靠的代码。
当然,Jung 也承认,UB 也可能带来一些负面后果。例如,UB 可能会导致程序崩溃、产生错误结果、或者继续执行但产生不可预测的行为。这些后果可能会对程序员和用户造成很大的困扰。
因此,Jung 认为,程序员应该谨慎地使用 UB。在使用 UB 之前,程序员应该仔细权衡 UB 的利弊,并确保自己能够正确地使用 UB。
Jung 的文章一经发布,便引发了程序员社区的广泛热议。一些程序员同意 Jung 的观点,认为 UB 并非一无是处,在某些情况下,它甚至可以带来意想不到的好处。另一些程序员则对 Jung 的观点表示怀疑,他们认为 UB 是一种危险的工具,应该谨慎使用。
无论如何,Jung 的文章引发了程序员社区对 UB 的重新思考。这对于促进程序语言的发展和创新具有积极的意义。