问题标签 [mlton]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sml - 从多个文件编译 SML 项目
我有一个包含许多文件的项目,我希望它可以与最流行的编译器一起使用。
不幸的是,PolyML 和 SML/NJ 需要use
语句,而 MosML 还需要使用 显式加载基础库结构load
,poly 或 sml 都无法识别。
最重要的是,MLton 和 MLKit 需要一个完全不同的 .mlb 文件,只是列出文件名,并且还需要显式导入基础库,这与 MosML 以不同的方式完成:
是否有一些标准的通用“包含此文件”命令,如果不存在,是否有其他方法可以让所有编译器从一个入口点文件中读取?
PS不介意有人对编译器差异进行小幅咆哮。我总是对人们的想法感兴趣,并且没有太多可用的信息:-)
sml - 依赖签名专业化
我可以使用该类型之前的类型和签名中的类型来专门化签名中的类型吗?这是一个例子:
我可以专攻A
以下吗?
SML/NJ 和 Mlton 都抱怨不受约束t
。
sml - 使用`-codegen c`时mlton查看中间C文件
我有以下 SML 源文件,其中包含一个简单的函数:
我正在尝试使用 C 后端使用 MLTon 编译它并查看生成的 C 代码。
但是,没有任何中间文件被转储到当前工作目录中,并且两者似乎都没有任何相关性/tmp
。有没有办法将 MLTon 引导到 a) 仅生成 C 源文件并停止或 b) 即使在生成最终工件之后也保留中间文件。
sml - 使用 MLton 和 MosML 退出进程(缺少进程模块)
我正在尝试编写可以在 mlton 或 mosml 上编译的代码。
在我的 mosml 中,我可以按如下方式在失败时退出。
但是,当我尝试重用相同的代码并在 mlton 上编译时。它在其库集中找不到 Process。请让我知道我在编写可在一个源代码文件中的任一平台上运行的代码方面的选择。
alpine - Alpine Linux 上的 MLton
我在使用Alpine Linux在Docker容器中安装和运行MLton 编译器时遇到问题。有没有办法在这个系统上安装这个编译器?
尝试#1
使用标准的 `alpine 基础镜像和 MLton 的二进制分布:
使用以下 Dockerfile:
Docker 构建失败并显示以下错误消息,可能是因为glibc
缺少。
/usr/bin/mlton:第 52 行:/usr/lib/mlton/mlton-compile:没有这样的文件或目录
尝试#2
与上面相同,具有嵌入的基本 Docker 映像glibc
:
这一次,mlton
运行,但产生以下错误:
/usr/lib/gcc/x86_64-alpine-linux-musl/6.4.0/../../../../x86_64-alpine-linux-musl/bin/ld: /usr/lib/mlton/ targets/self/libmlton.a(platform.o): 重定位 R_X86_64_32 对 `.rodata.str1.8' 在制作共享对象时不能使用;使用 -fPIC 重新编译
...
/usr/lib/gcc/x86_64-alpine-linux-musl/6.4.0/../../../../x86_64-alpine-linux-musl/bin/ld:最终链接失败:不可表示部分输出
collect2:错误:ld 返回 1 个退出状态
调用系统失败,退出状态为 1:
gcc -o hello-world /tmp/fileGEluFu.o /tmp/fileYnNjh9.o -L/usr/lib/mlton/targets/self -lmlton -lgdtoa -lm -lgmp -m64 -Wl,-znoexecstack
关于如何解决这个问题的任何想法?
sml - Mlton 编译器不工作(不提供任何输出)
在 Ubuntu 上安装了 MLton 编译器(sudo apt-get install mlton)并且安装没有问题(似乎)。
当我尝试使用它(例如“mlton test.sml”)时,它会停留一秒钟,然后什么也不返回。如果我试图在我试图编译的文件中打印一些东西,什么都没有。然而,奇怪的部分是如果我给它错误的 ML 代码(“x = 2”,没有 val),它会吐出常规错误,如“未定义变量”等。
我看过这里和网上的其他地方,似乎没有什么与我正在经历的事情有关。也许我只是用错了?
提前致谢。
exception-handling - 使用 SML 处理和打印异常
我有一个看起来很像的代码:
但我需要打印通用异常消息(带exnMessage
?)。
如何捕获_
异常以获取并打印其消息?
sml - 标准 ML 中对 Word64 的多态强制
我想创建一个多态函数,将 8、16、32 位字转换为 64 位字。我该怎么做?
更新1
在基础库中,所有单词结构都具有功能toLarge
并fromLarge
可以转换为LargeWord
,据我所知,这只是 Word32 的同义词。
更新2
根据规范,字长必须是 2 的幂,但在 SML/NJ 我有
在 PolyML 中
那个怎么样?为什么Word.wordSize
不是二的幂?为什么Word
这些 SML 实现中的表示不同?
更新3
实际上,我希望能够使用 (<<) 运算符将较小的单词“提升”为较大的单词,但无法弄清楚如何去做。
更新4
似乎Word
并LargeWord
取决于架构并代表一个机器字。因为 SML/NJ 不支持 64 位 arch,所以它有不同的字长。
sml - 如何正确读取这个使用 foldl 的 SML 函数?
我是 SML 的新手,我无法理解什么是参数以及在此代码中传递给内部函数的内容。
这意味着用于:
我没有看到的是如何arr
从我的选择中选择mat
并在闭包函数中使用。
sml - 如何在退出程序之前等待并发 ML 线程完成?
我正在尝试在 MLton 及其并发 ML 实现中实现一个基本的“压力测试”程序,特别是这里描述的 Monte Carlo Pi 测试。虽然我认为我已经知道了我需要的大部分内容,但我有一个问题是我的程序总是在 CML 线程完成它们的工作之前终止。我知道他们正在做某事,因为我有时会看到他们向控制台打印我指示的应该打印的文本,但在他们开始和运行之间似乎存在竞争条件,并且程序作为一个整体退出。
我启动 CML 的代码是:
该experiment
函数的内容是:
最后,montecarlopi
函数是:
(完整的(小)程序和随附的 .mlb 文件可以在这里查看)。我有理由确定RunCML.doit
函数调用中的位做了它们应该做的事情,这让我认为问题可能与程序的最外层部分有关。
如您所见,我尝试旋转等待,使用布尔值上的 ref 单元格来确定何时停止,但这似乎不起作用。尝试旋转等待也不会使用RunCML.isRunning
- 尽管这两个听起来都是可怕的想法,真的,无论如何。当然,我不能使用 CML 通道或同步变量之类的东西,因为它们需要在RunCML.doit
要使用的段内。更改线程数对这个问题没有任何影响。我也找不到任何其他可以使主要部分进入非阻塞等待的功能。
如何让程序的外部部分等到RunCML.doit
函数调用内部的大部分完成?或者,我在导致问题的那部分内部做错了什么?