道程式設計

道語言是一種面向對象腳本語言,支持動態變數聲明與複雜的數據類型, 擁有自動的記憶體管理功能,支持基於正則表達式的字元串模式匹配, 擁有內置的數值類型 (複數與不同精度的數值數組)以及相應於其基本運算的語法支持。 道語言對多執行緒編程也有內在的支持,並且很方便使用。 道語言可以很方便的用C/C++擴展,也可很方便的嵌入其他C++程式,相關接口簡單透明。

程式簡介,特性列表,程式示例,

程式簡介

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

相關詞條

熱門詞條

聯絡我們