没有垃圾收集器的Lisp用于低级编程

Amu*_*umu 7 lisp garbage-collection

有没有Lisp的方言,它有Lisp语义和C语言的低级操作?类似于检索任意内存地址(虚拟或物理内存)并使用它执行某些操作; 指向硬件设备的指针......

例如:

(defvar a '(1 2 3 4)) ;; I have a list
(defvar b (cdr a)) ;; b is the cdr of a. But I want b to
                   ;;  actually refer to the tail of a
(setf b '(4 5 6)) ;; b now has new value, but a remains unchanged
Run Code Online (Sandbox Code Playgroud)

我想要的是使用Lisp来表达低级问题.例如,在裸机上运行Lisp时如何控制单个字节和位?在C中,我可以获得一个指针并执行指针算法以指向我想要的任何内存空间(虚拟或物理).指针也可以由硬件设计者指向设备和任意定义的地址.

我为什么需要这个?好吧,我想学习如何在低级编程中使用Lisp.从长远来看,我想编写一个简单的OS来学习,但是在Lisp中.我将在C中编写一个用于初步理解,但如果我只能用C编写,我怎么能确定并说我理解如何实现操作系统?我想我只有真正理解如何实现操作系统,如果我能用C语言以外的其他语言编写它来确保.

我不想为操作系统编写类似C core的内容,而为其他所有内容编写Lisp.

Rai*_*wig 5

正如我在评论中提到的,大多数Lisp实现都可以做到这一点.Common Lisp已经具有各种位计算功能.所有实现都提供低级操作的接口.

您可以在Lisp中编写Web服务器,编译器,窗口管理器等.许多Lisp系统都是用Lisp编写的,因此需要基元来写入/读取内存.

您只需要执行一些Lisp实现并阅读手册.这些都记录在案.

例如,请参阅可移植层CFFI(通用外部函数接口),指针的章节.CFFI在几个Common Lisp实现之上工作.


Asu*_*awa 5

你可能想看看 PreScheme:

http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.3.4031

Pre-Scheme 是 Scheme 的静态类型方言,它为程序员提供了 C 的效率和低级机器访问,同时保留了 Scheme 的许多理想特性。PreScheme 编译器利用类型推断、部分评估以及 Scheme 和 Lisp 编译器技术将 Scheme 有问题的特性(例如闭包)编译成 C 代码,而不会产生大量运行时开销。在 Pre-Scheme 程序中使用此类功能仅限于可以编译为有效代码的情况。类型重建是使用改进的 Hindley/Milner 算法完成的,该算法允许重载用户定义的函数。Pre-Scheme 程序中的所有顶级形式都在编译时进行评估,这使用户可以额外控制编译器对程序的部分评估。

我认为 Scheme48 在其实现中仍然使用 PreScheme:http ://s48.org/