跳至內容

D語言

出自Taiwan Tongues 台語維基
於 2025年8月22日 (五) 19:02 由 TaiwanTonguesApiRobot留言 | 貢獻 所做的修訂 (從 JSON 檔案批量匯入)

(差異) ←上個修訂 | 已批准修訂 (差異) | 最新修訂 (差異) | 下個修訂→ (差異)

D 語言是一種程式的語言,具備多範的,像講物件導向、指令式。由沃爾特 ・ 布萊特佮安德烈 ・ 亞歷山德雷斯庫所開發,起源自 C + +,真受著 C + + 的影響,毋過其實毋是 C + + 來變種,是重新設計來自 C + + 的部份特性,並且受著其他程式語言觀念的影響,如 Java、C # 以及 Eiffel。二空空七年一月二日釋出一四界零穩定版本。二空空七年一月十七日釋出二四零版本。

Walter Bright 本身是 Symantec C + + 編譯器的作者,另外一个作者 Andrei Alexandrescu 是 Facebook 的研究科學家,伊佮一个團隊用 D 語言重寫一寡 Facebook 的重要操作。

特性

D 的設計來自實際的 C + + 用法的經驗教訓,毋是對理論的角度。D 沿用足濟 C / C + + 觀念,同時放捒一寡概念,所以 D 並無完全相容 C / C + + 代碼。D 實作矣 C + + 的功能,實作了契約式設計(design by contract)、 單元測試、真正的模組性、自動化記憶體管理(糞埽回收)、 頭等陣列(first class array)、 關聯陣列、動態陣列、陣列切片、岫狀函式(岫狀函式)、 內部類別、閉包的限制形式、匿名函式、編譯時期函式執行、慢性計算以及革新的模板語法。D 保有 C + + 的效能以進行低階程式設計,並且加入完整的內聯組譯器支援。C + + 偌重繼承改以 Java 單繼承佮介面透濫的風格取代。D 的宣告、語句和表達式語法差不多和 C + + 仝款。

內聯組譯器(inline assembler)象徵矣 D 和 Java、C # 等應用程式語言的無仝。內底聯組譯器予程式員輸入機器特定的組合語言碼,親像標準 D 代碼—通常由系統程式員使用的技術,以存取處理器的低階功能,直接以硬體下的介面執行程式,如作業系統猶閣有驅動程式。

D 內建支援檔案註解,猶毋過目前為止,只有 Digital Mars 實作版本有提供檔案的產生器。

程式設計範型

D 支援五種主要的程式設計泛型—指令式、物件導向猶閣有元程式設計、函數式和並行(演員模型)。

指令式

指令式程式設計強欲佮 C 仝款。函式、資料、語句、宣告猶閣有表達式的運作就親像 C 一般,而且會使直接存取 C 執行的時期程式庫。

物件導向

佇咧 D 內底的物件導向程式設計,是以單繼承分層結構,配合所有類別衍生自類別物件做基礎。偌重繼承咧使用介面(介面足成的 C + + 的抽象類別)。

元程式設計

以模板組合、編譯時期函式執行、多元組和字串混合來支援元程式設計。

記持體管理

記憶體通常用糞埽回收管理,不而過當遮的物件超出作用域的時陣,會當隨結束指定的物件。猶是會當用重載算子 new 和 delete,猶閣有簡單的喝咻叫 C 的 malloc 函式佮 free 函式以進行顯示的記憶體管理。糞埽回收會當禁用個別的物件抑是事件,以健全規个程式,若佇記持體管理上有閣較濟控制,著愛閣較理想。當糞埽回收佇程式內底有所不足的時,手冊猶閣提供濟濟欲按怎實作無仝的懸度最佳化記憶體管理方案的範例。

佮其他系統的互相作用

支援 C 的應用程式二進制介面(ABI), 以及 C 的基本佮衍生型態,就會當直接存取現有的 C 代碼猶閣有程式庫。C 的標準函式庫嘛是 D 標準的一部份。除非你使用非常清楚的號名空間,伊會當小可散散的存取,因為伊散佈遍及著 D 模組—猶毋過純粹的 D 標準函式庫嘛通常有夠用,除非欲和 C 代碼接合。

並無完整支援 C + + 的 ABI,就算講 D 會當共存取寫 C ABI 的 C + + 代碼,而且這个存取 C + + COM(元物件模型)代碼。D 語法有分析器了解外部(C + +)呼喝約束,以連結 C + + 東西,猶毋過伊干焦實作佇咧 D 二孵空。

D 二孵空

D 二孵空,D 新一代版本,D 二鋪零佮 D 一孵空是無相容的,類似 Python 二和 Python 三的區別。目前 D 兩已經穩定落來。其中一部份特性包括支援強制常數正確性(const-correctness), 佮有限的支援連結以及 C + + 編寫的代碼。

實作

目前 D 直接編譯做原生碼以高效執行。

D 語言一 . x 版本已經穩定,無再功能變更加抑是擴充,二孵空版本是其正式版本,無完全相容舊版本的語言佮編譯器。官方編譯器由 Walter Bright 定義語言本身。

  • DMD 編譯器:Digital Mars D 編譯器,由 Walter Bright 編寫的官方 D 編譯器。編譯器頭前的授權許可為 Artistic License 和 GNU GPL 兩个人;前端的原始碼連同編譯器執行碼做伙發佈。編譯器的後端則是私有的。
  • GDC:D 一鋪零編譯器,以 DMD 編譯器頭前端,以及 GCC 後端所組成。
  • LDC:D 二嬸零編譯器,以 DMD 編譯器頭前端,以及 LLVM 後端所組成。LDC 的官方版本已經無支援 D 一垺零,但是分支版本猶原支援 D 一垺零。

問題佮爭議

算子重載

D 算子重載佇一定程度不如 C + + 強大。簡單的例是 opIndex,伊無允准轉去參照。這使像講 obj [i]=五 ; 的才值無可能存在。D 的解決方法是 opIndexAssign 運算子,伊干焦用於這種特殊情形。此外,C + + 倒轉去參考的方法允准倒轉型態的重載賦值運算子的用法。這佇目前的 D 猶閣無可能做甲。D 二嬸空將會引入 opIndexLvalue 修正-類似運算子重載和 opIndexAssign。

低功的結構

結構佇咧 D 內底是一種樸素舊式資料的型態,毋過嘛會當像變數仝款包含方法。這對有意輕量化的建構來講不止仔實用,如矩陣抑是向量,這無需要完整的 D 類別功能(佮體積)。 毋過,D 結構無建構佮解構子。建構子會當用靜態 opCall 運算子部份取代,毋過伊無適合的解構遮的價數。此外,結構無允准繼承,這會是有益的設計,如詭異循環模板模式(curiously recurring template pattern)的使用。

標準函式庫內底欠缺功能

D 的標準函式庫稱作 Phobos,而且定定予人認為過份簡單。tango 專案編寫另外一个標準函式庫來試圖修正這部份,猶毋過 phobos 和 tango 目前因為無仝的物件類別實際做(致使糞埽回收困難)互相無相容。存在兩種事實上的標準函式庫可能致使閣較大的問題,部份軟體使用 phobos,而其他軟體使用 tango。

欠缺明確的目標

D 經常限制「修正並改進的 C + +」。 這會致使過分強調功能,這起因為加入新功能只是因為𪜶認為有路用。比一个例,

未完成對共享/動態函式庫的支援

Unix 的 ELF 共享函式庫使用 GDC 編譯器支援到某一个程度。佇咧 Windows 系統當中,這馬猶閣無支援 DLL。所以現階段無可能編寫外掛程式。無成 C + +,經由 C 函式傳送的 D 物件將袂當運作,因為這會佮糞埽回收器產生衝突。

範例

範例一

這个範例程式會輸出伊家己的命令列參數。main 函式是 D 程式的進入點,args 是表示字串陣列的命令列參數。佇咧 D 語言內底的字攏是一字元陣列,以 char [] 表示。新版本當中定義 string 為 char [] 的別名,毋過別名定義著愛佮舊版本相容。

foreach 語法迵天所有的集合,佇本例中,伊對 args 陣列生索引(i)佮值(a)的序列。索引 i 佮值 a 的型態會對 args 陣列的型態推斷。

範例二

本例使用關聯陣列建立閣較複雜的資料結構。

範例三

本例誠濟的註解顯示出 D 語言佮 C + + 的無仝的所在,猶有猶原有保留的方面。

範例四

本例顯示出一部份 D 語言強大的編譯時期特性。

參考資料

外部連結

  • Digital Mars : D 程式語言(官方網站)
  • 開放式 kha-tá-lok-guh 計畫中和 D 相關的內容
  • DSource,D 語言的開放原始碼社群。
  • Dprogramming . com,視窗化程式庫 DFL 的首頁。
  • Wiki 四 D,「 D 語言的維基頁」
  • gdc,GCC 的 D 語言前端
  • 電腦語言評測遊戲
  • D 檔案的維基頁
  • D 語言特性列表
  • Walter Bright 介紹 D 語言的影片
  • Ddbg-Win 三十二 D 除錯器
  • DWin-D 語言庫
  • DLogo-D 語言揤鈕,廣告欄
  • SciTE 四 D-D 語言編輯器 \ * D 語言中國社區,  D 語言入門,D 語言 GUI 紹介等
  • D 語言中文論壇
  • D Programming Language 簡介
  • D 語言教學