Standard ML
Standard ML(SML)是通用的模块化函数式编程语言,具有编译时间类型检查和类型推论。它流行于编译器作者和编程语言研究者和自动定理证明研究者之中。
多范式: 函数式, 指令式, 模块化[1] | |
语言家族 | ML |
1983年[2] | |
穩定版本 | Standard ML '97[2]
(1997年
) |
型態系統 | 类型推论, 静态, 强类型 |
文件扩展名 | .sml |
網站 | |
主要實作產品 | |
SML/NJ, MLton | |
衍生副語言 | |
Alice, Concurrent ML, Dependent ML | |
啟發語言 | |
ML, Hope, Pascal | |
影響語言 | |
Elm, F#, F*, Haskell, OCaml, Python[3], Rust, Scala |
Standard ML是ML的现代方言,ML是用于可计算函数逻辑(LCF)定理证明计划的编程语言。Standard ML在广泛使用的语言之中与众不同,源于它具有正式规定《The Definition of Standard ML》,给出了语言的类型规则和操作语义[4]。
实现
存在很多SML实现,包括:
- 新泽西Standard ML(缩写为SML/NJ)是一个完全的编译器,有着关联的库、工具、交互式外壳和文档[5]。
- 莫斯科ML页面存档备份,存于[6],是一个轻量级实现,基于了CAML Light运行时引擎。
- MLton,是一个完整程序优化编译器,它产生相比其他ML实现非常快的代码[7]。
- ML Kit页面存档备份,存于[8],集成了一个垃圾收集器(它可以弃用)和带有自动区域推论的基于区域内存管理,意图支持实时应用。它的实现非常紧密的基于了标准定义。
- 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编译器。它使用有类型的中间语言来优化代码和确保正确性,并可以编译成有类型的汇编语言。
- SML.NET页面存档备份,存于[14],允许编译成Microsoft CLR并拥有同其他.NET代码连接的扩展。
- SML2c页面存档备份,存于[15],是一个批处理编译器而只能把模块级声明(也就是签名、结构、函子)编译成C。它基于了SML/NJ版本0.67并共享了这个前端,和它的多数运行时间系统,但是不支持SML/NJ风格的调试和剖析。运行在SML/NJ上的模块级程序可以不加改变的用sml2c编译。
- Poplog系统实现一个版本的SML,还有POP-11、可选的Common Lisp和Prolog,允许混合语言编程。
- SML#页面存档备份,存于[16],是一个SML扩展,提供了记录多态性和C语言互操作性。它是常规的原生编译器,它的名字不暗示着要在.NET框架上运行。
- Alice,一个Standard ML解释器,萨尔兰大学增加了惰性求值、并发性(多线程和通过远程过程调用的分布式计算)和约束编程特征。
- SOSML页面存档备份,存于[17],是用TypeScript写的SML实现,可以直接运行在web浏览器内。它实现了大多数SML语言和选择的部份SML基本库。
所有这些实现都是开源的并可自由的获得。其中多数用SML实现了自身。不再有任何商业SML实现。
引用
- . [2020-02-22]. (原始内容存档于2015-06-10).
- . www.smlnj.org. [2020-04-25]. (原始内容存档于2017-07-22).
- . docs.python.org. [2020-04-25]. (原始内容存档于2020-06-14).
- Milner, Robin; Tofte, Mads; Harper, Robert; MacQueen, David. . MIT Press. 1997. ISBN 0-262-63181-4.
- . [2020-04-25]. (原始内容存档于2020-05-01).
- . [2020-09-20]. (原始内容存档于2020-01-24).
- . [2020-09-27]. (原始内容存档于2020-08-28).
- . [2020-09-20]. (原始内容存档于2018-11-28).
- . [2020-09-20]. (原始内容存档于2020-06-27).
- . [2020-09-27]. (原始内容存档于2020-08-30).
- . [2020-09-20]. (原始内容存档于2020-09-14).
- . [2020-09-20]. (原始内容存档于2016-10-14).
- . [2020-09-20]. (原始内容存档于2018-06-11).
- . [2020-09-20]. (原始内容存档于2019-09-11).
- . [2020-09-20]. (原始内容存档于2018-08-28).
- . [2020-09-20]. (原始内容存档于2020-06-08).
- . [2020-09-20]. (原始内容存档于2020-09-12).
外部链接
- Standard ML Family GitHub Project页面存档备份,存于
- Standard ML language页面存档备份,存于 Mads Tofte, Scholarpedia, 4(2):7515. doi:10.4249/scholarpedia.7515
- What is SML?页面存档备份,存于
- What is SML '97?页面存档备份,存于
- successor ML (sML)页面存档备份,存于 is intended to provide a vehicle for the continued evolution of ML, using Standard ML as a starting point.
- Programming in Standard ML页面存档备份,存于
- Programming in Standard ML '97: An On-line Tutorial页面存档备份,存于
- Univ. of Chicago - SML tutorial (slides)页面存档备份,存于
- CSE341: Programming Languages页面存档备份,存于, Dan Grossman, University of Washington. Also on Coursera页面存档备份,存于 and YouTube页面存档备份,存于
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.