热门问题
时间线
聊天
视角

CLU

来自维基百科,自由的百科全书

Remove ads

CLU是一門程式語言,由芭芭拉·利斯科夫和她的學生在1974年到1975年於麻省理工學院(MIT)創造。雖然它沒有被廣泛使用,但它引入了抽象數據類型[8],和許多現在廣泛使用的特性,而被視為物件導向編程發展的重要一步。

快速預覽 編程範型, 設計者 ...

主要貢獻還包括:傳共享調用迭代器、多值返回(並行賦值形式)、參數化類型可變類型。值得注意的是它使用了具有構造器方法,但沒有繼承

Remove ads

聚類

CLU的語法基於了ALGOL,這是當時多數新語言設計的起點。關鍵增補是「聚類」(cluster)概念,它是CLU的類型擴展系統和語言名字的根源(CLUster)[9]。聚類一般對應於物件導向語言中「類」(class)的概念。例如,下面是CLU用來實現複數的語法:

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),但是它的表示類型(這裡的rep)對於外部客戶是隱藏的。

聚類名字是全局的,不提供名字空間機制來組織聚類,也不允許它們在其他聚類內部被「局部」創建。

CLU不進行隱式類型轉換。在聚類中,顯式類型轉換updown抽象類型和表示之間進行變更。有一個全體類型any,和一個過程force[]來檢查一個對象是否是一個特定類型。對象可以是可變的或不可變的,後者是基礎類型,比如整數、布爾值、字符和字符串[9]

Remove ads

其他特徵

CLU類型系統的另一個關鍵特徵是迭代器,它一個接一個的按順序的從一個搜集返回對象[9]。迭代器提供了一致的應用編程接口(API),而不管所用於的是什麼數據。因此針對complex_number搜集的迭代器,與針對integer數組的迭代器,可以互換使用。CLU迭代器的顯著特徵是它們被實現為協程,每個值都是通過yield語句提供給調用者的。像CLU中這樣的迭代器,現在是很多現代語言比如C#RubyPython的常見特徵,然而它們近來經常被稱為生成器。下面是迭代器的例子:

% 产生从1到n的奇数
odds = iter(n:int) yields int
    i:int
    i = 1
    while i < n do
        yield i
        i := i + 2
    end
end odds  
 
for i:int in odds(13) do
    print int$unparse(i) || "\n"
end

CLU還包括了異常處理,它參考了在其他語言中的各種嘗試;異常使用signal引發,並通過except處理。不同於具有異常處理的多數其他語言,異常不會被隱式的沿著調用鏈重新發起。不同之處還有,在CLU中異常被當作是正常執行流程的一部份,並作為「正常」而有效的一種類型安全的方式,用來退出循環或從函數返回;這種方式下,「除非」其他條件適用,可以直接指定返回值。既未捕獲也未顯式的重新發起的異常,被立即轉換成特殊失敗異常,這典型的會終止程序。

CLU經常被引證為具有類型安全的可變類型的第一個語言,在這裡叫作oneof,早於ML語言擁有的叫做代數數據類型標籤聯合

CLU中最後一個顯著特徵是並行賦值(多賦值),這裡多於一個變量可以出現在賦值算符的左側。例如,書寫x,y := y,x將交換xy的值。以相同的方式,函數可以返回多個值,比如x,y,z := f(t)。並行賦值(但未包括多返回值),在CLU之前已經出現在CPL(1963年)之中,叫作「同時賦值」[10],然而確是CLU使之流行,並被引證為對後來語言中出現的並行賦值有直接的影響。

在CLU程序中所有對象都存活在堆中,而內存管理是自動化的。

CLU支持參數化類型的用戶定義數據抽象。它是提供類型安全限定的參數化類型的第一個語言,它使用where子句結構,來表達在實際類型實際參數上的約束。

Remove ads

影響

CLU和AdaC++模板的主要啟發者[11]

CLU的異常處理機制影響了後來的語言如C++Java[12]

Sather英語SatherPythonC#所包含的迭代器,最早出現在CLU中。

PerlLua採用的多賦值和從函數調用返回多個值來自CLU[13]

PythonRuby從它引入了傳共享調用yield語句[14]和多賦值[15]

參考資料

Loading content...

外部連結

Loading content...
Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads