编写可移植的 Scheme 代码

Writing portable Scheme code

我即将开始一个 Scheme 项目。所有的编程都非常简单,我正在努力使我的程序可移植,这意味着可以轻松地执行或安装在其他已经安装了 Scheme 的机器上。 我的程序应该处理文件格式的输入并将结果输出到屏幕,并将数据保存为文件。

我的问题是:

  1. 应该给我的程序什么样的权限?
  2. 是否有编译器可以将我的 Scheme 程序编译成适用于 Unix 或 Windows 系统的可执行文件?

提前致谢 注意:我在 Ubuntu

工作

编写符合标准的 Scheme 对您可以做的事情施加了严格的限制。 R5RS 标准非常小,不包括诸如错误处理之类的基本内容,甚至不包括检测 compiler/interpreter 您的代码 运行 正在执行的内容。 R6RS 标准更为广泛,但并未得到广泛实施。因此,编写一个 Scheme 程序将 运行 在恰好安装在用户机器上的任何 Scheme 解释器或编译器上运行是困难的。

但这并不重要,因为 Scheme 并未广泛安装。很可能你的最终用户不会安装任何 Scheme 解释器,除了可能以 libguile 为幌子,但那是一个 C 库。

您可以通过针对 Scheme 的特定实现来获得 平台 可移植性,无论如何您都必须这样做,因为您需要依赖某些实现的扩展完成任何工作的 Scheme 标准。

Chicken Scheme 有一个生成小型可执行文件的编译器,它声称在 Windows 和 Unix 上都是 运行。不过,我只在 Linux 上使用过它。

商业 Chez Scheme 也有一个编译器可以在 Windows 和 Linux 上生成可执行文件,但我从未在任何平台上使用过任何版本的 Chez Scheme。

Racket 可以在 Windows、Linux 和 MacOS 上生成可执行文件。但是,该语言与 Scheme 有很大的不同。例如,列表在 Racket 中是不可变的。 Racket 有一个很大的库,其中包括网络和 GUI 之类的东西,所有这些都可以在操作系统之间完全移植。编译器生成大的可执行文件。

SISC 运行s 在 JVM 上,使其可移植到任何 Java 运行s 上。但是,它是解释器,而不是编译器。

以上所有函数都与 C(或在 SISC 的情况下 Java)有外部函数交互。