天天看點

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,這使得程式變得複雜難讀。

        為此使用了折衷的方法:在不得已必要時使用指令式語言。

繼續閱讀