我经常看到有人声称编程语言功能可以消除一整类错误。
例如,我见过这样的说法:
强类型系统可以消除因使用类型不支持的功能而导致的错误。
自动内存管理消除了与为对象/结构分配正确内存量相关的错误。
强制变量初始化可以消除空指针或空引用错误。
不可变数据结构消除了因不了解更改可变状态的影响而导致的错误。
我并不是想找出上述说法是否属实,而是编制了一份此类声明的列表,这些声明足够具体,足以让我研究和评估自己。
还有哪些其他具体功能据称可以消除一整类错误?
是否存在识别具有此功能的功能或识别不存在此类功能的一般原则或理论?
(请注意,我不包含此类明显模糊或主观的主张,无论真实与否:
面向对象的编程提高了可重用性。
动态语言的编程速度更快。
有意义的空格使程序更加简洁。 )
最佳答案
不变性
并发
不变性减少了并发系统中的所有共享数据问题。并发和缓存是最难正确处理的两个问题,大多数人在尝试编写任一类型的代码的前几十次都会出错。
副作用
不变性也使得代码具有确定性,函数的输入在函数范围内永远不会改变,无论是在函数内部还是在函数外部,这意味着没有副作用。
非空值
大多数支持不变性作为唯一变量类型的系统也没有 Null
的概念,要么引用被分配,要么不分配,如果它们不是编译器提示的,你必须修复它。
在 Java 中,对参数和返回值自由使用 final
引用和 @Nonnull
注释消除了几乎所有非基于逻辑的错误或按原样显示它们在编译时或运行时的早期
关于language-agnostic - 哪些语言功能可以消除一整类错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22039593/