【问题标题】:Running Standard ML on Windows在 Windows 上运行标准 ML
【发布时间】:2012-04-23 02:49:01
【问题描述】:

我一直在寻找一些关于如何让 Standard ML 在 Windows 上运行的好文档。有人对此有很好的指导吗?

我曾尝试使用本指南在 cygwin 中编译 sml/nj:http://www.smlnj.org/install/index.html

$ config/install.sh
config/install.sh: Using shell /bin/sh.
config/install.sh: SML root is /usr/local/sml.
config/install.sh: Installation directory is /usr/local/sml.
config/install.sh: Installing version 110.74.
config/install.sh: URL of source archive is http://smlnj.cs.uchicago.edu/dist/working/110.74/.
config/install.sh: Script /usr/local/sml/bin/.arch-n-opsys reports ARCH=x86; OPSYS=win32; HEAP_SUFFIX=x86-win32.
/usr/local/sml/config/unpack: The run-time tree already exists.
config/install.sh: Compiling the run-time system.
(nmake /Fmakefile.win32 MAKE="nmake /Fmakefile.win32" RUNTIME="run.x86-win32.exe" VERSION="v-x86-win32" CC="cl" CFLAGS="/Zi" CPP="cl /E /EP" TARGET=X86 DEFS="  /DHOST_X86 /DTARGET_X86 /DOPSYS_WIN32 /DVREGS /DINDIRECT_CFUNC /DDLOPEN" XOBJS="" XLIBS="" LD_LIBS="" XCLIBS="" run.x86-win32.exe)
make: -c: Command not found
mk.x86-win32:26: recipe for target `all' failed
make: *** [all] Error 127
config/install.sh: !!! Run-time system build failed for some reason.

任何建议将不胜感激。

【问题讨论】:

  • 我遇到了同样的问题(最终使用了 Windows msi)。我深入研究了代码,似乎安装脚本无法识别 Cygwin 提供的有关操作系统的信息;即使添加了信息,它仍然对我不起作用,因为一些代码是用 32 位汇编编写的,而编译器使用的是 64 位 C 库。

标签: windows sml smlnj ml polyml


【解决方案1】:

Moscow ML (MosML) 在 Windows 上开箱即用(不需要 cygwin)。您可以下载 zip 文件或自解压安装程序。

该网站还包含一个相当不错的文档(适用于某些 MosML 特定部分)和指向其他优秀参考的链接。

关于您的问题,您参考的指南没有提到在 Windows 上编译 sml/nj。仅仅使用 cygwin 并不能使它成为“linux”(cygwin 有很多怪癖)。 源代码包含一些关于如何在 cygwin 上安装(和编译)的notes。请注意,如果您使用的是旧版本的 sml/nj,则它不一定与 cygwin 兼容。

附带说明。 Windows 有一个 msi 安装程序,为什么不使用呢?

【讨论】:

  • msi 看起来不错。 (虽然windows cmd提示有点可怕)
【解决方案2】:

如果您正在寻找一个快速而肮脏的实现,您可能想尝试Cambridge ML。我们用它在剑桥教授本科生 ML。不是大规模开发的最佳选择,但足以教授语言的基础知识。

【讨论】:

    【解决方案3】:

    在标准 ML 的悠久历史中,它的最佳实现鲜为人知,这已成为一个笑话:Poly/ML

    Github 上的 releases 还包括适用于 Windows 的 MSI。

    【讨论】:

    • 当我使用 (5.7 x64) .msi 时,我得到的只是一个破旧的 PolyML.exe,它似乎是一个 windows repl 应用程序或其他东西。编译器和其他所有东西在哪里?
    • 仅供参考 Poly/ML 似乎不支持 use 语句(即模块导入)用于与当前目录不同的目录中的源文件(例如 use "../util.sml;"),而SML/NJ 有。 Poly 不会在路径有意义所需的引擎盖下执行 chdir。如果您只是将 SML 用于教育/探索目的,则进入门槛巨大。
    猜你喜欢
    • 2011-01-03
    • 2011-05-05
    • 2015-04-05
    • 2016-01-19
    • 2010-11-12
    • 1970-01-01
    • 2018-08-17
    • 1970-01-01
    • 2013-07-27
    相关资源
    最近更新 更多