从多个文件编译 SML 项目

Compiling SML projects from multiple files

我有一个包含很多文件的项目,我希望它能与大多数流行的编译器一起工作。

不幸的是,PolyML 和 SML/NJ 需要 use 语句,而 MosML 还需要使用 load 显式加载基础库结构,poly 或 sml 都无法识别。

最重要的是,MLton 和 MLKit 需要一个完全不同的 .mlb 文件,仅列出文件名,还需要显式导入基础库,这与 MosML 的实现方式不同:

$(SML_LIB)/basis/basis.mlb

是否有一些标准的通用 "include this file" 命令,如果不存在,是否有其他方法让所有编译器从一个入口文件读取?

P.S。不介意有人对编译器的差异大发雷霆。我一直对人们的想法很感兴趣,而且没有太多可用的信息:-)

use函数是标准的通用“include this file”命令, 包含在 Top-level environment

val use : string -> unit    implementation dependent

我一般在smlnj的CM维护构建环境, 然后用 cm2mlb 转换为 mlb。它将定义一个标志 MLton 在解析 sources.cm 文件时,您可以使用它来解决模块加载行为中的差异。

#if(defined(MLton))
runmain.sml
#endif

还有一组sml-buildscripts从 mlb 到 polyml。我不熟悉他们也不熟悉 polyml 但是 CM 作为权威来源很方便,因为它通过结构 CM 提供从 SML 的编程访问。

这就是 cm2mlb 使用的,所以虽然我不知道已经存在的从 CM 转换为 polyml 的任何东西,但它应该是可能的。