7

我有一个包含许多文件的项目,我希望它可以与最流行的编译器一起使用。

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

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

$(SML_LIB)/basis/basis.mlb

是否有一些标准的通用“包含此文件”命令,如果不存在,是否有其他方法可以让所有编译器从一个入口点文件中读取?

PS不介意有人对编译器差异进行小幅咆哮。我总是对人们的想法感兴趣,并且没有太多可用的信息:-)

4

1 回答 1

5

使用函数是标准通用的“包含这个文件”命令,包含在顶层环境中

val use : string -> unit    implementation dependent

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

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

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

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

于 2017-05-22T03:52:24.687 回答