我正在研究创建一种编程语言。我想知道的是,在包含类似引用的构造的语言中,没有新的/ malloc运算符是否可行?也就是说,所有变量都存储在堆栈中某处或静态分配。
这个想法是你可以获得更好的类型安全性,以及免费的垃圾收集和#34;没有垃圾收集器。
我不熟悉太多的脚本语言,所以如果已经这样做了,请随时指出。
(动态/未知大小的数据结构将由动态列表结构处理,该结构将在堆上(显然)在用户的后面处理。)
答案 0 :(得分:2)
Fortran总是一种“通用”语言,但它不支持开箱即用的任何动态内存分配。
通常的做法是静态分配一个大数组并在其上模拟自己的内存管理。
如果您正在寻找摆脱GC和手动内存管理的方法,那么region analysis可以提供帮助,但仅限于少数特定情况。
答案 1 :(得分:1)
Region-based memory management是一种没有传统意义上的堆管理方法。这体现在FX和MLKit等语言中。
答案 2 :(得分:0)
如果您知道在方法终止后不会引用它们,则可以在堆栈上分配对象。这意味着,该对象仅用于该方法(例如,临时对象),或仅用于由嵌套调用产生的方法。然而,这是一个严重的限制。虽然有一些动态优化可以朝这个方向发展(至少是temp对象的优化)。您可能有一个静态检查机制来强制执行此限制,或者可能区分具有类型的堆和堆栈对象...
答案 3 :(得分:-1)
根本没有要求你必须实现堆栈或堆。例如,C也没有指定堆栈。实际上,在许多语言中,您甚至不需要关心,您只需指定实现(编译器,解释或其他)为变量腾出空间,也许还需要多长时间。
您的语言翻译(假设一个)可以int main(void) { char memory[1048576]; run_script_from_stdin_using(memory); }
。您甚至可以调用mmap(2)来获取一个匿名的内存块,并使用它来存储您的变量。对象居住的地方并不重要,并且堆栈/堆是具有可疑含义的术语,因为它们通常是可互换的。