标准ML


标准ML是一种安全的、模块化的、严格的、功能性的、多态的带有编译时类型检查的程序设计语言和类型推断,垃圾收集、异常处理、,不可变数据类型和可更新引用,抽象数据类型和参数化模块。它有高效的实现和正式的定义以证明其可靠性。
保险柜
ML是安全的,因为它是一个通过类型检查器的程序无法转储核心,无法访问抽象数据类型的私有字段,将整数误认为指针,否则“出错”
模块化
标准ML模块系统支持模块(称为结构)和接口(称为签名); 模块的签名确定模块中哪些组件和类型可见从外面。有一个灵活的结构匹配系统签名:可以有几个不同的视图(签名)具有相同的结构,并且可以有几个不同的匹配相同签名的实现(结构)。
功能
ML具有高阶函数:可以传递函数作为参数,存储在数据结构中,并作为结果返回函数调用数。函数可以静态嵌套在其他功能;这种词汇范围机制提供了以下能力在运行时创建“新”函数。
严格
ML中的函数调用,如C、Pascal、C++、Java等的函数调用它们的参数,然后再进入函数体。这种语言叫做严格的呼叫值,与某些函数式编程语言相比懒惰的呼叫需求.严格评估程序员更容易推理程序的执行。
多晶的
ML支持多态函数和数据类型。数据类型多态性允许使用单个类型声明(例如“list”)来描述整数列表、字符串列表、整数列表等;但程序员可以放心,给定一个“int列表”,每个元素实际上都是一个“int”。函数多态性允许要操作的单个函数声明(例如filterlist)整数列表、字符串列表、整数列表,等等,避免不必要的代码重复。
编译时类型检查
编译时类型检查语言中的程序员获得执行速度更快、调试更少的优点:程序员的许多错误可以在发展过程;这些类型可以让我们更清楚地思考程序的规范。
类型推断
ML程序员不必写下每个变量和函数参数:编译器通常可以根据上下文计算类型。这使得程序更加简洁易写。
垃圾收集
自动释放无法访问的数据使程序更简单、更清洁、更可靠。
异常处理
ML的异常处理机制——与之类似在C++、Java、Ada等语言中——提供处理程序的动态嵌套并消除了对特殊特殊情况的需要从函数返回值。
不可变的数据类型
在ML中,大多数变量和数据结构一旦创建和初始化不可变的,意味着它们从未更改、更新或存储到中。这导致了一些强有力的不干涉保证程序的不同部分对这些数据结构进行操作。在函数语言(如ML)中,人们倾向于构建新数据而不是修改旧的。
可更新的引用
然而,ML确实具有可更新(可分配)参考类型,因此,在破坏性更新最自然的情况下表达算法的方式,可以直接表达。
抽象数据类型
ML支持信息隐藏,因此可以实现数据其表示被只导出的接口隐藏的类型函数来构造和操作类型。
参数化模块
A类函子ML程序模块是否接受签名将另一个模块作为参数。然后可以将函子应用于与该签名匹配的任何模块。该设施类似于模板C++或通用的Ada或Modula-3,但在ML中,functor可以完全进行类型检查和编译在将机器代码应用于其参数之前,先将其应用于机器代码;这会导致以更好地实现程序模块化。
高效的实施
诸如多态性、参数化模块和对垃圾收集的依赖意味着将ML编译为高效的机器代码需要C编译器中通常不需要的技术。几个标准ML编译器生成高质量的机器代码,包括新泽西州标准ML丑角ML作品.
形式化定义
ML语言由标准ML的定义(修订版)(米尔纳,托夫特,哈珀,麦奎因,麻省理工出版社,1997),它用93页数学符号和英语散文。这本书不适合普通读者,但认真学习编程语言和它的存在和可访问性提供了一种实现依赖性标准ML的制定。
可靠性证明
语言定义采用形式化表示法的结果是那个能证明语言的重要属性,例如确定性评估或类型检查的可靠性。

|SML/NJ主页|

将您的评论发送到
版权所有©1998,朗讯科技;贝尔实验室.