最近几天我一直热切地学习D语言。作为数百万行C ++代码的支持者,对我来说,这似乎是一个梦想。我们支持高性能低延迟系统,显然C ++是过去十年中唯一的选择。现在,我看到D。
所以,我的问题非常明显。我可以开始考虑将商业软件产品迁移到D语言吗?是否有从头开始在D上编写此类迁移或现有大型商业软件产品的示例?
现在投资这种语言是否安全?我们有生产质量的编译器和调试器吗?我们可以假设他们会得到支持和发展吗?
如果您有从C ++到D的迁移经验,那么很高兴听到您的意见。
PS。 D我的意思是D2
谢谢
答案 0 :(得分:13)
我不会认为D2已经准备就绪,但它已经接近了。语言定义相当稳定。此时应该发生很少的重大变化(尽管可能会出现一些旨在消除语言中关键问题的附加变化)。编译器的开发正在迅速发展,并且许多错误正在得到修复。但是在这一点上,如果你大量使用D2,你将遇到编译器错误,特别是如果你使用更新的语言功能。并非所有这些功能都已完全实现(例如alias this
和inout
),因此虽然TDPL大部分都是正确的,但dmd仍然落后于它。
此外,尽管标准库Phobos总体上非常好,并且大部分都是稳定的,但它仍然是一项正在进行中的工作。我们试图通过将我们正在通过适当的弃用路径删除的东西(通常是按计划弃置6个月和在完全删除之前弃用6个月)来避免立即发生重大变更,但有时会立即发生重大变更 do 发生(有时编译器会在其工作时导致重大更改)。在某些情况下,整个模块将进行大修(例如std.xml和std.stream)。可能在这方面最大的烦恼是std.container,这是相当新的,还没有很多东西,并且可能有重大的重新设计,因为Andrei Alexandrescu排除了我们将如何处理内存管理它。因此,容器支持正在改善,但通常缺乏。总而言之,许多Phobos相当稳定,但它绝对不是一成不变的。
对于dmd和Phobos都有支持,因为如果你将内容发布到bugzilla或在the newsgroup上讨论它们,人们通常会非常有帮助,开发人员会及时尝试修复错误方式,但大多数人在空闲时间这样做,所以有时可能需要一段时间。切换到github确实改善了问题。我知道Digital Mars如果你支付费用就会为dmc提供额外的支持,但是我不知道他们是否也会为dmd做同样的事情。我希望他们有很好的机会(当然,如果他们现在不这样做,我希望他们将来这样做。)
至于编译器的质量,dmd使用Digital Mars的dmc作为其后端,而dmc是第一个用于本地编译代码的C ++编译器的最新版本(而不是首先将其转换为C),以及Walter Bright自创造以来,D的创造者一直在研究它。他是最好的编译器编写者之一,已经创建了许多优化,这些优化已成为C ++编译器的标准(例如Return Value Optimization),但是dmc没有很多人在编写它,并且有它落后的一些领域(例如浮点优化)和D是足够新的,在优化它时还有很多工作要做。由于错误已得到修复,我确信更多关注点最终将转向优化语言,并且在大多数情况下最终会与C ++相提并论(在某些情况下更好),但现在它实际上取决于您的代码。有时D是平等的;有时它不是。
有些人做在生产代码中使用D2(特别是,我知道Adam D. Ruppe使用它与他合作的公司进行网页开发 - 他是D新闻组的常用海报),但我不认为它们中有很多,并且它们通常避免使用该语言的更新,更高级的功能(通常是最糟糕的错误)。它的稳定性实际上取决于你对语言的处理方式。
The wiki提供了有关尚待完成的工作的一些很好的信息,新闻组中的this recent thread也有一些很好的信息。
D肯定接近我认为它已准备就绪的程度,但此时肯定存在一些风险。对于业余爱好来说,这是伟大的,但如果你的生活依赖于它,我不知道风险是否值得。它越来越近了。它可能值得您花时间去研究它,试一试,试验它等等。但我不会深入研究您的生产代码并将其全部转换为D.它可能会很好,但它可能不会。我希望从现在开始一年,我可以说D2已经准备就绪了,但是我不知道要多早多少,我觉得这样做会很舒服。
答案 1 :(得分:11)
是否有此类迁移的示例 或现有的大型商业软件 从头开始写在D上的产品?
我不相信D有任何大规模的商业迁移,尽管there are a few companies using D1。我还不知道有任何公司使用D2。
投资于此如何安全 语言现在?
我们有生产质量编译器吗? 和调试器?
DMD编译器非常强大且不断改进,但在某些关键领域仍然缺乏。例如,它的浮点运算代码生成非常缺乏,64位支持是不稳定的(尽管有所改进)。还有GDC,我没有使用过,但我觉得它比DMD弱。
我们可以假设他们会 支持和发展?
我认为假设编译器将得到支持和开发是非常安全的。只需看看github page for D。活动强劲且不断增长。错误修复的数量正在迅速增加,我没有看到它放缓的迹象。
答案 2 :(得分:5)
嗯,对任何语言的一般建议是不重写现有的代码库。编写新代码或转换需要修复错误的部分可能是一个很好的策略。
快速和肮脏的重播:如果你不得不问,你不应该在生产中使用D.
有些人并不认为D是一种改进,而另一些人认为它将保留在“无关紧要的领域”。纵观其历史表明它具有生存所需的一切。
就个人而言,如果我提出使用D生产产品的想法,我可能会考虑:
这些问题将成为任何讨论的一部分,特别是对于像D这样的年轻语言,它甚至与现有的图书馆失去了兼容性,使其只有4年左右(并且仍然存活下来)。我不使用其他编译器,因此没有得到DMD的支持会引起关注,其他编译器的历史并不是很好,而且知识可能会有另一个编译器可以依赖它。当然,如果你有一个可以维护编译器的工作人员......
我认为D可以在生产中使用,但应该是非常可控的。你现在想要一个熟悉D的团队用它制作一个生产产品。