成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

重新認(rèn)識(shí) D 編程語(yǔ)言 —— 基礎(chǔ)篇

開(kāi)發(fā) 后端
D 語(yǔ)言曾經(jīng)興盛過(guò),也隨著信息技術(shù)發(fā)展而頹廢過(guò),但最終我們很高興的看到它又帶著強(qiáng)烈的自信開(kāi)始復(fù)蘇,希望通過(guò)本文讓現(xiàn)代計(jì)算機(jī)科學(xué)工作者進(jìn)一步了解這門(mén)具有獨(dú)特魅力的編程語(yǔ)言。

 引言

D 語(yǔ)言是一門(mén)語(yǔ)法相當(dāng)優(yōu)雅的編譯型語(yǔ)言,自 1999 年發(fā)布至今已發(fā)展了 20 年,它既擁有 Java 那樣強(qiáng)大的表現(xiàn)力,又具有 C++ 相當(dāng)?shù)男阅埽緛?lái)是一門(mén)未來(lái)相當(dāng)明朗的語(yǔ)言,但是當(dāng)年因?yàn)?2.x 版本破壞性升級(jí)導(dǎo)致社區(qū)大量核心開(kāi)發(fā)者將其放棄。

2010 年,伴隨著 Andrei Alexandrescu 新書(shū)《The D Programming Language》的出版,D 語(yǔ)言又變得活躍起來(lái),D 語(yǔ)言 2.0 的特性變得穩(wěn)定,運(yùn)行庫(kù)與標(biāo)準(zhǔn)庫(kù)的分離,解決了 D 語(yǔ)言 1.0 時(shí)期標(biāo)準(zhǔn)庫(kù)之爭(zhēng)的問(wèn)題。

2011 ,D 語(yǔ)言的開(kāi)發(fā)遷移到了 Github,在有了更好的代碼管理和 bug 跟蹤方式之后,參與到 D 語(yǔ)言編譯器、運(yùn)行庫(kù)和標(biāo)準(zhǔn)庫(kù)開(kāi)發(fā)的人員也有了明顯的增加。次年,D 語(yǔ)言 1.0 版本停止更新,開(kāi)發(fā)者全力投入到 2.0 的開(kāi)發(fā)。

2014 ,D 語(yǔ)言編譯器前端代碼的許可協(xié)議變更為更加寬松的 Boost 許可。在 2017 年,編譯器所有代碼最終都使用了 Boost 許可。在解決編譯器源碼許可問(wèn)題之后,D 語(yǔ)言在開(kāi)源社區(qū)中變得更加開(kāi)放,并順利合并進(jìn)入了 GCC 9.x。

直到 2015 ,D 語(yǔ)言社區(qū)進(jìn)一步恢復(fù)活力,基于包管理的構(gòu)建方式開(kāi)始成熟,大量的開(kāi)發(fā)庫(kù)開(kāi)始涌現(xiàn)并應(yīng)用到實(shí)際項(xiàng)目中。目前,已注冊(cè)項(xiàng)目庫(kù)達(dá) 1 千 6 百多個(gè)。

重新燃起希望的 D 語(yǔ)言在版本發(fā)布的規(guī)劃上非常穩(wěn)健,直至今日來(lái)說(shuō)每?jī)蓚€(gè)月都可以保證一個(gè)大版本的發(fā)布。平均每個(gè)版本的開(kāi)發(fā)者數(shù)量都有超過(guò) 50 個(gè)核心貢獻(xiàn)者,最近的 2.087.0 更是達(dá)到了 62 位核心開(kāi)發(fā)者的貢獻(xiàn)。

編程語(yǔ)言的戰(zhàn)爭(zhēng)異常慘烈,本文希望通過(guò)介紹,讓開(kāi)發(fā)者重新來(lái)了解一下 D 語(yǔ)言,認(rèn)識(shí)到 D 語(yǔ)言其實(shí)是一門(mén)能力強(qiáng)大的語(yǔ)言,并且它可以用于不同的場(chǎng)景,生態(tài)也在不斷發(fā)展完善中。

第一部分:D 語(yǔ)言主要特點(diǎn)

D 語(yǔ)言是在吸取 C++ 遇到的各種教訓(xùn)基礎(chǔ)上設(shè)計(jì)出來(lái)的,擁有與之類(lèi)似的編程風(fēng)格,許多概念與 C 或 C++ 都是相通的。不過(guò),D 語(yǔ)言也有自己的一些特點(diǎn),如支持閉包、匿名函數(shù)、編譯時(shí)函數(shù)執(zhí)行、支持垃圾回收等。具體來(lái)講,D 語(yǔ)言擁有以下幾個(gè)主要特點(diǎn):

面向?qū)ο缶幊?/strong>

D 語(yǔ)言允許定義類(lèi)和接口。像 Java 一樣,D 語(yǔ)言的繼承模型是單類(lèi)繼承和多接口繼承。所有的類(lèi)都有一個(gè)根類(lèi) Object。D 語(yǔ)言的類(lèi)和接口都是引用類(lèi)型,而結(jié)構(gòu)是值類(lèi)型,且不允許繼承。

函數(shù)式編程

D 語(yǔ)言像 C++ 一樣,允許在類(lèi)或結(jié)構(gòu)外單獨(dú)定義函數(shù)。它還提供了各種不可變數(shù)據(jù)類(lèi)型、匿名函數(shù)和閉包、UFCS(統(tǒng)一函數(shù)調(diào)用語(yǔ)法)等特性來(lái)更好地支持函數(shù)式編程。

泛型編程

D 語(yǔ)言允許定義模型類(lèi)型,也支持直接定義模板類(lèi)和模板函數(shù)。模板允許嵌套定義,模板方法甚至允許遞歸調(diào)用。通過(guò)模板約束可以實(shí)現(xiàn)模板類(lèi)型重載。模板參數(shù)支持不定個(gè)數(shù)類(lèi)型。除此以外,模板參數(shù)類(lèi)型還支持自動(dòng)推導(dǎo)。

元編程

D 語(yǔ)言里的純函數(shù)不會(huì)對(duì)全局變量產(chǎn)生任何影響,因此可以在編譯時(shí)直接調(diào)用。借助 static if、static foreach、mixin 等語(yǔ)句,可以編寫(xiě)在編譯時(shí)執(zhí)行的代碼,動(dòng)態(tài)生成代碼,滿(mǎn)足快速定制應(yīng)用功能的需求。

安全內(nèi)存

默認(rèn)支持基于垃圾回收的內(nèi)存管理方式,從而讓編程變得更簡(jiǎn)單,內(nèi)存變得安全,程序變得更穩(wěn)定。除此之外,也可以根據(jù)需要對(duì)關(guān)鍵的內(nèi)存資源選擇手動(dòng)管理方式。借助 scope 語(yǔ)句,可以很好地控制內(nèi)存資源申請(qǐng)和釋放點(diǎn)。D 語(yǔ)言?xún)?nèi)部有一套核心的類(lèi)型定義和實(shí)現(xiàn),它是 D 語(yǔ)言的一個(gè)子集,也被稱(chēng)作 SafeD,用于保護(hù)內(nèi)存的安全。

模塊化編程

D 語(yǔ)言的每一個(gè)源文件都被定義為一個(gè)模塊(module),源文件之間的依賴(lài)即體現(xiàn)了模塊之間的依賴(lài)。同一目錄下的多個(gè)模塊可以組成一個(gè)包(package)。基于模塊的代碼讓項(xiàng)目的邏輯變得更加清晰,也為項(xiàng)目的快速構(gòu)建和編譯提供了支持。

其他語(yǔ)言交互

D語(yǔ)言的ABI與C語(yǔ)言完全兼容,因此它也具有很好的與其他語(yǔ)言交互的能力,如與 C、C++ 和 Objective-C 等語(yǔ)言進(jìn)行交互編程。D 語(yǔ)言甚至支持直接嵌入?yún)R編語(yǔ)言,部分性能關(guān)鍵的代碼可以直接使用匯編語(yǔ)言來(lái)實(shí)現(xiàn)。D 語(yǔ)言的 BetterC 特性是 D 語(yǔ)言的一個(gè)子集,能完全去除 GC 依賴(lài),并以更好 C 語(yǔ)言的方式來(lái)代替 C 語(yǔ)言編程,它能勝任 C 語(yǔ)言做的絕大部分工作。在 Windows 平臺(tái)下,可以使用 COM 接口實(shí)現(xiàn)與其他語(yǔ)言的交互。

基于包的應(yīng)用構(gòu)建

這個(gè)不屬于 D 語(yǔ)言本身特性,但是在 D 語(yǔ)言的開(kāi)發(fā)生態(tài)里,這是一種很非常重要和便捷的 D 語(yǔ)言應(yīng)用構(gòu)建方式。dub 是 D 語(yǔ)言的應(yīng)用構(gòu)建工具,它可以很好地管理應(yīng)用包之間的依賴(lài)關(guān)系,快速地構(gòu)建出 D 語(yǔ)言應(yīng)用。

除了上述特點(diǎn),D 語(yǔ)言還提供了許多其他特性,如內(nèi)建關(guān)聯(lián)數(shù)組、單元測(cè)試、內(nèi)聯(lián)匯編、內(nèi)嵌文檔等,這些特性讓 D 語(yǔ)言成為了一門(mén)功能強(qiáng)大的語(yǔ)言。

第二部分:與其它語(yǔ)言的簡(jiǎn)要對(duì)比

D 語(yǔ)言與 Java 相比

眾所周知 Java 對(duì)工業(yè)化架構(gòu)的設(shè)計(jì)非常棒,遠(yuǎn)超越 C++、Golang 等語(yǔ)言,能與 Java 相提并論的只有 C#,在研究中我們發(fā)現(xiàn) D 同樣具備工業(yè)化的特性,而且不需要那么龐雜的虛擬機(jī)開(kāi)發(fā)環(huán)境,D 的性能比起 Java 來(lái)說(shuō)好的非常明顯,而且整合 C、C++ 庫(kù)的時(shí)候也非常方便,而 Java 想整合 C、C++ 就需要非常麻煩的 jni 對(duì)去接。畢竟 D 語(yǔ)言是名副其實(shí)的系統(tǒng)級(jí)開(kāi)發(fā)語(yǔ)言,D 語(yǔ)言在面向?qū)ο蠓矫娌⒉幌?Java 那樣強(qiáng)制每個(gè)文件都是對(duì)象,而更像 C++ 那樣擁有一個(gè) main() 函數(shù)作為程序入口。

示例代碼

 

  1. import std.stdio;  
  2. void main()  
  3.  
  4.     writeln("Hello world!");  

D 語(yǔ)言與 C++ 相比

說(shuō)到性能,C++ 一直占據(jù)服務(wù)端高性能的首選,但是 D 的性能與 C++ 相比幾乎打成平手,但效率可以 3~5 倍于 C++。當(dāng)然 D 與 C 語(yǔ)言各種庫(kù)整合同樣方便,因?yàn)?D 語(yǔ)言是二進(jìn)制與 C、C++ 兼容的,語(yǔ)法更像是 C++ 的超級(jí)升級(jí)版,D 在對(duì) hashMap 操作時(shí)性能比 C++ 還要高,而且只要是掌握 C++ 的人可以沒(méi)有任何門(mén)檻地使用 D 語(yǔ)言。

示例代碼

 

  1. import std.stdio;  
  2. void main()  
  3.  
  4.     foreach(i; 1..10)  
  5.     {  
  6.         writeln(i);  
  7.     }  

D 語(yǔ)言與 PHP 相比

PHP 是服務(wù)端腳本語(yǔ)言占有率最高的語(yǔ)言,PHP 的優(yōu)勢(shì)就是簡(jiǎn)單,無(wú)需引入什么包就可以使用語(yǔ)言本身的所有函數(shù),但是也就是這樣 PHP 的性能一直沒(méi)有明顯改進(jìn),雖然說(shuō) PHP 7.x 的出現(xiàn)讓 PHP 的性能提升了 2.x 倍,但是那只是和非常慢的 PHP 5.x 相比而已,與編譯型語(yǔ)言相比還是相差太多。PHP 有非常明顯的短板,比如不支持多線(xiàn)程、長(zhǎng)連接不友好、弱類(lèi)型、跨語(yǔ)言 RPC 協(xié)議支持不穩(wěn)定、部署需要 PHP 運(yùn)行環(huán)境等,而 D 語(yǔ)言具備 C++ 可實(shí)現(xiàn)的所有功能,包括內(nèi)嵌匯編,開(kāi)發(fā)效率上來(lái)講與 PHP 相比只是多了個(gè)強(qiáng)類(lèi)型的概念,而 D 語(yǔ)言標(biāo)準(zhǔn)庫(kù)也提供 to 方法讓你非常方便地進(jìn)行各種類(lèi)型的轉(zhuǎn)換。

示例代碼

 

  1. import std.stdio : writeln;  
  2. import std.conv : to;   
  3. void main()  
  4.  
  5.     int i = 10000 
  6.     string s = "Is string " 
  7.     s ~= i.to!string;    // PHP 使用點(diǎn)連接兩個(gè)字符串,而 D 語(yǔ)言使用波浪線(xiàn)連接兩個(gè)字符串  
  8.     writeln(s);    // 輸出結(jié)果 Is string 10000  

D 語(yǔ)言可替代 C 語(yǔ)言

前陣子有一篇文章比較火,有一位 i3 核心開(kāi)發(fā)者在文章中說(shuō)到,D 才是真正替代 C 的首選語(yǔ)言,他認(rèn)為 D 二進(jìn)制與 C、C++ 完全兼容所以可直接使用這兩個(gè)語(yǔ)言的二進(jìn)制庫(kù),D 甚至可以用 dpp 項(xiàng)目直接 #include 語(yǔ)法引入 *.h 文件,作者同時(shí)也說(shuō)到為什么 C 的替代者不是 Rust 和 Golang,有興趣的同學(xué)可以自行了解原文《D as a C Replacement》。

gcc 整合 D 語(yǔ)言編譯支持

這是一個(gè)非常大的進(jìn)步,在近期發(fā)布的 gcc 9.1 大版本中整合了 DLang 全新的編譯器前端也就是 gdc,現(xiàn)在整個(gè)社區(qū)有更多開(kāi)發(fā)者對(duì) D 項(xiàng)目進(jìn)行推進(jìn),也有更多人在使用 D 完成之前 C/C++ 的工作。

第三部分:D 語(yǔ)言主要應(yīng)用

作為一門(mén)支持 GC 的系統(tǒng)語(yǔ)言,D 語(yǔ)言已被許多公司采納和應(yīng)用,其中不乏像 Facebook、eBay 這樣的大公司。D 的應(yīng)用涉及了游戲、Web 應(yīng)用、GUI 應(yīng)用、操作系統(tǒng)、編譯器、嵌入式、科學(xué)計(jì)算與教育等多個(gè)領(lǐng)域。

游戲開(kāi)發(fā)

Remedy 公司已成功地用 D 語(yǔ)言將一款 3A 游戲 Quantum Break 移植到了 XBox One 和 Windows 10 平臺(tái)。另外,有純 D 語(yǔ)言實(shí)現(xiàn)的 3D 游戲引擎 Dash 和 D 語(yǔ)言游戲開(kāi)發(fā)工具庫(kù) gfm。

Web 框架

編程語(yǔ)言在 Web 服務(wù)端框架非常重要,有好用的框架可以讓整個(gè)語(yǔ)言充滿(mǎn)活力,就像 Java 有一個(gè) Spring Framework 框架,PHP 有一個(gè) laravel 框架,Python 擁有一個(gè) Django,而 Ruby 擁有 Rails,所以既然是構(gòu)建服務(wù)端應(yīng)用 DLang 也同樣擁有一個(gè)代表性的框架 Hunt Framework。

數(shù)據(jù)庫(kù)操作

數(shù)據(jù)庫(kù)操作是大部分應(yīng)用項(xiàng)目都不可或缺的一個(gè)基本操作,操作方式主要有兩種:編寫(xiě) SQL 腳本和 ORM。

直接操作數(shù)據(jù)庫(kù)的 D 語(yǔ)言開(kāi)庫(kù)有 ddbc / (http://code.dlang.org/packages/ddbc)hunt-database 等,支持的數(shù)據(jù)庫(kù)包括 MySQL、PostgreSQL 和 SQLite 等。其中,新版本的 hunt-database 的底層驅(qū)動(dòng)庫(kù)已從綁定 C 語(yǔ)言的方式升級(jí)為了直接使用 D 語(yǔ)言實(shí)現(xiàn),減少了對(duì)第三方庫(kù)的依賴(lài)。

采用 ORM 方式的 D 語(yǔ)言開(kāi)庫(kù)有 hibernated / hunt-entity 等。其中,hunt-entity 借鑒了 Java JPA 和 spring-data-jpa 的概念,工業(yè)化程度高,操作合理并且易于維護(hù)。

微服務(wù)相關(guān)

hunt-service 是基于 gRPC 協(xié)議的分布式 RPC 服務(wù)器與客戶(hù)端庫(kù),很容易使用,也非常方便與 hunt-framework 整合構(gòu)建微服務(wù)架構(gòu)。

neton 是基于 raft 算法的分布式服務(wù)發(fā)現(xiàn)注冊(cè)應(yīng)用服務(wù)。

GUI 應(yīng)用

其實(shí) D 語(yǔ)言的推出比較早,所以 GTK 的整合非常完整,眾所周知 gtk 官方的 vala 語(yǔ)言也大量借鑒了 D 的語(yǔ)言設(shè)計(jì),所以 gtkd 能夠非常方便的構(gòu)建客戶(hù)端應(yīng)用,官方也有開(kāi)發(fā)者推出了新的教程站點(diǎn)非常棒:gtkDcoding | Simple examples of how to use GtkD to build GUI applications(https://gtkdcoding.com/)

此外,純 D 語(yǔ)言實(shí)現(xiàn)的跨平臺(tái) GUI 庫(kù) dlangui 也有不俗的表現(xiàn),有一個(gè) DLangIDE 就是基于它實(shí)現(xiàn)的。更多 GUI 庫(kù)可以參考這里。

系統(tǒng)應(yīng)用

在編譯器方面,DMD 前端已實(shí)現(xiàn)自舉。在操作系統(tǒng)方面,有 PowerNex(https://github.com/xomboverlord/xomb/tree/unborn) 與 Trinix 等系統(tǒng)嘗試。編譯器 LDC 甚至允許在更多的系統(tǒng)平臺(tái)下進(jìn)行應(yīng)用開(kāi)發(fā),如支持基于 ARM 和 MIPS 架構(gòu)的嵌入式系統(tǒng)、Android 系統(tǒng)等。

科學(xué)計(jì)算

現(xiàn)在使用 D 語(yǔ)言可以方便的進(jìn)行科學(xué)計(jì)算,mir 是其中的佼佼者,它對(duì)多維數(shù)組計(jì)算提供了優(yōu)秀的支持,性能超越了許多數(shù)值計(jì)算庫(kù),達(dá)到商業(yè)水平。

結(jié)語(yǔ)

簡(jiǎn)單來(lái)說(shuō),D 語(yǔ)言是一門(mén)在各個(gè)領(lǐng)域具有優(yōu)勢(shì)的編程語(yǔ)言,同時(shí)它當(dāng)前的生態(tài)也在不斷發(fā)展,本文希望通過(guò)簡(jiǎn)單的介紹,讓開(kāi)發(fā)者重新認(rèn)識(shí) D 語(yǔ)言。如果你還不了解 D 語(yǔ)言,讀完本文,希望你對(duì)它產(chǎn)生興趣;如果你此前有聽(tīng)說(shuō)過(guò) D 語(yǔ)言,讀完本文,希望你能重新認(rèn)識(shí)它;如果你對(duì) Web 開(kāi)感興趣,請(qǐng)持續(xù)關(guān)注本系列接下來(lái)的 Web 應(yīng)用篇。

 

責(zé)任編輯:龐桂玉 來(lái)源: 中國(guó)開(kāi)源
相關(guān)推薦

2014-06-16 10:02:42

SwiftiOSWWDC

2014-01-06 11:23:54

Mesos設(shè)計(jì)架構(gòu)

2021-04-22 21:15:38

Generator函數(shù)生成器

2016-11-07 11:34:28

數(shù)據(jù)可視化大數(shù)據(jù)

2016-12-13 15:41:40

JavaHashMap

2019-02-24 21:27:26

物聯(lián)網(wǎng)網(wǎng)關(guān)物聯(lián)網(wǎng)IOT

2019-09-02 08:53:46

程序員

2021-11-11 05:00:02

JavaMmap內(nèi)存

2020-09-17 07:08:04

TypescriptVue3前端

2017-01-03 17:22:16

公共云安全

2012-06-26 11:11:44

架構(gòu)師

2022-09-08 13:58:39

Spring高并發(fā)異步

2022-03-04 09:28:29

代碼訪(fǎng)問(wèn)者模式軟件開(kāi)發(fā)

2010-02-25 09:57:35

2019-01-18 13:32:16

2015-03-19 10:15:54

程序員價(jià)值程序員價(jià)值

2012-01-11 09:12:25

程序員

2022-10-09 11:46:55

機(jī)器人人工智能

2019-04-15 14:32:11

2010-10-22 11:10:24

軟考
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产一区不卡 | 亚洲一区久久 | 色综合99| 伊人狠狠干| 久久国产精品一区二区三区 | 天天干天天干 | 欧美一级久久精品 | 天天躁日日躁狠狠很躁 | 99免费在线视频 | 久久国产精品久久久久久久久久 | 精品美女久久久 | 九九色综合 | 日韩视频精品在线 | 国产激情在线 | 国产美女视频黄a视频免费 国产精品福利视频 | 国产欧美精品一区二区 | 四虎影院欧美 | 亚洲色图图片 | 亚洲成人免费 | 亚洲一区二区三区免费在线观看 | 亚洲成人999 | 国产亚洲精品久久久久久豆腐 | 一区中文 | 欧美一区二区三区大片 | 久久久久久美女 | 免费看黄视频网站 | 日本午夜免费福利视频 | 久久精品视频网站 | 伊人色综合久久天天五月婷 | 欧美不卡| 成人国产精品色哟哟 | 日韩视频成人 | 人人九九精 | 99久久久久久99国产精品免 | 天堂va在线| 国产精品日本一区二区不卡视频 | 久久精品女人天堂av | 久久久免费电影 | 国产美女特级嫩嫩嫩bbb片 | av资源在线看 | 亚洲成人精品在线 |