将来,托管运行时是否会提供额外的保护,以防止微妙的数据损坏问题?
托管运行时(如Java和Java)减少或消除了许多在本地语言(如.NET )中常见的内存损坏bug的可能性。然而,令人惊讶的是,他们并不能幸免于所有的内存损坏问题。一个直觉地期望验证其输入的方法没有错误,并且健壮地处理异常总是将其对象从一种有效状态转换为另一种状态,但事实并非如此。(更准确的说法是,使用流行的编程约定的情况并非如此-对象实现者需要不顾一切地避免我描述的问题。)
考虑以下情况:
对于所有这些情况,可以认为彻底的文档是一种解决方案。但是,文档还可以规定如何在非托管语言中分配和释放内存。我们从经验(例如,内存分配)中了解到,文档和语言/运行时强制执行之间的区别是日夜的。
在未来的语言和运行时,我们能期望什么来保护我们免受这些问题和其他类似的微妙问题的影响呢?
发布于 2009-10-16 23:07:03
发布于 2009-10-16 23:10:41
发布于 2009-10-18 01:09:43
首先,“管理”是一个错误的名称:像OCaml、Haskell和SML这样的语言在完全编译时实现了这样的保护和安全。所有相关的“管理”发生在编译时通过静态分析,这有助于优化和速度。
无论如何,要回答您的问题:如果您查看像Erlang和Haskell这样的语言,默认情况下状态是孤立的和不可变的。在某种系统中,线程和重入在默认情况下是安全的,而且由于您必须尽自己的努力打破这些规则,因此很明显可以看到哪里会出现不安全的代码。
从安全的缺省值开始,但为高级不安全的使用留出空间,您就可以充分利用这两个世界。根据您的定义,安全的未来系统可能也会遵循这些实践,这似乎是合理的。
https://stackoverflow.com/questions/1580815
复制相似问题