CLU

CLU是一門程式語言,其首先是由麻省理工學院(MIT)的Barbara Liskov和他的學生們於1974到1975年間推出的。CLU因其使用抽象數據類型的構造函式而被人注意,並且還包括操作的代碼,更為關鍵的是它是具有面向對象方向的一門語言。但是許多的面向對象的方法CLU卻沒有,如繼承。CLU也因此被稱為“基於對象”(Object-based)的語言,而非“面向對象編程”(OOP)的語言。

基本信息

主要特徵

CLU的編程語法是基於ALGOL的語法規則的,這也成為其後大多數新語言設計的起點。CLU的關鍵概念是群組,CLU的類型擴展系統和語言名字的由來是源於CLUster。群組通常對應於面向對象語言中“類”的概念以及相似的語法規則。舉例來說,下面就是一個群組語法實現complex_number:

complex_number = cluster is add, subtract, multiply, ...
rep = record [ real_part: real, imag_part: real ]
add = proc ... end add;
subtract = proc ... end subtract;
multiply = proc ... end multiply;
...
end complex_number;

一個群組是封裝了所有組件的模組,除了那些顯示指定的"is"語句,群組還定義了一個類型可以被外部的群組所命名(如同上面的complex_number),但其表示的類型對於外部用戶是隱藏的。

群組的命名是全局性的,並且沒有集群提供的命名空間機制或允許他們被其他本地群組所創建。CLU不執行隱式類型轉換,在群組中要顯式地轉換抽象類型與表示之間的“上”和“下”關係。CLU提供了一種通用的類型“any”和一個過程強制檢查對象為一個確定類型。對象可能是可變或者一成不變的,而後者則是基類型,如整型、布爾類型、字元類型和字元串類型。

其他特性

CLU類型系統的另外一個重要的特性是它的疊代器( iterators),它會從容器中將對象一個一個地返回。不管使用何種數據類型,疊代器都提供了一種通用的API(應用程式接口),因此一個疊代器既可以用於complex_number容器,也可以套用於一個數組類型。CLU疊代器的一個獨特特性是它們實現了協同程式,每一個提供給調用者的值都是通過“yeild”聲明的。CLU中疊代器這種特性已經成為現代許多語言的常見特性了,如C#,Ruby和Python,儘管他們都管它叫生成器(generator)。

CLU還包括了很多語言當中都在嘗試的異常處理,異常由signal標記捕獲,由except進行處理。 不像大多數其它語言異常處理,異常不隱式提示主調鏈;既不進行捕獲也不明確提示,而是立即轉換成一個特殊的失敗異常,一般是終止程式。CLU被認為是第一個類型安全的程式語言,在這一方面甚至要領先於ML。

CLU最後的一個特性是多任務,它允許超過一個變數出現在賦值運算符的左側。舉例來說,x,y=y,x將交換x和y的值。同樣的,函式可以返回多個值,像x,y,z=fun(t)。CLU中所有的對象都存在堆空間中,並且記憶體管理也是自動處理的。CLU還支持用戶自定義的抽象數據類型。CLU是第一個提供安全參數化類型的語言,使用where語句結構來表達對實際類型參數的約束。

影響

Python和Ruby引用了CLU中的一些概念(如共享調用、yield語句和多任務等)。

CLU和Ada是C++模板設計的來源。

CLU的異常處理機制也影響了像Java和C++這樣的新語言。

C++,C#,Python和Sather包括疊代器,它最早出現在CLU。

Lua從CLU調用多任務和多返回值功能。

1.

Python和Ruby引用了CLU中的一些概念(如共享調用、yield語句和多任務等)。

2.

CLU和Ada是C++模板設計的來源。

3.

CLU的異常處理機制也影響了像Java和C++這樣的新語言。

4.

C++,C#,Python和Sather包括疊代器,它最早出現在CLU。

5.

Lua從CLU調用多任務和多返回值功能。



相關詞條

相關搜尋

熱門詞條

聯絡我們