欢迎大家赞助一杯啤酒🍺 我们准备了下酒菜:Formal mathematics/Isabelle/ML, Formal verification/Coq/ACL2, C++/F#/Lisp
ML
您可以在Wikipedia上了解到此条目的英文信息 ML Thanks, Wikipedia. |
ML 编程语言
目录 |
简介
ML 是一个通用的函数式编程语言,它是由爱丁堡大学的 Robin Milner 及他人在二十世纪七十年代晚期开发的。它的语法是从 ISWIM 得到的灵感。作为元语言的ML是为了帮助在 LCF 定理证明机中寻找证明策略而构想出来的。(之前的元语言是 pplambda,它联合了一阶逻辑演算和有类型的多态的λ演算)。它使用了 Hindley-Milner 类型推论算法来推测大多数值的类型,而不需要四处使用注解。
- History of Standard ML
- The History of Standard ML: Ideas, Principles, Culture The History of Standard ML
功能
ML一般被归为非纯函数式编程语言,因为它允许副作用和指令式编程。这一点和纯函数式编程语言,例如Haskell很不一样。
ML特性包括:传值呼叫(Call by value)的求值策略,一级函数,带有垃圾收集的自动内存管理,参数多态,静态数据类型,类型推论,代数数据类型,模式匹配和异常处理。
不像Haskell,ML使用及早求值,也就是说所有的子表达式总是被求值。导致的一个结果是你不能使用无穷表。然而,惰性求值产生的无穷表可以通过使用匿名函数来模拟。
今天在ML家族中有好几种语言:两种主要的方言是Standard ML和Caml,其他的包括F#-针对Microsoft .NET平台的开放研究项目。ML中的思想影响了众多的语言,例如Haskell,Cyclone和Nemerle。
ML的实力大多被用于语言设计和操作(编译器构建、自动化定理证明和形式化验证),但是它作为通用语言也被用于生化,金融系统,和宗谱数据库,一个P2P的客户/服务器程序等等。
标准
- Successor ML 是用来描述ML语言的下一个版本的术语
- SML97
- SML90
- ML2000
指南
Programming in Standard ML '97: An On-line Tutorial
很多 SML 实现提供交互式REPL,比如 SML/NJ
Debian
$ sudo apt install smlnj $ sml Standard ML of New Jersey v110.79 [built: Tue Aug 8 16:57:33 2017] - 1 + 2 * 3; val it = 7 : int
实现
ML 家族的两个主要的方言是 Standard ML 和 OCaml。ML 的实力大多被用于语言设计和操作,比如建构编译器、分析器、定理证明器。ML 确立了静态类型函数式编程范型,从而在编程语言历史上占有显要地位,它的思想在影响了众多的语言,例如:Haskell、Nemerle ATS 和 Elm。
- Standard ML 是 ML 的现代方言,ML 是用于 LCF(可计算函数逻辑)定理证明计划的编程语言。Standard ML 在广泛使用的语言之中与众不同,源于它具有正式规定《The Definition of Standard ML》 给出了语言的类型规则和操作语义
- OCaml,ML的一种方言,支持面向对象编程。
- F#,.NET框架的ML实现。
- F* A Proof-oriented Programming Language
- isabelle
- Yeti is ML style functional programming language, that runs on the JVM.
- CakeML A Verified Implementation of ML, CakeML Types
- Alpaca Functional programming inspired by ML for the Erlang VM
- Futhark is a purely functional data-parallel programming language in the ML family, Written in Haskell.
- Standard ML of New Jersey
- MLKit The Standard ML Compiler and Toolkit
- MLton
- Poly/ML
- The Free Poplog Portal Poplog Standard ML