求真百科歡迎當事人提供第一手真實資料,洗刷冤屈,終結網路霸凌。

D語言檢視原始碼討論檢視歷史

事實揭露 揭密真相
前往: 導覽搜尋

D語言,一種通用計算機程序語言,威力強大、功能豐富,支持多種編程範式,例如面向對象。D語言最初由Digital Mars公司就職的Walter Bright於2001年發布,意圖改進C++語言。最新D語言被簡稱為D2。最主要的D語言的實現是DMD。

D 語言源自C/C++,借鑑了眾多編程語言的特色和現代編譯器技術,融會貫通了設計者豐富的實踐經驗,使之具備了非凡的威力--既有 C/C++ 語言的強大威力,又有 Python 和 Ruby 的開發效率。它集眾多系統級編程所需的功能於一身,例如垃圾回收、手工內存操作、契約式設計、高級模板技術、內嵌匯編、內置單元測試、Mixin 風格多繼承、類 Java 包管理機制、內置同步機制、內建基本運行時信息。[1]

D 語言在C++的基礎上有一定的擴展,同時還保持了生成高效代碼以及直接訪問操作系統API和硬件的能力。D 很適合於編寫從中等規模到團隊合作完成、數百萬行代碼規模的各種程序。

D 易於學習,為編程者提供了各種便利,採用了各種野心勃勃的編譯器優化技術。D 不是一種解釋型語言,所以不需要虛擬機。它是給實際的編程者使用的實用的計算機程序語言,幫助程序員快速、可靠地完成易於維護、易於理解的代碼。

D 是數十年來實現多種語言編譯器的經驗的積累,是用那些語言構造大型工程的嘗試的積累。D 從那些語言(主要是 C++ )那裡獲得了靈感,並使用經驗和現實世界中的實用性來馴服它。

為什麼需要D語言

自從 C++ 語言被發明以來,許多新的概念加入了 C++ ,但同時維護了於C 的兼容性,包括兼容了原始設計中的所有的弱點。有很多修正這些弱點的嘗試,但是兼容性是最大的困擾。同時,C 和 C++ 都在不斷引入新的特性。這些新特性必須被小心的加入到現有的結構中,以免重寫舊的代碼。最終導致了十分複雜的語言規範—— C 標準近 500 頁,C++ 標準超過750 頁!C++ 實現起來既困難又代價高昂,導致各種實現之間都有差別,因此很難寫出完全在不同實現之間可以移植的 C++ 代碼。

C++程序員傾向於使用語言中的孤島來編程,也就是說,他們傾向於十分精通語言中的某個特性而避免使用其他特性。儘管代碼通常在編譯器之間是可移植的,但在程序員之間移植就不那麼容易了。C++ 的一個長處是它支持很多根本上不同的編程風格——但從長遠來看,互相重複和互相衝突的風格會給開發帶來妨礙。

C++ 在標準庫而不是語言核心中實現了可改變大小的數組和字符串拼接等。不在語言核心中實現這些功能造成了幾種不太理想的結果。是否能把 C++ 的能力釋放、重新設計並重鑄到一門簡單、正交並實用的語言中呢? 這種語言是否能做到易於正確實現,並使編譯器有能力有效地生成高度優化的代碼呢?

現代編譯器技術已經取得了很大的進步,有些原來用作原始編譯技術的補充的語言特性已經可以被忽略了(一個這樣的例子是 C 語言中的『register』關鍵字)。我們可以依賴現代編譯器的優化技術而不是使用語言特性(如同原始的編譯器所做的那樣)來獲得可以接受的代碼質量。

通過加入已經被證明的能夠提高生產力的特性、調整語言特性以避免常見但耗費精力的bug的出現,至少減少軟件開發成本10%。使代碼易於在編譯器之間、在機器之間、在操作系統之間移植。

支持多種編程範式,也就是至少支持命令式、結構化、面向對象和范型編程範式。對於熟悉 C 或者 C++ 的人來說,學習曲線要短。提供必要的低級訪問能力。

要使 D 的編譯器從根本上易於實現(相對於 C++ 來說)。要同本機的C語言應用程序二進制接口相兼容。語法要做到上下文無關。對編寫國際化的應用程序提供便利的支持。同時支持契約式編程和單元測試方法論。能夠構建輕量級的、獨立的程序。

適合於

經常使用lint或者類似的代碼分析工具以期在編譯之前減少 bug 的程序員。

將編譯器的警告級別調到最高的人和那些告訴編譯器把警告作為錯誤的人。

不得不依靠編程風格規範來避免常見的 C bug 的編程部門經理們。

認定 C++面向對象編程所允諾的功能由於 C++ 太複雜而不能達到的人。

沉溺於 C++ 強大的表達力但是被顯式內存管理和查找指針 bug 折磨得精疲力盡的人。

需要內建的測試和驗證機制的項目。開發百萬行規模的程序的團隊。

認為語言應當提供足夠的特徵以避免顯式處理指針的程序員。編寫數值運算程序的程序員。D 擁有眾多直接支持數值計算的特徵,例如直接提供了複數類型和擁有確定行為的NaN和無窮大。(這些都被加進了最新的 C99 標準,但是沒有加進 C++ 中。)

D 的詞法分析程序和解析程序完全互相獨立,並且獨立於語義分析程序。這意味着易於編寫簡單的工具來很好地處理 D 源碼而不用編寫一個完整的編譯器。這還意味着源碼可以以記號的形式傳遞個某個需要它的程序。

項目管理

版本控制

D 對從同一份源碼生成多個版本的程序提供了內建的支持。它替代了 C 預處理程序的 #if/#endif 技術。

廢棄

隨着代碼不停的演進,一些舊的庫代碼會被更新,更好的版本代替。同時舊的版本必須可用以支持舊的客戶代碼,舊的版本可以被標記為廢棄的 。可以通過編譯器的一個選項來判斷使用廢棄版本代碼的版本是否是合法的,這樣一來負責維護的程序員就可以更為輕鬆的判斷哪裡是依賴於已經被廢棄的特徵的。

沒有警告

D編譯器不會為可疑的代碼生成警告。代碼要麼可以被編譯器接受,要麼不能被編譯器接受。這樣就不會引起有關哪些警告確實是錯誤而那些不是的爭論,也就沒有如何處理它們的爭論了。對編譯器警告的需求本身就是不好的語言設計的表現。

視頻

D語言 相關視頻

計算機科學(11)程序語言
為什麼說程序是計算機的靈魂?編程語言和程序又有哪些聯繫?
{{#:d3164xiy1mm|560|390|qq}}

參考文獻

  1. D語言簡介,CSDN博客,2017-02-27