D语言有多个标准库和GC的问题吗?

我想知道如何成熟和稳定的D是,如果它可能是一个很好的替代C/C++。

我知道目前有两个标准库(Phobos和Tango)。是否仍然没有统一的标准库?

此外,我听说一段时间以前,语言在GCed /非GCed代码的边界上有问题。我在D网站找不到任何参考,所以这个问题仍然是真的吗?

最佳答案
版本1的D是成熟和稳定的,并且肯定有人使用它的实际工作。 Phobos是D曾经或可能会有的唯一标准库,但是D1的Phobos缺乏足够多的第三方库来填补空白。探戈是这些中最大的,是最常用的第三方图书馆(因此,为什么它经常被称为第二个标准图书馆,即使它不是),沃尔特·Bright将快速指出,它不是。但是,D1中的Tango和Phobos不能很好地组合(IIRC,因为Tango替换了一些标准的东西,比如垃圾回收器),所以很有可能有人在D1中使用Tango而不使用Phobos。此外,除了来自Digital Mars的主编译器(包括LDC和gdc),D1还支持多个编译器。

D版本2刚刚达到成熟和稳定。他们已经停止对语言进行重大更改,所以你通常不必担心一切打破了你的编译器更新,因为在过去的情况下,他们仍然钉着语言下来。事实上,现在已经足够成熟,Andrei Alexandrescu发布了D编程语言作为语言的一个确定的资源,应该保持有效的禁止文本中的错误(它是我读过的最好的编程语言书之一)。但是,仍然有大量的错误修复正在进行,所以很可能遇到一个错误,导致你一个公平的一点刺激你的特定应用程序。它绝对是成熟的,足够稳定的,可以做它真正的工作,但要知道,这是很有可能遇到bug。

Tango还没有移植到D2,所以在D2中编程时它不是一个选项。然而,Phobos现在相当不错。它得到了很多伟大的补充(它实际上有容器现在! – 在Phobos缺乏容器是一个很大的理由使用探戈在D1而不是Phobos),并有一些非常强大的东西在其中 – std.algorithm是特别好。 D处理lambda函数,嵌套函数和函数指针的方式使得向光算法传递函数比在当前标准C中更容易。此外,它已经固定在D2中,以便垃圾回收器和Tango正在复制的一些其他核心内容现在与Phobos分离。所以,一旦探戈已经移植到D2,你将能够混合Phobos和探戈代码 – 虽然如前面的答案已经指出,Phobos和探戈使用相当不同的设计哲学(探戈是非常Java类和Phobos大量使用模板和元编程与鸭类而不是接口),所以我不知道他们将从这个角度混合多好。

目前,我相信dmd是唯一的编译器,是关于D2的规范是最新的,但我相信有工作正在做的gdc和LDC D编译器(虽然如何活跃的工作,我不知道)。此外,Walter Bright目前正在使用dmd的64位端口,因此我们将很快获得64位编译。

总的来说,我想说D2可以使用,但你需要知道,仍然有很多工作正在做的与修复bug等。所以,D2绝对准备好爱好使用,并可能在工作中严重使用,但如果你真的需要稳定性(如果你是波音和错误意味着死亡),那么D1可能仍然是一个更好的选择。当然,要记住D2的大事情是它有很多D1没有的功能,所以除非你真的需要岩石稳定性,否则D2很可能是一种方法。幸运的是,它继续成熟和稳定,所以时间肯定接近,当没有问题使用D2会更好。

无论如何,在一般情况下,D1和D2都是C和C的良好替代。他们可以做C和C做,并且(特别是在D2的情况下)可能做得更好。 D可能落后的主要地方是它是如何优化。有大量的代码,在D和C或C一样快,但仍有大量的工作正在做D,所以有足够的空间进一步优化,它有时会落后于C和C的效率。所以,一般来说,D是高效的,但如果你真的需要尽可能多的效率,你可能得到,它可能还不够好,你需要什么(虽然它到达那里)。此外,有很多成熟的C和C库,而D没有任何接近相同水平的代码漂浮在那里工作。任何C代码可以与D一起使用,因为C函数可以从D调用,并且一些C代码可以是(虽然在将C代码与D混合时有相当多的限制),因此不一定是很多一个障碍,但它是需要注意的事情。缺少的主要地方是GUI库。有一些为D1,并且有工作正在完成对GUI的GUI,但是我不相信任何他们在这一点上是特别成熟。

所以,和一切一样,你应该使用哪种语言取决于你在做什么。 D会做大多数事情,做得很好。但它不做一切,它仍然成熟。就个人而言,在这一点上,我使用D,除非我需要为某个项目使用别的东西,除非该项目已经写成别的东西,否则通常不会使用它,而现在就移植它是没有意义的。所以,我强烈建议使用D,但你必须研究它,并使用它来看看它是否真的会做你想要的在这一点上。

转载注明原文:D语言有多个标准库和GC的问题吗? - 代码日志