天天看点

OCaml语言学习笔记(一)——Introduction to Objective Camel

Chapter1: Introduction

        Objective Caml语言又称OCaml语言,是ML(Meta Language)语言家族的一种。OCaml语言与传统的ML语言有相同之处,同时又有自己独有的特点。

        ML语言的特点如下:

        1. ML语言是函数式语言(functionallanguage)。函数在ML语言中可以被嵌套、作为参数进行传递抑或是存储在数据结构中。

        2. ML语言是强类型的(stronglytyped),程序中每个变量或是表达式的类型都在编译时(compile-time)决定。

        3. 与强类型性相关的是,ML语言中使用类型推导(type inference)来推测表达式的类型。虽然ML是强类型的,但是很少需要程序员将所有表达式的类型都显式标明。

        4. ML的类型系统是多态的(polymorphic),也就是可以编写与具体类型无关的程序。

        5. ML中通过模式匹配(patternmatching)机制来统一情况分析(case analysis)和数据回收(data destructors)。

        6. ML语言中含有模块系统(module system),通过它来抽象地定义和实现数据结构。模块系统提供了函数子(functors)来从一个数据结构上生成另一个数据结构。

        7.  所有的ML语言家族的语言都含有形式语义(formal semantics),即使用ML语言编写的程序都拥有数学解释,使得程序更易懂。

        OCaml语言独有的特点如下:

        1. OCaml语言是ML语言中唯一被广泛使用的含有对象系统(object system)的语言。OCaml语言中的模块系统和对象系统相辅相成:模块系统提供了数据抽象,而对象系统则提供了继承(heritance)和重用(re-use)。

        2. OCaml编译器支持分别编译(separate compilation)以减少代码修改后不必要的冗余编译。OCaml提供了两种编译器:字节码编译器(byte-code compiler),生成适合轻便的OCaml字节码翻译器的代码;本地码编译器(native-code compiler),生成适合多种体系结构的高效代码。

        函数式语言vs. 命令式语言(imperative language,例如C语言)

        ML语言大部分是函数式的,即在普通的编程的形式下是函数式的,但是也会包含有赋值(assignment)和副作用(side-effects)。在ML语言中,除了IO外基本不会使用赋值和副作用。

        纯函数式语言有优势也有劣势:最大的优势是程序中的数据结构是不会改变的,不存在数据结构被回收的情况。劣势:每一个可变的数据结构都必须作为参数传递给使用它的函数,这一过程称为threading the state,这使得程序变得复杂难读。

        为此使用了折衷的方法:在不得已必要时使用命令式语言。

继续阅读