現在道語言的擴展模組也逐漸豐富了起來,包括了支持CGI網站編程,MYSQL資料庫操作, lapack和GSL數值計算庫,GraphicsMagick圖像處理庫,MathGL數學繪圖,OpenGL三維圖形, SDL多媒體,vtk三維模型數據可視化,XML文檔處理和ZLIB數據壓縮等模組。值得提及的是,大部分這些封裝其他C/C++函式館的模組現在都是由一個自動化工具從這些函式館的頭檔案自動生成的封裝,此工具是使用道語言開發出來的。另外,道語言還包括了一個基於FFI庫的模組,通過此模組可以調用其他一些未專門為道語言封裝的C函式館,功能類似於Python的ctypes模組。
1 道語言開發緣起?
大約在2004年五月,因為需要使用Gene Ontology (GO)作一些數據分析,道語言的作者(傅利民,phoolimin at gmail)使用Perl寫了些腳本來解析 GO檔案。在使用Perl的過程中,他感覺Perl的語法比較繁瑣並且比較容易犯些意想不到的錯誤(也可以說陷阱比較多),後來更進一步發覺Perl對面向對象編程的支持和模組組織方式很不盡人意,於是對自己是否有能力設計一門更好的腳本語言有了很大的好奇心。在花了些時間嘗試之後,他就被語言設計和實現的挑戰性和趣味性所深深的吸引,並且將語言開發的工作堅持了下來。
在開發過程中,早期版本曾用過不同的名字,剛開始是Yuan,接著用過Tao,最後決定採用Dao(2005年底)。不過現在的道語言跟2006年前在設計和實現上有非常大的不同,可以認為2006之前之後是兩種不同的語言。從2006年初開始,作者對Lua5虛擬機的設計作了些了解,並且受其影響,決定將道解釋器也作為虛擬機實現。在開發道語言的虛擬機過程中,道語言的語法也有了很大的調整和完善,最後演變成了現在的樣子。
2 道語言最獨特的特性是什麼?
獨特性並不是道語言設計的主要目的,並不會為了獨特而去添加獨特的特性。道語言主要是作為一門實用程式語言設計的,其基本目的就是實現簡單幹淨的語法和比較好的運行效率。同時也儘可能借用其他語言的一些優良特性,並且實現一些不常見於主流語言的一些重要特性。
當然道語言還是有些獨特特性的,如,支持元編程的類BNF形式的宏系統,使得添加用戶定義的語法可象寫語法的BNF表示形式一樣。這種類BNF形式宏系統僅見於道語言裡。道還有其他獨特的特性,如簡單輕量且並行的正則表達式引擎,異步函式調用和基於Actor模型的分布並行計算模式(實驗階段)等。
道語言也支持些並不是很獨特但也並不常見於主流語言的特性,如可選類型(optional typing)系統,這種類型系統有很多優點,將來肯定會有越來越多的語言支持這種類型系統。道語言另一個很重要的特性就是透明的C/C++編程接口,正因為此接口的透明性,一個可以自動封裝C/C++函式館的工具很快被開發出來了,並且成功地封裝不少標準庫。此工具將來可用來封裝更多的庫。
一般情況下,道語言的速度是比較快的(當然這裡是跟其他腳本語言相比較而言)。但是在有些情況下,道也會變得比較慢,特別是當程式里有很頻繁的函式調用時。這是因為,道里函式調用要做不少運行時參數類型檢查,在這方面道還沒作什麼最佳化。如果程式里沒有頻繁的函式調用,道應該會比較快。
如果測試那些為 The computer language Benchmarks Game 寫的例程,應該可以發現,除了 binary_tree , meteor 和 regexdna 這幾個例子外,道應該是比較快的。 regexdna 比較慢,可能的原因是道語言的正則表達式匹配引擎需要同時處理多位元組字元串(Multi-Bytes String, MBS)和寬位元組字元串(Wide Character String, WCS)。另外,道解釋器的啟動也有點慢,不過在大部分情況下,解釋器的啟動時間跟程式的總的運行時間相比是可以忽略的,因此這不是問題。
道語言是作為一門通用語言來設計,並沒有特別針對某個特定的套用領域。不過當初道語言的設計動機之一是為生物信息學提供一門比Perl和R更好用的程式語言。隨著道語言越來越成熟並且功能模組也越來越多,道語言有希望成為比較適用於生物信息的程式語言之一。當然,道語言也有潛力套用於其他領域。如果誰有意在自己的領域嘗試使用道並希望的到幫助,請同作者聯繫。
5 道語言的未來開發計畫?語言設計與實現: 完善道語言的即時編譯器; 實現位元組碼的儲存格式; 完善基於Actor模式的並行分布計算模式; 模組庫和包: 使DaoDataModel支持其他資料庫; 封裝更多的C/C++庫; 基於Qt(或fltk)的圖形用戶界面工具箱; 類Matlab的數據畫圖函式; 統計計算模組(可能從R採用一些); 包含一些標準方法的生物信息模組。 工具: 完善autobind.dao工具; 跨平台的道語言圖形界面終端開發環境