現在道語言的擴展模組也逐漸豐富了起來,包括了支持CGI網站編程,MYSQL資料庫操作, lapack和GSL數值計算庫,GraphicsMagick圖像處理庫,MathGL數學繪圖,OpenGL三維圖形, SDL多媒體,vtk三維模型數據可視化,XML文檔處理和ZLIB數據壓縮等模組。 值得提及的是,大部分這些封裝其他C/C++函式館的模組現在都是由一個自動化工具 從這些函式館的頭檔案自動生成的封裝,此工具是使用道語言開發出來的。 另外,道語言還包括了一個基於FFI庫的模組, 通過此模組可以調用其他一些未專門為道語言封裝的C函式館,功能類似於Python的ctypes模組。
特性列表:
支持方式或層次 | 特性概括 |
語言 | 面向對象編程 |
語言 | 可選(軟)類型系統 |
語言 | BNF形式宏或元編程 |
語言 | 函式式編程 |
語言 | 任意精度整數(大整數) |
語言 | 元組 |
語言 | 數值數組 |
內置方法 | 字元串的正則表達式匹配 |
內置庫 | 多執行緒編程 |
內置庫 | 網路編程 |
虛擬機 | 自動記憶體管理和垃圾回收 |
函式接口 | 嵌入與擴展 |
函式接口 | 打包腳本檔案到執行檔里 |
擴展模組 | 圖形用戶界面(GUI)編程 |
擴展模組 | 三維圖形與數據可視化 |
擴展模組 | 圖像處理 |
擴展模組 | CGI網站編程 |
擴展模組 | 資料庫操作 |
擴展模組 | 數據壓縮 |
擴展模組 | XML文檔處理 |
擴展模組 | 數值計算 |
擴展模組 | 運行時C庫封裝 |
腳本工具 | C/C++庫自動封裝 |
程式示例:
# 顯示類型申明,即使用類型名申明變數:
var1 : double = 0.0;
var2 : map<string,float>;
# 隱式類型申明,根據表達式的結果確定變數類型:
list1 = { 1, 2, 3 }
map1 = { "CD"=>123, "AB"=>456 }
tuple1 = ( 123, "ABC" )
# 帶元素名的元組類型:
tuple2 = ( index => 123, name => "ABC" )
vector = [ 1, 2, 3 ]
matrix = [ 1, 2; 3, 4 ]
tuple2. name = "another name";
stdio.println( matrix[1,:] ); # 第二行
# 帶參數類型標註的函式
routine Bar( a, b : int, c = "DEFAULT" )
{
stdio.println( "parameters:", a, b, c )
}
class Point
{
var X, Y, Z = 0.0;
routine Point( x=0.0, y=0.0, z=0.0 ){
X = x; Y = y; Z = z;
}
}
# 生成類實例的不同方法:
p1 = Point( 1, 2, 3 ); # 調用構造函式
p2 = Point{ 1, 2, 3 }; # 枚舉成員變數
p3 = Point{ Z=>1, X=>2, Y=>3 }; # 使用成員變數名枚舉
# 帶類型檢查的generators和coroutines
# int => tuple<int,int>
routine gen1( a = 0 )
{
k = 0;
while( k ++ < 3 ) a = yield( k, a );
return 0,0;
}
routine gen2( a = 0 )
{
return gen1( a );
}
g = @gen2( 1 );
stdio.println( 'main1: ', g( 1 ) );
stdio.println( 'main2: ', g( 100 ) );
stdio.println( 'main3: ', g( 200 ) );
# 函式式方法:
# 方法( 參數 )->|變數|{ 內聯函式 }
a = { 1, 2, 3 }
b = map( a ) -> { 10*x } # 產生 { 10, 20, 30 }
b = map( a ) -> |x| { 10*x } # 與上面等價
# map()能使用多個參數:
b = { 11, 22, 33 }
c = map( a, b ) -> |x,y| { x + y }
# 函式複合:
c = map( a, b )->|x,y|{ x + y, x - y }->|u,v| { u * v }