什么是正确的方案文件扩展名?

What's the proper scheme file extension?

编程语言 Scheme 的文件按照惯例是扩展名 .scm.ss.

我对这些扩展的历史以及正确使用很感兴趣,尽管似乎普遍的态度是它只是你喜欢的任何东西,这无关紧要,但也许我错了。

没有合适的 Scheme 扩展。我浏览过R[567]RS,没有指定。

这是故意的,因为 Appendix F in a R6RS Non-Normative Appendices draft (PDF) 实际上有一部分是关于从库路径到文件路径的映射,但没有形成最终规范。

话虽如此,Scheme 程序最常见的文件扩展名是 .scm,并且在 R6RS 和可能是 R7RS 中已经由实现者添加了其他扩展名以区分库和主程序。

事实上,实现唯一需要确保的是有一种方法可以 "install" 一个库,通常是一个需要映射到源代码中的库名称的文件。在 Racket 的 R6RS 中,这是通过安装程序完成的:

plt-r6rs --install test.xxx 
[installing /home/westerp/.racket/6.4/collects/examples/hello.ss]
[Compiling /home/westerp/.racket/6.4/collects/examples/hello.ss]

所以实际上对于 racket 它毫无疑问地接受任何文件 name/extension,但是它使用 .ss 作为 R6RS 的扩展名并且它寻找 .sls.scm 文件您也应该手动执行 plt-r6rs --install 手动执行的操作。

其他实现可能需要手动方式来安装库,但它仍然与 Scheme 语言无关,因为规范将这部分留给了实现来解决。

这是我所有 Scheme-related 文件扩展名的列表 遭遇。每次扩展后都是对其扩展的猜测 引号。如有错误或遗漏的信息,请评论。

Scheme 的常用扩展

.scm ("Scheme") -- 为R5RS、R6RS、 R7RS,或任何其他实施和标准。这是最 Scheme 源文件的常见且通常首选的扩展名。

.sps ("Scheme program source") -- 一个R6RS方案程序。不是 据我所知,与 .scm 确实不同,但我猜这是 扩展名表示该文件包含一个主程序,因此 它的名称可以传递给 Scheme 解释器 运行 程序。

.sls ("Scheme library source") -- 一个R6RS (library ...)形式 其中包含接口声明和库 执行。您会在 Akku 中找到这些 包,例如。

.sld ("Scheme library definition") -- A R7RS (define-library ...) 形式。该形式往往主要包含声明,使用 (include ...) 来包含库的实际 .scm 源文件。例如,您将把这些放在 Snow 包中。

Scheme-derived 种语言的扩展

.rkt ("Racket") -- 球拍源代码。球拍支持R6RS Scheme,R7RS Scheme(通过一个third-party包),它自己的方言 (也称为 Racket)现在已经从 R6RS 扩展了很多,并且 相当多的语言与 Scheme 几乎没有关系。 每个 .rkt 文件都以 #lang racket/base 之类的行开始 该文件是用哪种语言编写的。

.scr ("Scribe") -- 用Scheme写的文本文件 抄写员,一个 本质上类似于 TeX/LaTeX 的标记语言,但以 Scheme 作为 宏语言。注意:原始的 Scribe 标记语言来自 1980 没有 使用方案。

.scrbl("Scribble") -- 一个用 Scribble 写的文本文档,一个 现代版的 Scheme Scribe。涂鸦解释器已经 至少为 Racket 和 Chibi Scheme 实施。

Scheme 的罕见扩展

.ss ("Scheme source") -- 很少等同于 .scm。在一些 R6RS 实现的源代码中发现。

.sc ("Scheme") -- 罕见等同于 .scm.

.sch ("Scheme") -- 在 Larceny 实现的源代码中发现。

.sps7 ("Scheme program source (R7RS)") -- 一个R7RS方案程序。在盗窃实施的源代码中发现。