程式簡介
現在
道語言的擴展模組也逐漸豐富了起來,包括了支持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 }