设为首页 加入收藏

TOP

为什么 BIND 10 要用C++和Python来写
2013-10-07 16:05:26 来源: 作者: 【 】 浏览:76
Tags:为什么 BIND 要用 Python 来写

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

我们最终选择的方式是混合使用两种编程(www.cppentry.com)语言:

Python

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

C++(www.cppentry.com)

当有必要时,我们会使用C++(www.cppentry.com).

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

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

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

在选择语言时,其它的项目会有不同的考虑因素,所以,尽管C++(www.cppentry.com)和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

【编辑推荐】

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇2013年2月传统编程语言的就业趋势 下一篇3.9 用C++语言编写HTTP模块

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·用 C 语言或者限制使 (2025-12-25 08:50:05)
·C++构造shared_ptr为 (2025-12-25 08:50:01)
·既然引用计数在做 GC (2025-12-25 08:49:59)
·Java 编程和 c 语言 (2025-12-25 08:19:48)
·. net内存管理宝典这 (2025-12-25 08:19:46)