新聞中心
這篇博文是對(duì)來自Twitter的這個(gè)問題的答復(fù):

創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比橫峰網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式橫峰網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋橫峰地區(qū)。費(fèi)用合理售后完善,10多年實(shí)體公司更值得信賴。
@nodakai: 為什么BIND10非要用C++編寫?? 我認(rèn)為從這個(gè)不幸的事件中,托管語言的支持者們有許多需要學(xué)習(xí)了解的地方
當(dāng)我開始進(jìn)行BIND 10的項(xiàng)目工作時(shí),***已經(jīng)做的決定就是要使用哪種編程語言,恰逢預(yù)料之中的關(guān)于自行車棚的那次討論之后。 那時(shí)最重要的問題是要讓項(xiàng)目繼續(xù)進(jìn)行,而不是去重啟一場(chǎng)可能永無休止的爭(zhēng)論,一直討論到底要使用哪種(或哪些)編程。
話說到這了,我對(duì)所選語言感到非常滿意。實(shí)際上,如果開頭就要做這個(gè)決定的人是我,我選擇的也是同樣這些語言。
BIND 9 是用C語言編寫的。在它設(shè)計(jì)和編寫之時(shí) —— 在20世紀(jì)末 —— 這真是一個(gè)***合乎邏輯的選擇。C語言在閱讀和編寫方面相對(duì)簡(jiǎn)單,很多平臺(tái)都支持它,并且還能生成運(yùn)行速度飛快的代碼。 此外,C缺乏能夠支持軟件工程的語言特性,而且完全不安全。
于是,當(dāng)ISC開始正式考慮BIND 10時(shí) ——大約是2006年左右 —— 就提出了新項(xiàng)目要使用哪種語言的問題。
***個(gè)很顯然的問題是,“為什么不用C?” 下面給出部分答案:
·C中的字符串操作實(shí)在是個(gè)乏味的苦差事
·C缺乏很好的內(nèi)存管理機(jī)制
·錯(cuò)誤處理有隨意性且難弄
·封裝和其它面向?qū)ο蟮奶匦灾荒芡ㄟ^模仿才能實(shí)現(xiàn)
大家都一致認(rèn)為,我們可以做得更好。問題是“怎樣才能準(zhǔn)確的做到這一點(diǎn)?”
要選擇一門新的語言,當(dāng)然要滿足一些要求:
·該語言必須處于相對(duì)主流的位置。
Wikipedia上關(guān)于編程語言的頁面 中列出了600多種語言,而且還沒有列完。然而,BIND 10有一個(gè)目標(biāo)是,要讓大家很簡(jiǎn)單就能上手。盡管使用類似Eiffel或Prolog的這類語言后,因?yàn)樗鼈儽容^新奇所以有可能會(huì)吸引一些開發(fā)者,但對(duì)于大多數(shù)程序員來說卻是個(gè)難以逾越的障礙。還有第二個(gè)理由,ISC要保證,無論選什么語言都必須能夠找到熟練的開發(fā)者。
·該語言必須能夠解決C語言中的絕大多數(shù)問題。
理想情況下,這意味著,該語言必須能優(yōu)雅的處理字符串、內(nèi)存垃圾回收,異常處理,并且還是面向?qū)ο蟮摹?/p>
·該語言在CPU密集型運(yùn)算方面速度要非??臁?/p>
現(xiàn)代的DNS服務(wù)器很大程度上是屬于計(jì)算密集型的,無論是在有授權(quán)還是在遞歸解析的情況下都是這樣。DNS服務(wù)器要使用特定的數(shù)據(jù)結(jié)構(gòu)和算法,所以我們無法依賴用C或者C++編寫的底層庫。這個(gè)要求基本上排除了使用任何解釋性語言的可能性。
我們最終選擇的方式是混合使用兩種編程語言:
Python
只要有可能, 我們都盡量使用Python。Python是一種非常流行的語言, 通常在大多數(shù)調(diào)查中都是嘴流行的腳本語言(可能要除PHP之外)。它具有我們要尋找的所有特性。。。就是在性能方面有點(diǎn)問題。
C++
當(dāng)有必要時(shí),我們會(huì)使用C++.
C++也是一門非常流行的語言, 而且也具有我們要尋找的所有特性。然而,C++絕不是一門很容易就能使用起來的語言,于是我們想了個(gè)主意,就是我們?cè)诳赡艿那闆r下要避免它的復(fù)雜性。
如果你在很早的時(shí)候?qū)W過C++但沒有在現(xiàn)在的C++編程環(huán)境下編過程序,你可能會(huì)對(duì)用它來編程有著一些錯(cuò)誤的觀點(diǎn)。我們使用了Boost庫,這里面有個(gè)共享指針,能提供一種對(duì)動(dòng)態(tài)分配對(duì)象的引用計(jì)數(shù)的手段。實(shí)際上,采用資源獲得即初始化(RAII)后,就能夠解決大量的資源鎖定和泄露問題。
到目前為止,結(jié)果中我們代碼的75%用到是C++,17%用的是Python (鏈接) ,這個(gè)結(jié)果表明,BIND 10中的大部分代碼對(duì)性能要求都很嚴(yán)格。
在選擇語言時(shí),其它的項(xiàng)目會(huì)有不同的考慮因素,所以,盡管C++和Python是BIND 10不錯(cuò)的選擇,但它們可不是適合于每個(gè)項(xiàng)目。
但從大的思路上講,為BIND 10考慮語言選擇方面的動(dòng)因和決策方式在我們的項(xiàng)目開始時(shí)很有意義,而且我想它們現(xiàn)在仍然很有意義。
有一件我們可能會(huì)以不同方式來作的事是,選擇編寫能夠同時(shí)運(yùn)行于Python 2和Python 3中的代碼,而不是必須要求Python 3。隨著時(shí)間的推移,這個(gè)問題會(huì)變得越來越小,因?yàn)镻ython的未來是Python 3,但這個(gè)決定給人們帶來很多苦惱,為了運(yùn)行個(gè)軟件還不得不安裝一個(gè)新版本的解釋器,這讓人很不高興。我希望2到3年后,我們能夠笑談這些苦惱,而Python 2已成為一段退色的記憶。
分享題目:為什么 BIND 10 要用C++和Python來寫
網(wǎng)址分享:http://www.dlmjj.cn/article/dpdpojo.html


咨詢
建站咨詢
