Standard ML

维基百科,自由的百科全书
跳到导航 跳到搜索
Standard ML
编程范型多范式: 函数式, 指令式, 模块化[1]
语言家族ML
发行时间1983年,​38年前​(1983[2]
穩定版本
Standard ML '97[2]
(1997年,​24年前​(1997
型態系統类型推论, 静态, 强类型
文件扩展名.sml
網站sml-family.org 編輯維基數據鏈接
主要實作產品
SML/NJ, MLton
衍生副語言
Alice, Concurrent ML, Dependent ML
啟發語言
ML, Hope, Pascal
影響語言
Elm, F#, F*, Haskell, OCaml, Python[3], Rust, Scala

Standard MLSML)是通用的模块化函数式编程语言,具有编译时间类型检查类型推论。它流行于编译器作者和编程语言研究者和自动定理证明研究者之中。

Standard ML是ML的现代方言,ML是用于可计算函数逻辑英语Logic for Computable Functions(LCF)定理证明计划的编程语言。Standard ML在广泛使用的语言之中与众不同,源于它具有正式规定《The Definition of Standard ML》,给出了语言的类型规则英语Type rule操作语义[4]

实现[编辑]

存在很多SML实现,包括:

  • 新泽西Standard ML英语Standard ML of New Jersey(缩写为SML/NJ),是一个完全的编译器,有着关联的库、工具、交互式外壳和文档[5]
  • 莫斯科ML[6],是一个轻量级实现,基于了CAML Light运行时引擎。
  • MLton英语MLton,是一个完整程序优化英语Interprocedural optimization编译器,它产生相比其他ML实现非常快的代码[7]
  • ML Kit[8],集成了一个垃圾收集器(它可以弃用)和带有自动区域推论的基于区域内存管理英语region-based memory management,意图支持实时应用。它的实现非常紧密的基于了标准定义。
  • Poly/ML[9],是一个Standard ML的完全的实现,它产生快速代码并支持多核硬件(通过Posix线程);它的运行时间系统进行并行垃圾收集和不可变子结构的线上共享。
  • Isabelle/ML[10],将并行Poly/ML集成入交互式定理证明器,带有一个复杂的IDE(基于了jEdit)用于官方Standard ML(SML'97)、Isabelle/ML方言和这个证明语言。开始于Isabelle2016,还有一个源代码级的ML的调试器。
  • CakeML[11],一个读取﹣求值﹣输出循环版本的ML,带有正式验证的运行时间库和到汇编代码的转换。
  • HaMLet[12],是一个SML解释器,意图成为精确和可接近的标准定义的参考实现。
  • TILT[13],是完全验证了的SML编译器。它使用有类型的中间语言来优化代码和确保正确性,并可以编译成有类型的汇编语言英语Typed assembly language
  • SML.NET[14],允许编译成Microsoft CLR并拥有同其他.NET代码连接的扩展。
  • SML2c[15],是一个批处理编译器而只能把模块级声明(也就是签名、结构、函子)编译成C。它基于了SML/NJ版本0.67并共享了这个前端,和它的多数运行时间系统,但是不支持SML/NJ风格的调试和剖析。运行在SML/NJ上的模块级程序可以不加改变的用sml2c编译。
  • Poplog英语Poplog系统实现一个版本的SML,还有POP-11英语POP-11、可选的Common LispProlog,允许混合语言编程。
  • SML#[16],是一个SML扩展,提供了记录多态性和C语言互操作性。它是常规的原生编译器,它的名字不暗示着要在.NET框架上运行。
  • Alice英语Alice (programming language),一个Standard ML解释器,萨尔兰大学增加了惰性求值并发性多线程和通过远程过程调用分布式计算)和约束编程特征。
  • SOSML[17],是用TypeScript写的SML实现,可以直接运行在web浏览器内。它实现了大多数SML语言和选择的部份SML基本库。

所有这些实现都是开源的并可自由的获得。其中多数用SML实现了自身。不再有任何商业SML实现。

参见[编辑]

引用[编辑]

  1. ^ Programming in Standard ML: Hierarchies and Parameterization. [2020-02-22]. (原始内容存档于2015-06-10). 
  2. ^ 2.0 2.1 SML '97. www.smlnj.org. [2020-04-25]. (原始内容存档于2017-07-22). 
  3. ^ itertools — Functions creating iterators for efficient looping — Python 3.7.1rc1 documentation. docs.python.org. [2020-04-25]. (原始内容存档于2020-06-14). 
  4. ^ Milner, Robin; Tofte, Mads; Harper, Robert; MacQueen, David. The Definition of Standard ML (Revised). MIT Press. 1997. ISBN 0-262-63181-4. 
  5. ^ smlnj.org. [2020-04-25]. (原始内容存档于2020-05-01). 
  6. ^ 莫斯科ML页面存档备份,存于互联网档案馆
  7. ^ mlton.org. [2020-09-27]. (原始内容存档于2020-08-28). 
  8. ^ ML Kit页面存档备份,存于互联网档案馆
  9. ^ Poly/ML页面存档备份,存于互联网档案馆
  10. ^ Isabelle/ML页面存档备份,存于互联网档案馆
  11. ^ CakeML页面存档备份,存于互联网档案馆
  12. ^ HaMLet页面存档备份,存于互联网档案馆
  13. ^ TILT页面存档备份,存于互联网档案馆
  14. ^ SML.NET页面存档备份,存于互联网档案馆
  15. ^ SML2c页面存档备份,存于互联网档案馆
  16. ^ SML#页面存档备份,存于互联网档案馆
  17. ^ SOSML页面存档备份,存于互联网档案馆

外部链接[编辑]