mozart-oz
mozart-oz語言是Universität des Saarlandes、Swedish Institute of Computer Science、Université catholique de Louvain等聯合開發的新一代電腦語言
,語言本身有haskell,lisp,prolog,c,perl,java等的影子,有你想要的幾乎全部特性,例如:
約束編程特性:
處理複雜約束中語言提供了搜尋引擎
,我們只用定義約束關
系即可,除非非常複雜的問題,一般不需要程式員定義搜尋
函數。下面是求解傳說中愛因斯坦
5國5色5物問題中的搜尋樹:
搜尋樹
約束問題寫起來很簡單:
decalre X Y in
X :: 1#11
Y :: 12#30
X+Y =: 25
X*Y =: 150
{Show [X Y] }
就能求解:
X 屬於 [1 11]
Y 屬於 [12 30] 求X Y使得滿足
X+Y=25
X*Y=150
條件的X和Y。
DataFlow特性:
變數可以後綁定值,先使用,比如:
declare X in
thread {Show X} end
X=100
程式執行倒第2行時X沒有綁定到值,線程會自動阻塞,直到
被綁定值,原始線程接下來給X賦值,第一個線程將會自動
執行。
分布式特性:
一個對象可以被多個主機引用,但如果有任何一個主機修改
了其值則全部的主機上該對象的值都將被自動同步(同步完
成前對該對象的操作自動阻塞)。其他語言的分布式編程中
都是提供同步機制由程式員控制,這給程式設計帶來了很多
麻煩,而在mozart中所有的語言元素包括提供的資料結構都
是直接支援分布式的,分布式完全有oz的虛擬機器完成處理,
我們編寫分布式
程式和編寫本地並發程式沒有什麼區別。
線程和並發特性:
建立線程非常方便:thread 運算式 end即可,
線程建立的速度大約為java的20倍。
程式中很多運算式,如條件選擇本身是多線程
實現的,比如100多個條件,有任何一個滿足則整體滿足,此時系統會自動對每個條件建立線程來檢查,有任何滿足的則全部線程退出,整體得到滿足。
在mozart-oz中,求解約束問題過程中建立過上百萬個線程是時常遇到的。
其他許多程式設計語言
的線程特性是提供庫或類支援的,相比而言語言直接的支援使得我們處理多線程會更加便利。
物件導向特性:
有全部的oo特性,尤其是支援多繼承,
如 獅身人面像 繼承自 獅子 人 石頭
而多繼承在很多語言裡是不允許的。
函數編程特性:支援函數作為另一個函數參數傳遞,支援函數返回另一個函數,支援高階函數,支援遞迴及尾遞迴……
如:
{Browse {Map [1 2 3 4] fun {$ I} I*10 end }}
將顯示結果 [10 20 30 40]
此外,mozart-oz還支援許多特性如惰性求值、模組化設計、和其他語言方便
的整合等就不是一篇文章能講完的了。
就由於有如此多的特性,因此mozart-oz叫多泛式語言。
這個語言,已經有近20年的曆史,已經非常成熟了,內建的文檔比較齊全,MIT
的《Press Concepts Techniques and.Models of Computer Programming》就是以這門語言來講解程式設計技術和模式的。