SML或多或少的大型系统:编译器和解释器互操作性

SML或多或少的大型系统:编译器和解释器互操作性,sml,Sml,这是关于使用SML进行大规模编程的。首先是一个关于这个目的的总结,然后是一个小小的总结,最后是一个简单的问题 usepseudo‑子句 请注意,use函数是特殊的。虽然 没有精确定义,其预期目的是 获取文件的路径名并处理 输入SML源代码时文件的内容 由用户输入。它可以用作一个简单的构建 机制,特别是交互式会话。 大多数实现将提供更复杂的 为更大的源代码集合构建机制 文件夹。实现不需要提供 使用函数 后来 val use : string -> unit (* implementa

这是关于使用SML进行大规模编程的。首先是一个关于这个目的的总结,然后是一个小小的总结,最后是一个简单的问题

use
pseudo‑子句

请注意,use函数是特殊的。虽然 没有精确定义,其预期目的是 获取文件的路径名并处理 输入SML源代码时文件的内容 由用户输入。它可以用作一个简单的构建 机制,特别是交互式会话。 大多数实现将提供更复杂的 为更大的源代码集合构建机制 文件夹。实现不需要提供 使用函数

后来

val use : string -> unit    (* implementation dependent *)
它的缺点是:至少MLton不支持,而且虽然没有标准化,但似乎与所有主要SML系统都有相同的行为,即重新加载一个单元的次数与它遇到的
使用次数相同,这是不正常的,因为SML的生成语义(多次定义一个结构将导致不同的定义,这对于类型定义来说尤其错误)

ML基础文件 存在所谓的“ML基础文件”:和

load
pseudo‑子句 MoscowML有
加载
,其作用类似于
使用
,只使用一次,即,如果单元已经加载,则不会重新加载,这是系统的预期组成部分

总结
  • load
    很好,但只有莫斯科人才能识别
  • MLBasis文件可能很好,但Poly/ML和Moscow ML都无法识别它
  • MLton无法识别
    使用
将所有内容放在一个大的捆绑文件中,这是唯一一个可以与所有编译器和解释器进行互操作的东西;这是可行的,但很快就会成为负担

问题
有没有一种已知的可互操作的方法来组成一个由多个SML源文件组成的系统?

您没有提到的一个系统是SML/NJ的编译管理器(CM),它非常强大。还有一些其他不太为人所知的系统

尽管如此,情况确实很糟糕。SML根本没有标准化的单独编译机制。实际上,这意味着编写可移植的Makefile或类似的东西是相当痛苦的


因为我经历了这些痛苦,为了使它能够用7种不同的SML实现进行编译CM文件以及为其他系统生成元文件所需的make+sed hackery。它还可以为所有其他系统生成一个文件,其中包含对所有源的相应“使用”调用,至少支持该调用。总之,它并不漂亮,但工作得很好。

您没有提到的一个系统是SML/NJ的编译管理器(CM),这是非常强大的。还有一些其他的,鲜为人知的系统

尽管如此,情况确实很糟糕。SML根本没有标准化的单独编译机制。实际上,这意味着编写可移植的Makefile或类似的东西是相当痛苦的

因为我经历了这些痛苦,为了使它能够用7种不同的SML实现进行编译CM文件和必要数量的make+sed hackery,从而为其他系统生成元文件。它还可以生成一个文件,其中包含对所有源的相应“使用”调用,对于至少支持该调用的所有其他系统。总之,它并不漂亮,但工作得足够好