我想知道D是多么成熟和稳定,如果它可能是C/C++的一个很好的替代品.
我知道目前有两个标准库(Phobos和Tango).是否仍然没有统一的标准库?
另外我前段时间听说语言在GCed /非GCed代码的边界上存在问题.我在D网站上找不到任何关于它的参考,这个问题仍然是正确的吗?
Jon*_*vis 34
D版本1成熟稳定,肯定有人将其用于实际工作.Phobos是D曾经拥有或可能拥有的唯一标准库,但是D1的Phobos缺乏足够的能力来创建各种第三方库以填补空白.Tango是其中最大的,也是使用最多的第三方库(因此,为什么它经常被称为第二个标准库,即使它不是,并且Walter Bright会很快指出它不是).然而,D1中的Tango和Phobos不能很好地混合(IIRC,因为Tango取代了一些标准的东西,比如垃圾收集器),所以很有可能有人在D1编程时会使用没有Phobos的Tango.此外,除了Digital Mars的主编译器(包括LDC和gdc)之外,D1还受到多个编译器的支持.
D版本2刚刚达到成熟和稳定.他们已经停止对语言进行重大更改,因此您通常不必担心编译器更新会破坏您的所有内容,就像过去的情况一样,他们仍然将语言固定下来.事实上,现在已经足够成熟,Andrei Alexandrescu发布了D编程语言作为语言的权威资源,应该保持有效,禁止文本中的错误(这也是我读过的最好的编程语言书籍之一).但是,仍然有很多错误修复,因此很可能会遇到一个错误,这会让你对你的特定应用程序产生一些刺激.它确实足够成熟,足够稳定,可以用它来做真正的工作,但请注意,它很可能遇到错误.
Tango尚未移植到D2,因此在D2编程时它并不是一个真正的选择.然而,Phobos现在相当不错.它得到了很多很好的补充(它现在实际上有容器了! - Phobos中缺少容器是在D1而不是Phobos中使用Tango的一个重要原因),并且在其中有一些非常强大的东西 - std.algorithm is特别好看.D处理lambda函数,嵌套函数和函数指针的方式使得函数传递给算法比使用当前的C++标准更轻松.此外,它已在D2中修复,因此Tango正在复制的垃圾收集器和其他一些核心内容现在与Phobos分开.所以,一旦Tango被移植到D2,你就可以混合使用Phobos和Tango代码 - 尽管如前面的答案所指出的那样,
目前,我认为dmd是唯一关于D2规范的最新编译器,但我相信gdc和LDC D编译器正在进行工作(尽管工作有多活跃,我不知道).此外,Walter Bright目前正在研究dmd的64位端口,因此我们将在相对较快的时间内获得本机64位编译.
总的来说,我会说D2已经可以使用了,但你需要注意的是,在修复错误等方面还有很多工作要做.因此,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一起使用,因为可以从D调用C函数,并且可以使用一些C++代码(尽管在将C++代码与D混合时存在相当多的限制),因此这不一定是障碍,但需要注意的是.它缺少的主要地方是GUI库.有一些用于D1,并且在D2的GUI库上正在进行工作,但我不相信它们中的任何一个在这一点上都特别成熟.
因此,与所有内容一样,您应该使用哪种语言取决于您正在做什么.D会做大部分事情,做得很好.但它没有做任何事情,而且还在成熟.就个人而言,在这一点上,我使用D,除非我需要为特定项目使用其他东西,除非项目已经用其他东西编写,否则这种情况并不常见,现在移植它是没有意义的.因此,我强烈建议使用D,但你必须仔细研究并使用它来看看它是否真的能够做到你想要的.
Vla*_*eev 12
我知道目前有两个标准库(Phobos和Tango),所以我假设可能有人试图将它们统一起来.
"Unification" is extremely unlikely due to differences in licenses. When Tango will be ported to D 2.0, you will be able to use it alongside Phobos, which isn't (easily) possible in D 1.0.
Additionally I heard some time ago that the languages has problems on the boundaries of GCed/non-GCed code. I couldn't find any reference about that on the D website, so is this problem still true?
I believe there are only problems if you're not careful with how you manage memory. If all references to a GC-allocated object is stored outside the memory regions marked as GC roots, the GC will consider the object unreferenced and will delete it.
If I had to choose D as a C replacement today, what D (v 1.0 or v 2.0) and what standard library would you suggest?
Phobos and Tango are going in somewhat different directions. Phobos (in D 2.0) ties in closely with D2's new features. Tango is more feature-packed, and contains modules which aren't present in Phobos, e.g. HTTP/FTP client support, various cryptography classes, etc. They also follow different design philosophies (Phobos is more imperative/meta-programming-ish, while Tango is very strictly OOP-like, and thus similar to Java in that regard).
我想知道D是多么成熟和稳定,如果它可能是C/C++的一个很好的替代品.
我会谨慎使用任何尚未被ANSI,ISO或ECMA等标准机构支持的语言.这可能是成熟度的指标.例如,Java和Delphi就属于这一类,虽然我不使用这些语言,但它们可能被描述为"成熟".
另一项措施可能是为该语言编写的书籍和文章的数量和质量.安德烈亚历山大夫斯库(Andrei Alexandrescu)有一本关于D的书.他还撰写了一篇关于Dobbs博士语言的长篇文章,专门讨论标准库问题.