亚洲国产区中文,国产精品91高清,亚洲精品中文字幕久久久久,亚洲欧美另类久久久精品能播放

                  族譜網(wǎng) 頭條 人物百科

                  D語(yǔ)言

                  2020-10-16
                  出處:族譜網(wǎng)
                  作者:阿族小譜
                  瀏覽:709
                  轉(zhuǎn)發(fā):0
                  評(píng)論:0
                  特性D的設(shè)計(jì)來(lái)自實(shí)際的C++用法的經(jīng)驗(yàn)教訓(xùn),而不是從理論的角度。D沿用了很多C/C++觀念,同時(shí)摒棄了一些概念,因此D并不完全兼容C/C++代碼。D實(shí)現(xiàn)了C++的功能,實(shí)現(xiàn)了契約式設(shè)計(jì)(designbycontract)、單元測(cè)試、真正的模塊性、自動(dòng)化內(nèi)存管理(垃圾回收)、第一類數(shù)組(firstclassarray)、關(guān)聯(lián)數(shù)組、動(dòng)態(tài)數(shù)組、數(shù)組切片、嵌套函數(shù)(嵌套函數(shù))、內(nèi)部類別、閉包的限制形式、匿名函數(shù)、編譯時(shí)期函數(shù)運(yùn)行、惰性計(jì)算以及革新的模板語(yǔ)法。D保有C++的性能以進(jìn)行低級(jí)程序設(shè)計(jì),并加入完整的內(nèi)聯(lián)匯編器支持。C++的多重繼承改以Java單繼承與接口混合的風(fēng)格取代。D的宣告、語(yǔ)句和表達(dá)式語(yǔ)法幾乎和C++一樣。內(nèi)聯(lián)匯編器(inlineassembler)象征了D和Java、C#等應(yīng)用程序語(yǔ)言的不同。內(nèi)聯(lián)匯編器讓程序員輸入機(jī)器特定的匯編語(yǔ)言碼,如同標(biāo)準(zhǔn)D代碼—通常由系統(tǒng)程序員使用的技術(shù),以...

                  特性

                  D的設(shè)計(jì)來(lái)自實(shí)際的C++用法的經(jīng)驗(yàn)教訓(xùn),而不是從理論的角度。D沿用了很多C/C++觀念,同時(shí)摒棄了一些概念,因此D并不完全兼容C/C++代碼。D實(shí)現(xiàn)了C++的功能,實(shí)現(xiàn)了契約式設(shè)計(jì)(design by contract)、單元測(cè)試、真正的模塊性、自動(dòng)化內(nèi)存管理(垃圾回收)、第一類數(shù)組(first class array)、關(guān)聯(lián)數(shù)組、動(dòng)態(tài)數(shù)組、數(shù)組切片、嵌套函數(shù)(嵌套函數(shù))、內(nèi)部類別、閉包的限制形式、匿名函數(shù)、編譯時(shí)期函數(shù)運(yùn)行、惰性計(jì)算以及革新的模板語(yǔ)法。D保有C++的性能以進(jìn)行低級(jí)程序設(shè)計(jì),并加入完整的內(nèi)聯(lián)匯編器支持。C++的多重繼承改以Java單繼承與接口混合的風(fēng)格取代。D的宣告、語(yǔ)句和表達(dá)式語(yǔ)法幾乎和C++一樣。

                  內(nèi)聯(lián)匯編器(inline assembler)象征了D和Java、C#等應(yīng)用程序語(yǔ)言的不同。內(nèi)聯(lián)匯編器讓程序員輸入機(jī)器特定的匯編語(yǔ)言碼,如同標(biāo)準(zhǔn)D代碼—通常由系統(tǒng)程序員使用的技術(shù),以訪問(wèn)處理器的低級(jí)功能,直接以硬件下的界面運(yùn)行程序,如操作系統(tǒng)以及驅(qū)動(dòng)程序。

                  D內(nèi)置支持文件注解,不過(guò)目前為止,只有Digital Mars實(shí)現(xiàn)版本有提供文件產(chǎn)生器。

                  程序設(shè)計(jì)范型

                  D支持三種主要的程序設(shè)計(jì)泛型—指令式、面向?qū)ο笠约霸绦蛟O(shè)計(jì)。

                  指令式

                  指令式程序設(shè)計(jì)幾乎和C一樣。函數(shù)、數(shù)據(jù)、語(yǔ)句、宣告以及表達(dá)式的運(yùn)作就如同C一般,且可直接訪問(wèn)C運(yùn)行時(shí)期程序庫(kù)。

                  面向?qū)ο?

                  在D里面的面向?qū)ο蟪绦蛟O(shè)計(jì),是以單繼承分層結(jié)構(gòu),配合所有類別衍伸自類別對(duì)象為基礎(chǔ)。多重繼承可使用界面(界面很像C++的抽象類別)。

                  元程序設(shè)計(jì)

                  以模板組合、編譯時(shí)期函數(shù)運(yùn)行、多元組以及字符串混合來(lái)支持元程序設(shè)計(jì)。

                  內(nèi)存管理

                  內(nèi)存通常以垃圾回收管理,不過(guò)當(dāng)這些對(duì)象超出作用域時(shí),可立即結(jié)束指定的對(duì)象。還是可以使用重載運(yùn)算符new和delete,以及簡(jiǎn)單的直接調(diào)用C的malloc函數(shù)和free函數(shù)以進(jìn)行顯示的內(nèi)存管理。垃圾回收可禁用個(gè)別的對(duì)象或事件,以健全整個(gè)程序,如果在內(nèi)存管理上有更多的控制,則更為理想。當(dāng)垃圾回收在程序中有所不足時(shí),手冊(cè)還提供許多如何實(shí)現(xiàn)不同的高度最優(yōu)化內(nèi)存管理方案的示例。

                  與其它系統(tǒng)的相互作用

                  支持C的應(yīng)用程序二進(jìn)制接口(ABI),以及C的基本和衍伸類型,就能直接訪問(wèn)現(xiàn)有的C代碼以及程序庫(kù)。C的標(biāo)準(zhǔn)庫(kù)也是D標(biāo)準(zhǔn)的一部分。除非你使用非常清楚的名字空間,它可以稍微散亂的訪問(wèn),因?yàn)樗⒉急榧坝贒模塊—不過(guò)純粹的D標(biāo)準(zhǔn)庫(kù)也通常夠用,除非要與C代碼接合。

                  并未完整支持C++的ABI,盡管D可以訪問(wèn)寫給C ABI的C++代碼,且可訪問(wèn)C++COM(組件對(duì)象模型)代碼。D語(yǔ)法分析器了解外部(C++)調(diào)用約定,以鏈接C++對(duì)象,不過(guò)它只實(shí)現(xiàn)在D 2.0。

                  D 2.0

                  D 2.0,D 新一代版本,D2.0與D1.0是不兼容的,類似Python2和Python3的區(qū)別。目前D2已經(jīng)穩(wěn)定下來(lái)。其中一部分特性包括支持強(qiáng)制常數(shù)正確性(const-correctness),以及有限的支持鏈接以C++編寫的代碼。

                  實(shí)現(xiàn)

                  目前D直接編譯成原生碼以高效運(yùn)行。

                  D語(yǔ)言1.x版本已穩(wěn)定,不再功能變更或擴(kuò)展,2.0版本是其正式版本,不完全兼容舊版本的語(yǔ)言和編譯器。官方編譯器由Walter Bright定義語(yǔ)言本身。

                  DMD編譯器:Digital Mars D編譯器,由Walter Bright編寫的官方D編譯器。編譯器前端的授權(quán)許可為Artistic License和GNUGPL兩者;前端的源代碼連同編譯器運(yùn)行碼一起發(fā)布。編譯器的后端則是私有的。

                  GDC:D 1.0編譯器,以DMD編譯器前端,以及GCC后端所組成。

                  LDC:D 2.0編譯器,以DMD編譯器前端,以及LLVM后端所組成。LDC的官方版本已不支持D1.0,但其分支版本依然支持D1.0 。

                  問(wèn)題和爭(zhēng)議

                  運(yùn)算符重載

                  D運(yùn)算符重載在一定程度上不如C++強(qiáng)大。簡(jiǎn)單的例子是 opIndex ,它不允許返回引用。這使像是 obj[i] = 5; 的賦值不可能存在。D的解決方法是 opIndexAssign 運(yùn)算符,它只用于這種特殊情況。此外,C++返回參考的方法允許返回類型的重載賦值運(yùn)算符的用法。這在目前的D還不可能做到。D 2.0將會(huì)引入 opIndexLvalue 修正 - 類似運(yùn)算符重載和 opIndexAssign 。

                  低功的結(jié)構(gòu)

                  結(jié)構(gòu)在D之中是一種樸素舊式數(shù)據(jù)的類型,不過(guò)也可像變量一樣包含方法。這對(duì)有意輕量化的建構(gòu)而言相當(dāng)實(shí)用,如矩陣或向量,這些不需要完整的D類別功能(以及體積)。然而,D結(jié)構(gòu)沒(méi)有構(gòu)造函數(shù)和析構(gòu)函數(shù)。構(gòu)造函數(shù)可用靜態(tài) opCall 運(yùn)算符部分取代,不過(guò)它沒(méi)有適合的析構(gòu)函數(shù)等價(jià)物。此外,結(jié)構(gòu)不允許繼承,這會(huì)是有益的設(shè)計(jì),如詭異循環(huán)模板模式(curiously recurring template pattern)的使用。

                  標(biāo)準(zhǔn)庫(kù)中缺乏功能

                  D的標(biāo)準(zhǔn)庫(kù)稱作Phobos,且時(shí)常被認(rèn)為過(guò)分簡(jiǎn)單。tango項(xiàng)目編寫另一個(gè)標(biāo)準(zhǔn)庫(kù)試圖修正這一部分,不過(guò)phobos和tango目前由于不同的對(duì)象類別實(shí)現(xiàn)(導(dǎo)致垃圾回收困難)而互不兼容。存在兩種事實(shí)上的標(biāo)準(zhǔn)庫(kù)可能導(dǎo)致更大的問(wèn)題,部分軟件使用phobos,而其它軟件使用tango。

                  缺乏明確的目標(biāo)

                  D經(jīng)常限于“修正并改進(jìn)的C++”。這會(huì)導(dǎo)致過(guò)分強(qiáng)調(diào)功能,這起因于加入新功能只是因?yàn)樗麄冋J(rèn)為有用。舉個(gè)例子, 關(guān)系數(shù)組可簡(jiǎn)單的以標(biāo)準(zhǔn)庫(kù)實(shí)現(xiàn)。

                  未完成對(duì)共享/動(dòng)態(tài)庫(kù)的支持

                  Unix的ELF共享庫(kù)使用GDC編譯器支持到某個(gè)程度。在Windows系統(tǒng)中,目前還不支持DLL。因此現(xiàn)階段不可能編寫插件。不像C++,經(jīng)由C函數(shù)發(fā)送的D對(duì)象將不能運(yùn)作,因?yàn)檫@將會(huì)與垃圾回收器產(chǎn)生沖突。

                  示例

                  示例1

                  這個(gè)示例程序會(huì)輸出它自己的命令行參數(shù)。 main 函數(shù)是D程序的進(jìn)入點(diǎn), args 是表示為字符串?dāng)?shù)組的命令行參數(shù)。在D語(yǔ)言里的字符串是一個(gè)字符數(shù)組,以 char[] 表示。新版本中定義 string 為 char[] 的別名,不過(guò)別名定義必須與舊版本兼容。

                  importstd.stdio;// 以使用writefln()aliaschar[]string;// 以相容舊的編譯器;新的編譯器中已隱含定義intmain(string[]args){foreach(i,a;args)writefln("args[%d] = "%s"",i,a);return0;}

                  foreach 語(yǔ)法可迭代所有的集合,在本例中,它從 args 數(shù)組生成索引( i )和值( a )的序列。索引 i 和值 a 的類型會(huì)從 args 數(shù)組的類型推斷。

                  示例2

                  本例使用關(guān)系數(shù)組創(chuàng)建更復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。

                  importstd.stdio;// 以使用writefln()aliaschar[]string;// 以相容舊的編譯器;新的編譯器中已隱含定義intmain(string[]args){// 宣告以字串鍵和字串陣列作為資料的關(guān)聯(lián)陣列string[][string]container;// 將人們加入到容器中,並讓他們攜帶一些項(xiàng)目container["Anya"]~="scarf";container["Dimitri"]~="tickets";container["Anya"]~="puppy";// 迭代容器中所有的人//Iterate over all the persons in the containerforeach(stringperson,string[]items;container)display_item_count(person,items);return0;//完成}voiddisplay_item_count(stringperson,string[]items){writefln(person," is carrying ",items.length," items.");}

                  示例3

                  本例繁多的注解顯示出D語(yǔ)言與C++ 的不同之處,以及仍然保留的方面。

                  #!/usr/bin/dmd-run/* 支援sh風(fēng)格的script語(yǔ)法!*//* D語(yǔ)言的Hello World * 進(jìn)行編譯: * dmd hello.d * 或進(jìn)行最佳化: * dmd -O -inline -release hello.d * 或產(chǎn)生文件: * dmd hello.d -D */importstd.stdio;// 參照常用的I/O例行工作。aliaschar[]string;// 以相容舊的編譯器;新的編譯器中已隱含定義intmain(string[]args){// "writefln" (寫入-格式化-行,Write-Formatted-Line)即型態(tài)安全的「printf」writefln("Hello World, "http:// 自動(dòng)連結(jié)的字串文字"Reloaded");// 字串即字元的動(dòng)態(tài)陣列「char[]」,別名為「string」// 自動(dòng)的型態(tài)推斷,以及內(nèi)建的foreachforeach(argc,argv;args){autocl=newCmdLin(argc,argv);// 支援OOPwritefln(cl.argnum,cl.suffix," arg: %s",cl.argv);// 使用者定義的類別屬性。deletecl;// 垃圾回收或顯示的記憶體管理——由你自己選擇}// 巢狀結(jié)構(gòu)、類別和函式structspecs{// 所有的變數(shù)會(huì)在執(zhí)行時(shí)期自動(dòng)初始化為0intcount,allocated;// 不過(guò)你可選擇避開陣列的初始化int[10000]bigarray=void;}specsargspecs(string[]args)// 可選用的(內(nèi)建)函式契約。in{assert(args.length>0);// 內(nèi)建assert}out(result){assert(result.count==CmdLin.total);assert(result.allocated>0);}body{specs*s=newspecs;// 不需要「->」s.count=args.length;// 「length」屬性是元素的數(shù)量。s.allocated=typeof(args).sizeof;// 原生型態(tài)內(nèi)建的屬性foreach(arg;args)s.allocated+=arg.length*typeof(arg[0]).sizeof;return*s;}// 內(nèi)建字串和普通的字串操作,例如「~」是連結(jié)。stringargcmsg="argc = %d";stringallocmsg="allocated = %d";writefln(argcmsg~", "~allocmsg,argspecs(args).count,argspecs(args).allocated);return0;}/** * 儲(chǔ)存單獨(dú)命令列參數(shù) */classCmdLin{private{int_argc;string_argv;statint_totalc;}public:/** * 物件的建構(gòu)子。 * 參數(shù): * argc = 參數(shù)的序列計(jì)數(shù)。 * argv = 參數(shù)內(nèi)文。 */this(intargc,stringargv){_argc=argc+1;_argv=argv;_totalc++;}~this()// 物件的解構(gòu)子{// 本例中不做任何事。}intargnum()// 屬性,可返回參數(shù)數(shù)目{return_argc;}stringargv()// 屬性,可返回參數(shù)內(nèi)文{return_argv;}wstringsuffix()// 屬性,可返回序數(shù)後綴{wstringsuffix;// 內(nèi)建Unicode字串(UTF-8,UTF-16,UTF-32)switch(_argc){case1:suffix="st";break;case2:suffix="nd";break;case3:suffix="rd";break;default:// "default" is mandatory with "-w" compile switch.suffix="th";}returnsuffix;}/** * 靜態(tài)屬性,如同在C++ 或Java中, * 適用於類別物件,而不是實(shí)體。 * 返回:己加入的命令列參數(shù)總數(shù)。 */statictypeof(_totalc)total(){return_totalc;}// 類別不變量,任何方法在執(zhí)行之後,這些必須為真。invariant(){assert(_argc>0);assert(_totalc>=_argc);}}

                  示例4

                  本例顯示出一部分D語(yǔ)言強(qiáng)大的編譯時(shí)期特性。

                  /* * D語(yǔ)言裡的模板比C++ 的要更加強(qiáng)大。 * 在此可以看到使用static if(D的編譯時(shí)期條件建構(gòu))簡(jiǎn)單的建構(gòu)出階乘模板。 */templateFactorial(ulongn){staticif(n<=1)constFactorial=1;elseconstFactorial=n*Factorial!(n-1);}/* * 這裡有一個(gè)正規(guī)的函式,可完成同樣的計(jì)算。 * 注意它們有多麼的相似。 */ulongfactorial(ulongn){if(n<=1)return1;elsereturnn*factorial(n-1);}/* * 終於,我們可以計(jì)算我們的階乘。注意,我們不需要去 * 明確的指定我們的常數(shù)的型態(tài):編譯器有足夠的智能為 * 我們填充空白,因?yàn)樗缫阎蕾x值中右手邊的型態(tài)。 */constfact_7=Factorial!(7);/* * 這是編譯時(shí)期函式評(píng)估的範(fàn)例:普通函式可用於常數(shù)、 * 編譯時(shí)期表達(dá)式,假若它們滿足一定的條件。 */constfact_9=factorial(9);/*在此我們可以看到多麼強(qiáng)大的D我們使用 * std.metastrings.Format模板完成型態(tài)安全的printf * 資料格式化,並使用message pragma顯示計(jì)算結(jié)果。 */importstd.metastrings;pragma(msg,Format!("7! = %s",fact_7));pragma(msg,Format!("9! = %s",fact_9));/* * 完成任務(wù)後,我們可以強(qiáng)制停止編譯。這樣的程式需是 * 從未實(shí)際編譯成可執(zhí)行檔! */staticassert(false,"My work here is done.");


                  免責(zé)聲明:以上內(nèi)容版權(quán)歸原作者所有,如有侵犯您的原創(chuàng)版權(quán)請(qǐng)告知,我們將盡快刪除相關(guān)內(nèi)容。感謝每一位辛勤著寫的作者,感謝每一位的分享。

                  ——— 沒(méi)有了 ———
                  編輯:阿族小譜

                  更多文章

                  更多精彩文章
                  評(píng)論 {{commentTotal}} 文明上網(wǎng)理性發(fā)言,請(qǐng)遵守《新聞評(píng)論服務(wù)協(xié)議》
                  游客
                  發(fā)表評(píng)論
                  • {{item.userName}} 舉報(bào)

                    {{item.content}}

                    {{item.time}} {{item.replyListShow ? '收起' : '展開'}}評(píng)論 {{curReplyId == item.id ? '取消回復(fù)' : '回復(fù)'}}

                    回復(fù)評(píng)論
                  加載更多評(píng)論
                  打賞作者
                  “感謝您的打賞,我會(huì)更努力的創(chuàng)作”
                  — 請(qǐng)選擇您要打賞的金額 —
                  {{item.label}}
                  {{item.label}}
                  打賞成功!
                  “感謝您的打賞,我會(huì)更努力的創(chuàng)作”
                  返回
                  打賞
                  私信

                  推薦閱讀

                  · D
                  字母D的含意字符編碼參看D的變體De(eth)??(dwithstroke)??(dwithtail,又名AfricanD,因?yàn)橹饕糜诜侵薜恼Z(yǔ)言)?(數(shù)學(xué)上的部分微分符號(hào))其他字母中的相近字母Δδ(希臘字母Delta)Дд(西里爾字母De)其他另見以“D”開頭的條目
                  · D日
                  參看諾曼底戰(zhàn)役X日(日語(yǔ):Xデー):對(duì)無(wú)法料到何時(shí)發(fā)生、但必定發(fā)生的事件發(fā)生當(dāng)日的俗稱
                  · 堤(dī)姓
                  堤(dī)姓明朝洪洞大槐樹移民堤氏始祖為平陽(yáng)府、洪洞縣、趙城縣等籍人氏,明初奉旨在洪洞大槐樹集中遷往異地,至清末其后裔分布:河南、山東、河北、北京、山西等地。堤姓的記載最早見于《洪洞大槐樹百家姓》?!残赵础称湫論?jù)第四次人口普查及洪洞大槐樹祭祖堂登記簿統(tǒng)計(jì),河南、山東、河北、北京、山西等地有堤姓,為大槐樹移民后裔,但不知其姓源。〔人口〕根據(jù)第四次人口普查統(tǒng)計(jì),山西省有堤姓12人,臨汾市12人,洪洞縣4人?!补幻鞒槎创蠡睒湟泼竦淌鲜甲鏋槠疥?yáng)府、洪洞縣、趙城縣等籍人氏,明初奉旨在洪洞大槐樹集中遷往異地,至清末其后裔分布:河南、山東、河北、北京、山西等地。堤姓的記載最早見于《洪洞大槐樹百家姓》?!残赵础称湫論?jù)第四次人口普查及洪洞大槐樹祭祖堂登記簿統(tǒng)計(jì),河南、山東、河北、北京、山西等地有堤姓,為大槐樹移民后裔,但不知其姓源。〔人口〕根據(jù)第四次人口普查統(tǒng)計(jì),山西省有堤姓12人,臨汾市12人,洪洞縣...
                  · 都(dū)姓
                  都(dū)姓【摘要】系承姬氏,始祖為子都。為我國(guó)當(dāng)代第二百一十六姓。明朝洪洞大槐樹移民都氏始祖為平陽(yáng)府、洪洞縣、趙城縣等籍人氏,明初奉旨在洪洞大槐樹集中遷往異地,至清末其后裔分布:河南、山東、河北、北京、天津、陜西、甘肅、安徽、江蘇、山西等地。都姓的記載最早見于南朝·宋《姓苑》。〔姓源〕其姓源主要有二:①源自羋姓。據(jù)《廣韻》記載,春秋時(shí)楚國(guó)有公子田,食邑于都邑,稱公都氏,其后亦有都姓。②源自姬姓。據(jù)《通鑒·胡三省注》系承姬氏,始祖為子都。為我國(guó)當(dāng)代第二百一十六姓。明朝洪洞大槐樹移民都氏始祖為平陽(yáng)府、洪洞縣、趙城縣等籍人氏,明初奉旨在洪洞大槐樹集中遷往異地,至清末其后裔分布:河南、山東、河北、北京、天津、陜西、甘肅、安徽、江蘇、山西等地。都姓的記載最早見于南朝·宋《姓苑》?!残赵础称湫赵粗饕卸孩僭醋粤d姓。據(jù)《廣韻》記載,春秋時(shí)楚國(guó)有公子田,食邑于都邑,稱公都氏,其后亦有都姓。②源自姬姓。...
                  · D12
                  早年經(jīng)歷成功專輯樂(lè)隊(duì)成員2005年,D-12總共有6名成員:阿姆-樂(lè)隊(duì)中稱為SlimShady普魯夫-樂(lè)隊(duì)中稱為DertyHarry"D12樂(lè)團(tuán)饒舌歌手Proof在2006年遭槍殺死亡"康·阿迪斯特-樂(lè)隊(duì)中稱為Mr.DenaunPorter斯威夫特-樂(lè)隊(duì)中稱為SwiftyMcVeigh庫(kù)尼瓦-樂(lè)隊(duì)中稱為RondellBeene比乍爾-樂(lè)隊(duì)中稱為PeterS.Bizarre還有幾個(gè)樂(lè)隊(duì)的成員離開了D-12:Bugz、Eye-Kyu、KillaHawk、B-Flatand和Fuzz。作品專輯Devil"sNight(2001)D12World(2004)單曲2000ShitOnYouPurplePills2004HowComeMyBand

                  關(guān)于我們

                  關(guān)注族譜網(wǎng) 微信公眾號(hào),每日及時(shí)查看相關(guān)推薦,訂閱互動(dòng)等。

                  APP下載

                  下載族譜APP 微信公眾號(hào),每日及時(shí)查看
                  掃一掃添加客服微信