新泽西Standard ML

新泽西Standard ML（“Standard ML of New Jersey”或简写SML/NJ：新泽西标准元语言），是针对Standard ML编程语言的自由且开源的编译器和编程环境，它还支持Concurrent ML。除了它的运行时系统是用C写成之外，SML/NJ大部份是用Standard ML写成的。它最初是贝尔实验室和普林斯顿大学联合开发的。

它的名字参考了普林斯顿大学和贝尔实验室所在地新泽西州和在二十世纪早期著名的石油垄断者新泽西标准石油二者。

特征

SML/NJ向SML'97基础库扩展了一些额外的顶层结构：

 系统信息：SysInfo结构提供了关于运行时间系统的信息，比如操作系统种类、类型和版本，是否机器支持多处理器。
 弱指针：Weak结构提供了对弱指针的支持。
 惰性暂停：Susp结构实现了惰性求值（对立于及早求值）所需的暂停。
 编译器内部：Internals结构提供了对一些编译器内部的访问，包括实例化和修改信号表格的方法。
 不安全访问：Unsafe结构提供了对数据结构和运行时间系统函数的不安全访问。
 可视编译器结构：SML/NJ还包括了提供到ML编译器访问的结构，它包含用于执行剖析、编译器错误信息打印和警告、和可定制的精美打印的子结构。

此外，SML/NJ提供了并非SML'97的标准特征的一些语法构造：

 向量扩展和模式：SML/NJ允许使用#[exp0, exp1, ..., expn−1]语言创建向量，并允许以类似的语法在它们上进行模式匹配。
 Or模式：SML/NJ扩展了SML'97模式的语法，使用(apat1 | ... | apatn) => exp，允许在一个单一规则中匹配多个模式，这里假定了每个模式都有相同的类型。
 目标语言嵌入：SML/NJ提供了引述/反引述（quote/antiquote）语法，它们允许在ML表达式和程序中，有合乎的具体语法的表达式嵌入。
 高阶模块：SML/NJ在Standara ML的函子形式的参数化模块之外，通过允许函子成为结构的成员而支持函子的参数化。

发展
“Successor ML”是用来描述ML语言的下一个版本的术语。描述它的文档已经从SML/NJ '97文件中提取出来，并放在GitHub仓库中以便获取为TeX文档，它由期望通过协作增进语言的社群维护。Successor ML特征可以使用命令行选项-Cparser.succ-ml=true来启用。

至少从1998年开始，MLton成为了标准编译器，它拥有对Successor ML的某些支持。

在2008年，开始了在HaMLet上的工作，它是完全用Standard ML写成的Successor ML的参考实现。截止2018年，HaMLet仍旧是Successor ML的唯一完整实现，并具有额外的新奇事物。

自从2015年，SML/NJ的演进侧重发展基础库，并在版本110.79的发行中增加了对Successor ML定义的支持。

在2020年末尾时，在版本110.99发行中增加了64-bit支持。

参见



引用

外部链接
 Standard ML of New Jersey 
 Notes on Programming in SML/NJ 

Category:普林斯顿大学
Category:函数式编程语言
Category:ML语言家族
Category:贝尔实验室
Category:自由編譯器與直譯器
Category:自由發展元件與函式庫