2KB项目,专业的源码交易网站 帮助 收藏 每日签到

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

  • 时间:2019-01-23 18:45 编辑:2KB 来源:2KB.COM 阅读:372
  • 扫一扫,手机访问
  • 分享
摘要:
BIND 英文原文:Programming Languages for BIND 10

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

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

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

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

BIND 9 是用C语言编写的。它在设计和编写之时 —— 在20世纪末 —— C真是一个唯一合乎逻辑的选择。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也已成为一段退色的记忆。 本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。 2KB翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。


2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务

  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【计算机/互联网|】Nginx出现502错误(2020-01-20 21:02)
【计算机/互联网|】网站运营全智能软手V0.1版发布(2020-01-20 12:16)
【计算机/互联网|】淘宝这是怎么了?(2020-01-19 19:15)
【行业动态|】谷歌关闭小米智能摄像头,因为窃听器显示了陌生人家中的照片(2020-01-15 09:42)
【行业动态|】据报道谷歌新闻终止了数字杂志,退还主动订阅(2020-01-15 09:39)
【行业动态|】康佳将OLED电视带到美国与LG和索尼竞争(2020-01-15 09:38)
【行业动态|】2020年最佳AV接收机(2020-01-15 09:35)
【行业动态|】2020年最佳流媒体设备:Roku,Apple TV,Firebar,Chromecast等(2020-01-15 09:31)
【行业动态|】CES 2020预览:更多的流媒体服务和订阅即将到来(2020-01-08 21:41)
【行业动态|】从埃隆·马斯克到杰夫·贝佐斯,这30位人物定义了2010年代(2020-01-01 15:14)
联系我们

Q Q: 7090832

电话:400-0011-990

邮箱:7090832@qq.com

时间:9:00-23:00

联系客服
商家入住 服务咨询 投拆建议 联系客服
0577-67068160
手机版

扫一扫进手机版
返回顶部