Search code examples
windowssmlsmlnjmlpolyml

Running Standard ML on Windows


I have been looking for some good documentation on how to get Standard ML running on windows. Does anyone have a good guide on this?

I have tried compiling sml/nj in cygwin, using this guide: 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.

Any suggestions would be appreciated.


Solution

  • Moscow ML (MosML) works out of the box on Windows (No need for cygwin). You can either download a zip-file or a self-extracting installer.

    The website also contains a fairly good documentation (good for some of the MosML specific parts) and links to other good references.

    Regarding your issue, the guide you refer to doesn't mention compiling sml/nj on windows. Just by using cygwin doesn't make it "linux" (cygwin has quite some quirks). The source contains some notes on how to install (and compile) on cygwin. Note if you are using an older version of sml/nj, then it is not necessarily compatible with cygwin.

    On a side note. There exists a msi installer for windows, why not use that?