我想知道是否有可能在没有显式内存分配/释放(如C,C ++ ......)和没有垃圾收集(如Java,C#...)的情况下创建编程语言,方法是在每个范围的结束?
显而易见的问题是,这需要一些时间在每个范围的末尾,但我想知道它是否已经变得可行,具有当前CPU中的所有处理能力和多个核心。这样的语言已经存在吗?
我也想知道C ++的一个变体,其中智能指针是唯一可以使用的指针,就是这样一种语言(或者我错过了一些问题吗?)。
编辑: 经过一些更多的研究显然是这样的:http://en.wikipedia.org/wiki/Reference_counting 我想知道为什么这不是更受欢迎。那里列出的缺点似乎并不严重,根据我的说法,开销应该很大。 A(非解释,从头开始正确编写)语言与C系列语法和引用计数似乎对我来说是一个好主意。
答案 0 :(得分:0)
你所谈论的并不是什么特别的事情,而且它一直在出现。您正在寻找的C或C ++变体只是简单的常规C或C ++。
例如,正常编写程序,但限制自己不要使用任何动态内存分配(没有新的,删除,malloc或免费,或他们的任何朋友,并确保你的库做同样的事情),然后你有那种制度。你事先弄清楚你可以做的事情需要多少内存,并静态地声明内存(函数级静态变量或全局变量)。编译器以正常方式处理所有会计,在每个范围的末尾没有任何特殊情况发生,并且不需要额外的计算。
您甚至可以将运行时环境配置为具有静态分配的堆栈空间(此实际上不受编译器控制,更多链接器和操作系统环境)。只需弄清楚函数调用链的深度,以及它使用了多少内存(使用分析器或类似工具),在链接选项中设置它。
如果没有动态内存分配(因此不通过垃圾收集或显式管理进行解除分配),则只限于编写程序时声明的内存。但没关系,许多程序不需要动态内存,并且已经以这种方式编写。当您绝对需要准确了解操作需要多长时间,将使用多少内存(和其他资源)以及运行时间和使用时,实际需要在嵌入式和实时系统中显示出来。这些资源无法改变。
C和C ++的优点在于语言对环境的要求很少,并且为您提供了如此多的工具,智能指针或静态分配的内存,甚至是您梦寐以求的特殊方案。实现。要求使用它们,以及您对自己施加的限制只会成为一项政策决定。您可以使用代码审计来强制执行该策略(使用脚本扫描源文件或目标文件,并且不允许链接到动态内存库)
答案 1 :(得分:0)
引用计数的最大问题是它不是一个完整的解决方案,并且不能收集循环结构。每次设置引用时都会产生开销;对于许多类型的问题,这种情况很快就会增加,并且可能比稍后等待GC更糟糕。 (现代GC相当先进,非常棒 - 不要把它算下来!!!)