gpt4 book ai didi

SML-NJ,如何编译独立的可执行文件

转载 作者:行者123 更新时间:2023-12-02 09:37:56 25 4
gpt4 key购买 nike

我开始学习 Standard ML,现在我尝试使用 New Jersey 编译器的 Standard ML。

现在我可以使用交互式循环,但是如何将源文件编译为独立的可执行文件?

例如,在 C 中,你可以只写
$ gcc hello_world.c -o helloworld
然后运行 ​​helloworld 二进制文件。

我阅读了 SML NJ Compilation Manager 的文档,但它没有任何明确的示例。

另外,是否有另一个 SML 编译器(允许独立的二进制创建)可用?

最佳答案

两者 MosMLMLton还可以创建独立的二进制文件。 MosML 通过 mosmlc 命令和 MLton 通过 mlton 命令。

请注意,MLton 没有交互式循环,而是一个整体程序优化编译器。这基本上意味着编译需要相当长的时间,但反过来它会生成 incredibly fast SML 程序。

对于 SML/NJ,您可以使用 CM.mk_standalone功能,但在 CM 用户手册第 45 页中不建议这样做。相反,他们建议您使用 ml-build 命令。这将生成 SML/NJ 堆图像。堆镜像必须使用@SMLload 参数运行,或者您可以使用 heap2exec程序,前提是您拥有受支持的系统。如果您不这样做,那么我建议您改用 Mlton。

以下可用于生成有效的 SML/NJ 堆图像:

测试.cm:

Group is 
test.sml

$/basis.cm

测试.sml:
structure Test =
struct

fun main (prog_name, args) =
let
val _ = print ("Program name: " ^ prog_name ^ "\n")
val _ = print "Arguments:\n"
val _ = map (fn s => print ("\t" ^ s ^ "\n")) args
in
1
end
end

并生成您可以使用的堆图像: ml-build test.cm Test.main test-image然后通过 sml @SMLload test-image.XXXXX arg1 arg2 "this is one argument" 运行它其中 XXXXX 是您的架构。

如果您决定在某个时候使用 MLton,那么您不需要任何 main 函数。它评估顶层的所有内容,因此您可以创建一个主函数并通过以下方式调用它:
fun main () = print "this is the main function\n"

val foo = 4

val _ = print ((Int.toString 4) ^ "\n")

val _ = main ()

然后你可以通过 mlton foo.sml编译它这将产生一个名为“foo”的可执行文件。当你运行它时,它会产生这样的结果:
./foo 
4
this is the main function

请注意,这只是一个文件,当您有多个文件时,您将需要使用 MLB(ML Basis 文件),即 MLtons 项目文件,或者您可以使用 cm 文件,然后通过 mlton projectr.mlb 编译它。

关于SML-NJ,如何编译独立的可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5053149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com