[D 語言教學] Lesson 0: 簡介

零、前言

為什麼會有這系列的文章呢?說實話,因為發現自己的部落格快乾死了,平常的研究生生活又只是混吃等死,一個人住的日子也寫不出什麼風花雪月,所以挑一個可以湊數的主題來寫。

我很喜歡到處玩程式語言,包括 C/Java/PHP 這些很平常的程式語言,也喜歡看一些新的,不怎麼知名但卻很有趣的程式語言,像是 Pike 和 D 語言等等。

D 語言是我接觸的其中一個程式語言,也是到目前為止,我覺得用起來最好玩又順手的語言之一,也是我第一個因為自己的需求,下去寫函式庫的程式語言,由此可以看出他對我的魅力。

D 語言還很新,也有一些缺點,函式庫也還不夠多,但他確實是一個迷人的程式語言,我發現當我改用 D 語言來寫資料結構與演算法的範例時,生產力提高非常多,除錯時間也明顯變少了。

或許這個程式語言還無法拿來在正式開發場合的使用,取代 Java 或 C++,但是當個人的玩具和小工具,卻是相當優秀的一個程式語言。

一、簡介

D 語言的全名是 The D Programming Language ,是由 Walter Bright 主導開發的一個新的程式語言,他的目標是實作一個擁有 C/C++ 高效能,以及現代程式語言如 Python/Ruby 的高生產力。

舉例而言,D 語言提供了可變動長度的陣列以及關聯式陣列,你可以在程式執行期間,動態改變陣列的長度,例如以下的程式碼在 D 語言中是完全合法而且可以執行的。

int [] array;       // 宣告一個還不知道長度的陣列

array.length = 3;   // 現在 array 的大小是 3
array.length = 10;  // 現在 array 的大小是 10

D 語言是編譯式的語言,換句話說,你不用為了執行 D 語言的程式,去下載幾十 MB 的 Java VM 或是 .NET Framework,寫完的程式碼直接編譯成可執行檔就可以執行了。

更令人興奮的是,D 語言採用了傳統編譯程式語言的開發流程,你可以不用被龐大而難用的 IDE 搞的暈頭轉向(雖然如果你想要用 IDE 也可以),你需要做的,只是下載編譯器,然後用文字編輯器寫程式就可以了。

D 語言在很多地方,是針對 Java/C++ 的缺點而補強,也吸收了許多其他程式語言的概念,例如內建了 Contract Programming 的語法,這是 Java/C++ 所沒有的。對於 D 語言所提供的功能,以及與其他程式語言的比較,可以參考這一份文件

D 語言同時也是一個務實導向的程式語言以及系統程式語言,你可以用最高階的封裝,但是在需要的時候,你也可以用最低階的 inline assembler 以及指標來做事,但更多的時候,你不需要例用指標就可以做到指標要做的事。

舉例而言,在 C/C++ 中,要做兩個整數的交換函式,必需使用指標或參考,而在 Java 中,則必需使用 Object Wrapper,但在 D 語言中,這個函式可以寫成下面的樣子:

void swap (ref int a, ref int b)
{
    int temp = a;
    a = b;
    b = temp;
}

void main ()
{
    int x = 3;
    int y = 5;

    swap (x, y);
}

我們可以看見,D 語言的語法相當簡潔和易讀,捨棄了 C++ 參考的語法,直接在函式的標頭指出,a 和 b 兩個變數是以 call by refrence 的方式傳遞。

更多的例子,您可以參考這一份稀疏矩陣的程式碼,其中展示了許多 D 語言的特色,包括動態長度陣列以及 Programming by Contract 等等,同時您也可以參考這份以該程式碼直接產生的 API 說明文件

二、D 語言目前的困境

在這裡不提 D 語言的優點,因為我相信一個程式語言的優點是無法以言語傳達的,只有真的下去使用或學習,才會了解這個程式語言是不是真的適合自己。

所以在這邊,我只提出當你選擇這個程式語言的時候會遇到的一些問題,而這些問題,很可能是你放棄 D 語言的原因。

首先,D 語言是一個還在開發的程式語言,雖然在前不久前才釋出 1.0 版本,把第一版的規格確定了。但目前 D 2.0 正在開發中,而目前已知 D 2.0 無法與 D 1.0 的程式碼向後相容。

也就是說,現在用 D 1.0 寫的程式,往後可能會需要重寫成 D 2.0 的版本,這是 D 語言目前的現況之一,你必需在已經確定的 1.0 與尚在開發,很有可能會繼續改變的 2.0 之中做出決擇。

需要決擇的還不只如此,目前 D 語言的標準函式庫還在爭執,D 內附的標準函式庫是 Phobos ,但是因為開發進度緩慢,有另一套開放原始碼的 Tango 正在與之競爭。

不幸的是,兩者並不相容,你必需在其中選擇其一。更麻煩的是,許多第三方的函式庫可能只支援 Phobos 或 Tango 其中一種,所以你必需做出決擇。

在這份文件中,我們將使用 Tango 做為標準函式庫,因為有愈來愈多的函式庫使用 Tango,但這是不是正確的選擇,沒有人知道。

這是你在使用 D 語言之前必需知道的,也是 D 語言最讓人不安的部份,你不知道現在寫的程式碼,以後能不能繼續無痛的維護下去,如果選錯邊,將來可能要付出更多的心力。

這也是為何我還不推薦把 D 語言用在正式的場合,而只適合當做個人工具的最大理由。

回響