本篇文章給大家分享的是有關(guān) D語言基礎(chǔ)知識有哪些,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比復(fù)興網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式復(fù)興網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋復(fù)興地區(qū)。費用合理售后完善,十多年實體公司更值得信賴。
引言
D 語言是一門語法相當(dāng)優(yōu)雅的編譯型語言,自 1999 年發(fā)布至今已發(fā)展了 20 年,它既擁有 Java 那樣強(qiáng)大的表現(xiàn)力,又具有 C++ 相當(dāng)?shù)男阅?,本來是一門未來相當(dāng)明朗的語言,但是當(dāng)年因為 2.x 版本破壞性升級導(dǎo)致社區(qū)大量核心開發(fā)者將其放棄。
2010 年,伴隨著 Andrei Alexandrescu 新書《The D Programming Language》的出版,D 語言又變得活躍起來,D 語言 2.0 的特性變得穩(wěn)定,運(yùn)行庫與標(biāo)準(zhǔn)庫的分離,解決了 D 語言 1.0 時期標(biāo)準(zhǔn)庫之爭的問題。
2011年,D 語言的開發(fā)遷移到了 Github,在有了更好的代碼管理和 bug 跟蹤方式之后,參與到 D 語言編譯器、運(yùn)行庫和標(biāo)準(zhǔn)庫開發(fā)的人員也有了明顯的增加。次年,D 語言 1.0 版本停止更新,開發(fā)者全力投入到 2.0 的開發(fā)。
2014年,D 語言編譯器前端代碼的許可協(xié)議變更為更加寬松的 Boost 許可。在 2017 年,編譯器所有代碼最終都使用了 Boost 許可。在解決編譯器源碼許可問題之后,D 語言在開源社區(qū)中變得更加開放,并順利合并進(jìn)入了 GCC 9.x。
直到 2015年,D 語言社區(qū)進(jìn)一步恢復(fù)活力,基于包管理的構(gòu)建方式開始成熟,大量的開發(fā)庫開始涌現(xiàn)并應(yīng)用到實際項目中。目前,已注冊項目庫達(dá) 1 千 6 百多個。
重新燃起希望的 D 語言在版本發(fā)布的規(guī)劃上非常穩(wěn)健,直至今日來說每兩個月都可以保證一個大版本的發(fā)布。平均每個版本的開發(fā)者數(shù)量都有超過 50 個核心貢獻(xiàn)者,最近的 2.087.0 更是達(dá)到了 62 位核心開發(fā)者的貢獻(xiàn)。
編程語言的戰(zhàn)爭異常慘烈,本文希望通過介紹,讓開發(fā)者重新來了解一下 D 語言,認(rèn)識到 D 語言其實是一門能力強(qiáng)大的語言,并且它可以用于不同的場景,生態(tài)也在不斷發(fā)展完善中。
第一部分:D 語言主要特點
D 語言是在吸取 C++ 遇到的各種教訓(xùn)基礎(chǔ)上設(shè)計出來的,擁有與之類似的編程風(fēng)格,許多概念與 C 或 C++ 都是相通的。不過,D 語言也有自己的一些特點,如支持閉包、匿名函數(shù)、編譯時函數(shù)執(zhí)行、支持垃圾回收等。具體來講,D 語言擁有以下幾個主要特點:
面向?qū)ο缶幊?/strong>
D 語言允許定義類和接口。像 Java 一樣,D 語言的繼承模型是單類繼承和多接口繼承。所有的類都有一個根類 Object。D 語言的類和接口都是引用類型,而結(jié)構(gòu)是值類型,且不允許繼承。
函數(shù)式編程
D 語言像 C++ 一樣,允許在類或結(jié)構(gòu)外單獨定義函數(shù)。它還提供了各種不可變數(shù)據(jù)類型、匿名函數(shù)和閉包、UFCS(統(tǒng)一函數(shù)調(diào)用語法)等特性來更好地支持函數(shù)式編程。
泛型編程
D 語言允許定義模型類型,也支持直接定義模板類和模板函數(shù)。模板允許嵌套定義,模板方法甚至允許遞歸調(diào)用。通過模板約束可以實現(xiàn)模板類型重載。模板參數(shù)支持不定個數(shù)類型。除此以外,模板參數(shù)類型還支持自動推導(dǎo)。
元編程
D 語言里的純函數(shù)不會對全局變量產(chǎn)生任何影響,因此可以在編譯時直接調(diào)用。借助 static if、static foreach、mixin 等語句,可以編寫在編譯時執(zhí)行的代碼,動態(tài)生成代碼,滿足快速定制應(yīng)用功能的需求。
安全內(nèi)存
默認(rèn)支持基于垃圾回收的內(nèi)存管理方式,從而讓編程變得更簡單,內(nèi)存變得安全,程序變得更穩(wěn)定。除此之外,也可以根據(jù)需要對關(guān)鍵的內(nèi)存資源選擇手動管理方式。借助 scope 語句,可以很好地控制內(nèi)存資源申請和釋放點。D 語言內(nèi)部有一套核心的類型定義和實現(xiàn),它是 D 語言的一個子集,也被稱作 SafeD,用于保護(hù)內(nèi)存的安全。
模塊化編程
D 語言的每一個源文件都被定義為一個模塊(module),源文件之間的依賴即體現(xiàn)了模塊之間的依賴。同一目錄下的多個模塊可以組成一個包(package)?;谀K的代碼讓項目的邏輯變得更加清晰,也為項目的快速構(gòu)建和編譯提供了支持。
其他語言交互
D語言的ABI與C語言完全兼容,因此它也具有很好的與其他語言交互的能力,如與 C、C++ 和 Objective-C 等語言進(jìn)行交互編程。D 語言甚至支持直接嵌入?yún)R編語言,部分性能關(guān)鍵的代碼可以直接使用匯編語言來實現(xiàn)。D 語言的 BetterC 特性是 D 語言的一個子集,能完全去除 GC 依賴,并以更好 C 語言的方式來代替 C 語言編程,它能勝任 C 語言做的絕大部分工作。在 Windows 平臺下,可以使用 COM 接口實現(xiàn)與其他語言的交互。
基于包的應(yīng)用構(gòu)建
這個不屬于 D 語言本身特性,但是在 D 語言的開發(fā)生態(tài)里,這是一種很非常重要和便捷的 D 語言應(yīng)用構(gòu)建方式。dub 是 D 語言的應(yīng)用構(gòu)建工具,它可以很好地管理應(yīng)用包之間的依賴關(guān)系,快速地構(gòu)建出 D 語言應(yīng)用。
除了上述特點,D 語言還提供了許多其他特性,如內(nèi)建關(guān)聯(lián)數(shù)組、單元測試、內(nèi)聯(lián)匯編、內(nèi)嵌文檔等,這些特性讓 D 語言成為了一門功能強(qiáng)大的語言。
第二部分:與其它語言的簡要對比
D 語言與 Java 相比
眾所周知 Java 對工業(yè)化架構(gòu)的設(shè)計非常棒,遠(yuǎn)超越 C++、Golang 等語言,能與 Java 相提并論的只有 C#,在研究中我們發(fā)現(xiàn) D 同樣具備工業(yè)化的特性,而且不需要那么龐雜的虛擬機(jī)開發(fā)環(huán)境,D 的性能比起 Java 來說好的非常明顯,而且整合 C、C++ 庫的時候也非常方便,而 Java 想整合 C、C++ 就需要非常麻煩的 jni 對去接。畢竟 D 語言是名副其實的系統(tǒng)級開發(fā)語言,D 語言在面向?qū)ο蠓矫娌⒉幌?Java 那樣強(qiáng)制每個文件都是對象,而更像 C++ 那樣擁有一個 main() 函數(shù)作為程序入口。
示例代碼
import std.stdio; void main() { writeln("Hello world!"); }
D 語言與 C++ 相比
說到性能,C++ 一直占據(jù)服務(wù)端高性能的首選,但是 D 的性能與 C++ 相比幾乎打成平手,但效率可以 3~5 倍于 C++。當(dāng)然 D 與 C 語言各種庫整合同樣方便,因為 D 語言是二進(jìn)制與 C、C++ 兼容的,語法更像是 C++ 的超級升級版,D 在對 hashMap 操作時性能比 C++ 還要高,而且只要是掌握 C++ 的人可以沒有任何門檻地使用 D 語言。
示例代碼
import std.stdio; void main() { foreach(i; 1..10) { writeln(i); } }
D 語言與 PHP 相比
PHP 是服務(wù)端腳本語言占有率最高的語言,PHP 的優(yōu)勢就是簡單,無需引入什么包就可以使用語言本身的所有函數(shù),但是也就是這樣 PHP 的性能一直沒有明顯改進(jìn),雖然說 PHP 7.x 的出現(xiàn)讓 PHP 的性能提升了 2.x 倍,但是那只是和非常慢的 PHP 5.x 相比而已,與編譯型語言相比還是相差太多。PHP 有非常明顯的短板,比如不支持多線程、長連接不友好、弱類型、跨語言 RPC 協(xié)議支持不穩(wěn)定、部署需要 PHP 運(yùn)行環(huán)境等,而 D 語言具備 C++ 可實現(xiàn)的所有功能,包括內(nèi)嵌匯編,開發(fā)效率上來講與 PHP 相比只是多了個強(qiáng)類型的概念,而 D 語言標(biāo)準(zhǔn)庫也提供 to 方法讓你非常方便地進(jìn)行各種類型的轉(zhuǎn)換。
示例代碼
import std.stdio : writeln; import std.conv : to; void main() { int i = 10000; string s = "Is string "; s ~= i.to!string; // PHP 使用點連接兩個字符串,而 D 語言使用波浪線連接兩個字符串 writeln(s); // 輸出結(jié)果 Is string 10000 }
D 語言可替代 C 語言
前陣子有一篇文章比較火,有一位 i3 核心開發(fā)者在文章中說到,D 才是真正替代 C 的首選語言,他認(rèn)為 D 二進(jìn)制與 C、C++ 完全兼容所以可直接使用這兩個語言的二進(jìn)制庫,D 甚至可以用 dpp 項目直接 #include 語法引入 *.h 文件,作者同時也說到為什么 C 的替代者不是 Rust 和 Golang,有興趣的同學(xué)可以自行了解原文《D as a C Replacement》。
gcc 整合 D 語言編譯支持
這是一個非常大的進(jìn)步,在近期發(fā)布的 gcc 9.1 大版本中整合了 DLang 全新的編譯器前端也就是 gdc,現(xiàn)在整個社區(qū)有更多開發(fā)者對 D 項目進(jìn)行推進(jìn),也有更多人在使用 D 完成之前 C/C++ 的工作。
第三部分:D 語言主要應(yīng)用
作為一門支持 GC 的系統(tǒng)語言,D 語言已被許多公司采納和應(yīng)用,其中不乏像 Facebook、eBay 這樣的大公司。D 的應(yīng)用涉及了游戲、Web 應(yīng)用、GUI 應(yīng)用、操作系統(tǒng)、編譯器、嵌入式、科學(xué)計算與教育等多個領(lǐng)域。
游戲開發(fā)
Remedy 公司已成功地用 D 語言將一款 3A 游戲 Quantum Break 移植到了 XBox One 和 Windows 10 平臺。另外,有純 D 語言實現(xiàn)的 3D 游戲引擎 Dash 和 D 語言游戲開發(fā)工具庫 gfm。
Web 框架
編程語言在 Web 服務(wù)端框架非常重要,有好用的框架可以讓整個語言充滿活力,就像 Java 有一個 Spring Framework 框架,PHP 有一個 laravel 框架,Python 擁有一個 Django,而 Ruby 擁有 Rails,所以既然是構(gòu)建服務(wù)端應(yīng)用 DLang 也同樣擁有一個代表性的框架 Hunt Framework。
數(shù)據(jù)庫操作
數(shù)據(jù)庫操作是大部分應(yīng)用項目都不可或缺的一個基本操作,操作方式主要有兩種:編寫 SQL 腳本和 ORM。
直接操作數(shù)據(jù)庫的 D 語言開庫有 ddbc / (http://code.dlang.org/packages/ddbc)hunt-database 等,支持的數(shù)據(jù)庫包括 MySQL、PostgreSQL 和 SQLite 等。其中,新版本的 hunt-database 的底層驅(qū)動庫已從綁定 C 語言的方式升級為了直接使用 D 語言實現(xiàn),減少了對第三方庫的依賴。
采用 ORM 方式的 D 語言開庫有 hibernated / hunt-entity 等。其中,hunt-entity 借鑒了 Java JPA 和 spring-data-jpa 的概念,工業(yè)化程度高,操作合理并且易于維護(hù)。
微服務(wù)相關(guān)
hunt-service 是基于 gRPC 協(xié)議的分布式 RPC 服務(wù)器與客戶端庫,很容易使用,也非常方便與 hunt-framework 整合構(gòu)建微服務(wù)架構(gòu)。
neton 是基于 raft 算法的分布式服務(wù)發(fā)現(xiàn)注冊應(yīng)用服務(wù)。
GUI 應(yīng)用
其實 D 語言的推出比較早,所以 GTK 的整合非常完整,眾所周知 gtk 官方的 vala 語言也大量借鑒了 D 的語言設(shè)計,所以 gtkd 能夠非常方便的構(gòu)建客戶端應(yīng)用,官方也有開發(fā)者推出了新的教程站點非常棒:gtkDcoding | Simple examples of how to use GtkD to build GUI applications(https://gtkdcoding.com/)
此外,純 D 語言實現(xiàn)的跨平臺 GUI 庫 dlangui 也有不俗的表現(xiàn),有一個 DLangIDE 就是基于它實現(xiàn)的。更多 GUI 庫可以參考這里。
系統(tǒng)應(yīng)用
在編譯器方面,DMD 前端已實現(xiàn)自舉。在操作系統(tǒng)方面,有 PowerNex(https://github.com/xomboverlord/xomb/tree/unborn) 與 Trinix 等系統(tǒng)嘗試。編譯器 LDC 甚至允許在更多的系統(tǒng)平臺下進(jìn)行應(yīng)用開發(fā),如支持基于 ARM 和 MIPS 架構(gòu)的嵌入式系統(tǒng)、Android 系統(tǒng)等。
科學(xué)計算
現(xiàn)在使用 D 語言可以方便的進(jìn)行科學(xué)計算,mir 是其中的佼佼者,它對多維數(shù)組計算提供了優(yōu)秀的支持,性能超越了許多數(shù)值計算庫,達(dá)到商業(yè)水平。
以上就是 D語言基礎(chǔ)知識有哪些,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。