我正在研究针对嵌入式设备(16KB 左右的 RAM)和低级系统编程(即内核模块)的 lisp 编译器的开发,这两者都需要复杂性保证和对低级结构的访问。
即使我需要这些构造,我也不希望语言是“低级”的,因为我想为用户提供仍然提供低级保证的高级构造(即 Lisp 宏,对方面的支持面向编程、逻辑或约束求解、函数范式等)。
我目前的思路是我需要:
- 在 C99 上创建一个 s-expression 语法的精简包装器
- 编写定义更高抽象级别的宏,同时仍然公开低级别的结构、指针等。
- 将生成的 C99 代码输入 gcc,并获得我将运行的二进制文件
我想知道我的推理是否合理——这样一个进程生成的代码是否能够在如此小的内存占用下运行?我不希望该语言具有运行时组件。
最佳答案
Dale是 C(/一种类似 C 的语言),但使用 Lisp 的语法和几个高级编译时特性(宏、类型推断、匿名函数、模块……没有影响运行时的东西)编写。
PreScheme是从相反方向工作达到的相同目的地:它是 Scheme 的一种受限方言,删除那些无法 1:1 转换为 C 的运行时特性(例如延续、一般尾调用, GC, 运行时动态类型)。 PreScheme 继续在顶层支持 Scheme 运行时特性,因为这可以移至“编译时”。 PreScheme 是 Scheme48 的一部分并用于实现其运行时。
或者,在主要关注空间而非裸机性能的情况下,将解释器压缩到非常小的尺寸通常更容易; PICOBIT([1],[2])旨在以 <7Kb 运行,同时提供相当完整的 Scheme 实现。
关于c - 嵌入式系统的 Lisp 编译器设计?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29639401/