这篇博文是对来自Twitter的这个问题的答复:
@nodakai: 为什么BIND10非要用C++编写?? 我认为从这个不幸的事件中,托管语言的支持者们有许多需要学习了解的地方
当我开始进行BIND 10的项目工作时,唯一已经做的决定就是要使用哪种编程语言,恰逢预料之中的关于自行车棚的那次讨论之后。 那时最重要的问题是要让项目继续进行,而不是去重启一场可能永无休止的争论,一直讨论到底要使用哪种(或哪些)编程语言。
话说到这了,我对所选语言感到非常满意。实际上,如果开头要做这个决定的人是我,我选择的也是同样这些语言。
BIND 9 是用C语言编写的。它在设计和编写之时 —— 在20世纪末 —— C真是一个唯一合乎逻辑的选择。C语言在阅读和编写方面相对简单,很多平台都支持它,并且还能生成运行速度飞快的代码。 此外,C缺乏能够支持软件工程的语言特性,而且完全不安全。
于是,当ISC开始正式考虑BIND 10时 ——大约是2006年左右 —— 就提出了新项目要使用哪种语言的问题。
第一个很显然的问题是,“为什么不用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,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务