为什么 BIND 10 要用C++和Python来写

开发 开发工具
当我开始进行BIND 10的项目工作时,唯一已经做的决定就是要使用哪种编程语言,恰逢预料之中的关于自行车棚的那次讨论之后。 那时最重要的问题是要让项目继续进行,而不是去重启一场可能永无休止的争论,一直讨论到底要使用哪种(或哪些)编程。

 这篇博文是对来自Twitter的这个问题的答复:

@nodakai: 为什么BIND10非要用C++编写?? 我认为从这个不幸的事件中,托管语言的支持者们有许多需要学习了解的地方

当我开始进行BIND 10的项目工作时,***已经做的决定就是要使用哪种编程语言,恰逢预料之中的关于自行车棚的那次讨论之后。 那时最重要的问题是要让项目继续进行,而不是去重启一场可能永无休止的争论,一直讨论到底要使用哪种(或哪些)编程。

话说到这了,我对所选语言感到非常满意。实际上,如果开头就要做这个决定的人是我,我选择的也是同样这些语言。 

BIND 9 是用C语言编写的。在它设计和编写之时 —— 在20世纪末 —— 这真是一个***合乎逻辑的选择。C语言在阅读和编写方面相对简单,很多平台都支持它,并且还能生成运行速度飞快的代码。 此外,C缺乏能够支持软件工程的语言特性,而且完全不安全。

于是,当ISC开始正式考虑BIND 10时 ——大约是2006年左右 —— 就提出了新项目要使用哪种语言的问题。

***个很显然的问题是,“为什么不用C?” 下面给出部分答案:

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

·C缺乏很好的内存管理机制

·错误处理有随意性且难弄

·封装和其它面向对象的特性只能通过模仿才能实现

大家都一致认为,我们可以做得更好。问题是“怎样才能准确的做到这一点?”

要选择一门新的语言,当然要满足一些要求:

·该语言必须处于相对主流的位置。

Wikipedia上关于编程语言的页面 中列出了600多种语言,而且还没有列完。然而,BIND 10有一个目标是,要让大家很简单就能上手。尽管使用类似Eiffel或Prolog的这类语言后,因为它们比较新奇所以有可能会吸引一些开发者,但对于大多数程序员来说却是个难以逾越的障碍。还有第二个理由,ISC要保证,无论选什么语言都必须能够找到熟练的开发者。

·该语言必须能够解决C语言中的绝大多数问题。

理想情况下,这意味着,该语言必须能优雅的处理字符串、内存垃圾回收,异常处理,并且还是面向对象的。

·该语言在CPU密集型运算方面速度要非常快。

现代的DNS服务器很大程度上是属于计算密集型的,无论是在有授权还是在递归解析的情况下都是这样。DNS服务器要使用特定的数据结构和算法,所以我们无法依赖用C或者C++编写的底层库。这个要求基本上排除了使用任何解释性语言的可能性。

我们最终选择的方式是混合使用两种编程语言:

Python

只要有可能, 我们都尽量使用Python。Python是一种非常流行的语言, 通常在大多数调查中都是嘴流行的脚本语言(可能要除PHP之外)。它具有我们要寻找的所有特性。。。就是在性能方面有点问题。

C++

当有必要时,我们会使用C++.

C++也是一门非常流行的语言, 而且也具有我们要寻找的所有特性。然而,C++绝不是一门很容易就能使用起来的语言,于是我们想了个主意,就是我们在可能的情况下要避免它的复杂性。

如果你在很早的时候学过C++但没有在现在的C++编程环境下编过程序,你可能会对用它来编程有着一些错误的观点。我们使用了Boost库,这里面有个共享指针,能提供一种对动态分配对象的引用计数的手段。实际上,采用资源获得即初始化(RAII)后,就能够解决大量的资源锁定和泄露问题。

到目前为止,结果中我们代码的75%用到是C++,17%用的是Python (链接) ,这个结果表明,BIND 10中的大部分代码对性能要求都很严格。

在选择语言时,其它的项目会有不同的考虑因素,所以,尽管C++和Python是BIND 10不错的选择,但它们可不是适合于每个项目。

但从大的思路上讲,为BIND 10考虑语言选择方面的动因和决策方式在我们的项目开始时很有意义,而且我想它们现在仍然很有意义。

有一件我们可能会以不同方式来作的事是,选择编写能够同时运行于Python 2和Python 3中的代码,而不是必须要求Python 3。随着时间的推移,这个问题会变得越来越小,因为Python的未来是Python 3,但这个决定给人们带来很多苦恼,为了运行个软件还不得不安装一个新版本的解释器,这让人很不高兴。我希望2到3年后,我们能够笑谈这些苦恼,而Python 2已成为一段退色的记忆。

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

责任编辑:张伟 来源: oschina
相关推荐

2016-01-12 16:58:31

C游戏

2021-12-03 17:22:09

CC++编程语言

2022-11-28 09:58:58

C++开发

2020-04-07 16:12:56

Go编程语言开发

2009-01-09 23:06:41

服务器SCSI硬盘PC

2021-07-26 18:38:48

Bpmn流程

2010-01-20 14:03:12

C++程序

2024-01-24 11:24:03

C++编程异常处理

2010-01-22 15:14:37

学习C++

2024-01-02 17:28:12

芯片CPUAI计算

2021-05-11 06:57:15

HBaseBATJ公司

2021-12-13 01:40:29

ElasticSear倒排索引

2018-03-12 10:57:14

JavaKotlin语法

2022-05-07 07:35:44

工具读写锁Java

2021-07-18 22:29:28

Python人工智能开发

2020-08-12 12:20:09

Python Java编程语言

2022-07-06 09:29:40

JMH性能测试

2023-09-22 10:05:32

2020-09-25 15:41:16

C++JavaPython

2015-07-01 10:25:07

Docker开源项目容器
点赞
收藏

51CTO技术栈公众号