ITADN
jart/sectorlisp
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

sectorlisp

sectorlisp 是一种 512 字节的 LISP 实现,它能够在裸机上启动 John McCarthy 的元循环求值器。

Yo dawg, I heard you like LISP so I put a LISP in your LISP so you can eval while you eval

概述

LISP 被誉为软件界的麦克斯韦方程组。 然而,至今几乎没有人致力于将这些方程式简化为最简形式。即便是在 20 世纪 60 年代发表的最初的 LISP 论文 中,定义 LISP 时也包含了LABEL等非必要元素。

本项目旨在通过以下三步解决这一问题:

  1. 我们提供了一个用 LISP 语言本身编写的 LISP 实现,它仅作为一个单一的纯表达式存在,且仅使用该语言的必要函数。详见 lisp.lisp。它与约翰·麦卡锡在 20 世纪 60 年代论文中使用的元循环求值器相同,只不过已修复了其中的错误,补充了依赖项,并去除了语法糖。

  2. 我们提供了一个可读性高且具备移植性的 C 语言参考实现,用以展示如何在符合 POSIX 标准的平台上原生启动元循环求值器,同时还能提供类似 readline 的友好界面。详见 lisp.c

  3. 我们提供了一个 512 字节的 i8086 架构下的 LISP 实现,它能够在个人电脑的 BIOS 级别直接启动。详见 sectorlisp.S。据我们所知,这是迄今为止最小的真正意义上的 LISP 实现。

Binary Footprint Comparison

入门指南

请参阅 lisp.lisp,其中包含可直接复制并粘贴到您的 LISP REPL 中的代码示例。

您可以按如下方式运行 C 语言实现版本:

$ make
$ ./lisp

运行 make 后,您应该会看到一个 sectorlisp.bin 文件,它即为主引导记录,您可以将其放入软盘并通过 BIOS 启动。如果您更愿意在模拟器中运行它,我们推荐使用 Das Blinkenlights]。

curl --compressed https://justine.lol/blinkenlights/blinkenlights-latest.com >blinkenlights.com
chmod +x blinkenlights.com
./blinkenlights.com -rt sectorlisp.bin

或者,您也可以按如下方式使用 QEMU:

qemu-system-i386 -nographic -fda sectorlisp.bin

更多相关信息可在 我们的维基中找到。

演示

在模拟器中启动 sectorlisp

上述视频展示了如何在 Blinkenlights 模拟器中启动 sectorlisp,进而启动元循环求值器,该求值器可用于计算树结构中的第一个元素。

您可以在 YouTube 上观看完整演示