自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

為什么 BIND 10 要用C++和Python來寫

開發(fā) 開發(fā)工具
當我開始進行BIND 10的項目工作時,唯一已經(jīng)做的決定就是要使用哪種編程語言,恰逢預(yù)料之中的關(guān)于自行車棚的那次討論之后。 那時最重要的問題是要讓項目繼續(xù)進行,而不是去重啟一場可能永無休止的爭論,一直討論到底要使用哪種(或哪些)編程。

 這篇博文是對來自Twitter的這個問題的答復(fù):

@nodakai: 為什么BIND10非要用C++編寫?? 我認為從這個不幸的事件中,托管語言的支持者們有許多需要學(xué)習(xí)了解的地方

當我開始進行BIND 10的項目工作時,***已經(jīng)做的決定就是要使用哪種編程語言,恰逢預(yù)料之中的關(guān)于自行車棚的那次討論之后。 那時最重要的問題是要讓項目繼續(xù)進行,而不是去重啟一場可能永無休止的爭論,一直討論到底要使用哪種(或哪些)編程。

話說到這了,我對所選語言感到非常滿意。實際上,如果開頭就要做這個決定的人是我,我選擇的也是同樣這些語言。 

BIND 9 是用C語言編寫的。在它設(shè)計和編寫之時 —— 在20世紀末 —— 這真是一個***合乎邏輯的選擇。C語言在閱讀和編寫方面相對簡單,很多平臺都支持它,并且還能生成運行速度飛快的代碼。 此外,C缺乏能夠支持軟件工程的語言特性,而且完全不安全。

于是,當ISC開始正式考慮BIND 10時 ——大約是2006年左右 —— 就提出了新項目要使用哪種語言的問題。

***個很顯然的問題是,“為什么不用C?” 下面給出部分答案:

·C中的字符串操作實在是個乏味的苦差事

·C缺乏很好的內(nèi)存管理機制

·錯誤處理有隨意性且難弄

·封裝和其它面向?qū)ο蟮奶匦灾荒芡ㄟ^模仿才能實現(xiàn)

大家都一致認為,我們可以做得更好。問題是“怎樣才能準確的做到這一點?”

要選擇一門新的語言,當然要滿足一些要求:

·該語言必須處于相對主流的位置。

Wikipedia上關(guān)于編程語言的頁面 中列出了600多種語言,而且還沒有列完。然而,BIND 10有一個目標是,要讓大家很簡單就能上手。盡管使用類似Eiffel或Prolog的這類語言后,因為它們比較新奇所以有可能會吸引一些開發(fā)者,但對于大多數(shù)程序員來說卻是個難以逾越的障礙。還有第二個理由,ISC要保證,無論選什么語言都必須能夠找到熟練的開發(fā)者。

·該語言必須能夠解決C語言中的絕大多數(shù)問題。

理想情況下,這意味著,該語言必須能優(yōu)雅的處理字符串、內(nèi)存垃圾回收,異常處理,并且還是面向?qū)ο蟮摹?/p>

·該語言在CPU密集型運算方面速度要非???。

現(xiàn)代的DNS服務(wù)器很大程度上是屬于計算密集型的,無論是在有授權(quán)還是在遞歸解析的情況下都是這樣。DNS服務(wù)器要使用特定的數(shù)據(jù)結(jié)構(gòu)和算法,所以我們無法依賴用C或者C++編寫的底層庫。這個要求基本上排除了使用任何解釋性語言的可能性。

我們最終選擇的方式是混合使用兩種編程語言:

Python

只要有可能, 我們都盡量使用Python。Python是一種非常流行的語言, 通常在大多數(shù)調(diào)查中都是嘴流行的腳本語言(可能要除PHP之外)。它具有我們要尋找的所有特性。。。就是在性能方面有點問題。

C++

當有必要時,我們會使用C++.

C++也是一門非常流行的語言, 而且也具有我們要尋找的所有特性。然而,C++絕不是一門很容易就能使用起來的語言,于是我們想了個主意,就是我們在可能的情況下要避免它的復(fù)雜性。

如果你在很早的時候?qū)W過C++但沒有在現(xiàn)在的C++編程環(huán)境下編過程序,你可能會對用它來編程有著一些錯誤的觀點。我們使用了Boost庫,這里面有個共享指針,能提供一種對動態(tài)分配對象的引用計數(shù)的手段。實際上,采用資源獲得即初始化(RAII)后,就能夠解決大量的資源鎖定和泄露問題。

到目前為止,結(jié)果中我們代碼的75%用到是C++,17%用的是Python (鏈接) ,這個結(jié)果表明,BIND 10中的大部分代碼對性能要求都很嚴格。

在選擇語言時,其它的項目會有不同的考慮因素,所以,盡管C++和Python是BIND 10不錯的選擇,但它們可不是適合于每個項目。

但從大的思路上講,為BIND 10考慮語言選擇方面的動因和決策方式在我們的項目開始時很有意義,而且我想它們現(xiàn)在仍然很有意義。

有一件我們可能會以不同方式來作的事是,選擇編寫能夠同時運行于Python 2和Python 3中的代碼,而不是必須要求Python 3。隨著時間的推移,這個問題會變得越來越小,因為Python的未來是Python 3,但這個決定給人們帶來很多苦惱,為了運行個軟件還不得不安裝一個新版本的解釋器,這讓人很不高興。我希望2到3年后,我們能夠笑談這些苦惱,而Python 2已成為一段退色的記憶。

原文鏈接:http://www.oschina.net/translate/programming-languages-for-bind-10

責(zé)任編輯:張偉 來源: oschina
相關(guān)推薦

2021-12-03 17:22:09

CC++編程語言

2016-01-12 16:58:31

C游戲

2022-11-28 09:58:58

C++開發(fā)

2009-01-09 23:06:41

服務(wù)器SCSI硬盤PC

2020-04-07 16:12:56

Go編程語言開發(fā)

2024-01-24 11:24:03

C++編程異常處理

2010-01-20 14:03:12

C++程序

2010-01-22 15:14:37

學(xué)習(xí)C++

2021-07-26 18:38:48

Bpmn流程

2021-05-11 06:57:15

HBaseBATJ公司

2024-07-02 13:27:38

2021-12-13 01:40:29

ElasticSear倒排索引

2024-01-02 17:28:12

芯片CPUAI計算

2018-03-12 10:57:14

JavaKotlin語法

2022-05-07 07:35:44

工具讀寫鎖Java

2020-08-12 12:20:09

Python Java編程語言

2021-07-18 22:29:28

Python人工智能開發(fā)

2020-09-25 15:41:16

C++JavaPython

2015-07-01 10:25:07

Docker開源項目容器

2021-11-19 09:49:00

CC++語法糖
點贊
收藏

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