我正在阅读这篇关于 funarg 问题的论文,这实际上是维护词法闭包环境的问题。这是一篇旧论文,我不确定作者的结论是否仍然成立,但他强烈暗示,为了拥有词法而不是动态范围,您必须放弃传统的 C 样式堆栈,而是使用树结构环境,从堆中分配。
这是否使得在任何硬实时系统中都不可能有词法范围的闭包?在实时嵌入式系统中,延迟以微秒为单位测量,堆分配通常是被禁止的,因为它引入了不确定的延迟。
这一直是我的好奇心,因为我主要以固件开发人员的身份制作面包,其中 C 是事实上的语言,有一段时间以来,我似乎一直在使用我的脑力来弄清楚如何迫使 C让我用更复杂的语言做一些免费的事情。因此,我开始怀疑您是否可以专门为基于硬实时嵌入式微控制器的系统实现 micro-lisp 编译器。
作为旁注:我最近对诸如闭包和对象如何等效等深层主题有了深刻的见解,这让我对 Stallman 和 Rich Hickey 以及 Paul Graham 等人更加敬畏。从头开始实施 Lisp 对我来说似乎是一项艰巨的任务。很难知道从哪里开始。(也许与 PG 对 McCarthy 的原始 eval 函数 IDK 的实现有关)。无论如何,我离题了。