D语言是否有多个标准库和GC问题?

我想知道D是多么成熟和稳定,如果它可能是C / C ++的好替代品。

我知道现在有两个标准库(Phobos和Tango)。 还是没有统一的标准库?

此外,我前一段时间听说,语言在GCed / non-GCed代码的边界上存在问题。 我在D网站上找不到任何关于这方面的参考,那么这个问题仍然是真的吗?

D版本是成熟稳定的,肯定有人把它用于实际工作。 Phobos是D有史以来唯一的标准库,但是D1的Phobos缺乏足够的空间来创build各种第三方库来填补空白。 Tango是其中最大的,也是使用最多的第三方库(因此为什么它经常被称为第二个标准库,即使不是这样,Walter Bright也会很快指出它不是)。 然而,D1中的Tango和Phobos混合不好(IIRC是因为Tangoreplace了垃圾收集器等标准的东西),所以D1中的某个编程人员很有可能会使用没有Phobos的Tango。 此外,除了Digital Mars的主编译器(包括LDC和gdc)以外,D1还有多个编译器支持。

D版本2刚刚成熟和稳定。 他们已经停止对语言进行重大修改,所以你通常不必担心在编译器更新的时候发生的任何事情都会像以前一样,而他们仍然在使用语言。 事实上,现在已经足够成熟,Andrei Alexandrescu发布了“ The D Programming Language”作为该语言的权威资源,该语言应该能够保持文本中的错误(这也是我读过的最好的编程语言书籍之一)。 但是,仍然有很多bug修复正在进行,所以很可能会遇到一个bug,这会使您对特定的应用程序感到恼怒。 它已经足够成熟和足够稳定,可以用它来做实际的工作,但要意识到很可能会遇到错误。

探戈还没有被移植到D2,所以在D2编程时,它不是一个真正的select。 不过,火卫一现在相当漂亮。 它有很多很好的补充(它现在实际上有容器!) – 在Phobos中缺乏容器是在D1中使用Tango而不是Phobos的一个重要原因),并且有一些非常强大的东西 – std.algorithm是特别好。 D处理lambda函数,嵌套函数和函数指针的方式使得algorithm的传递函数比使用C ++的当前标准更容易。 而且,它已经在D2中被修复了,所以Tango正在复制的垃圾回收器和其他一些核心内容现在已经和Phobos分开了。 所以,一旦探戈已经被移植到D2,你将能够混合火卫一和探戈代码 – 虽然正如前面的答案中已经指出的,火卫一和探戈使用相当不同的devise哲学(探戈是非常类似Java和火卫一大量使用模板和元编程,而不是使用鸭子input而不是接口),所以我不知道从这个angular度来看,他们会如何混合。

目前,我认为dmd是目前唯一一个关于D2规范的编译器,但是我相信在gdc和LDC D编译器上已经做了一些工作(虽然这个工作有多活跃,不知道)。 而且,Walter Bright目前正在研究dmd的64位端口,因此我们很快就会获得原生的64位编译。

总的来说,我会说D2已经可以使用了,但是你需要知道,在修复bug等方面还有很多工作要做。 所以,D2绝对可以用于业余爱好,也可以在工作中使用,但是如果你确实需要稳定(比如说如果你是波音公司,而错误意味着死亡),那么D1可能仍然是一个更好的select。 当然,关于D2的一件大事就是它有很多D1没有的特性,所以除非你真的需要坚如磐石的稳定性,否则D2很可能是要走的路。 幸运的是,它还在继续成熟和稳定下来,所以时间肯定会到来,因为没有什么问题会使用D2会更好。

无论如何,在一般情况下,D1和D2都可以替代C和C ++。 他们可以做C和C ++所做的事情,特别是在D2的情况下,可以做得更好。 D可能落后的主要地方在于它的优化程度如何。 有很多代码在C或C ++中与D一样快,但是在D上仍然有很多工作要做,所以还有很多空间可以进一步优化它,有时为了提高效率还会落后于C和C ++ 。 所以,一般来说,D是有效率的,但是如果你真的需要尽可能多的效率,那么它可能还不够好(尽pipe它到达那里)。 此外,还有很多成熟的C和C ++库,而D没有任何地方可以在浮动的代码中使用。 任何C代码都可以和D一起使用,因为C函数可以从D中调用,并且一些C ++代码可以(虽然C ++代码和D混合时有一些限制),所以不一定是一个障碍,但是这是要注意的事情。 它缺乏的主要地方是GUI库。 有一些是D1的,在D2的GUI库上也有工作,但是我不认为他们中的任何一个都是特别成熟的。

所以,就像所有的事情一样,你应该使用哪种语言取决于你在做什么。 D将做大部分事情,并做好。 但它并没有做任何事情,而且还在成熟。 就个人而言,在这个时候,我用D,除非我需要为某个特定的项目使用别的东西,除非这个项目已经被其他东西写了,否则现在就没有意义了。 所以,我强烈build议使用D,但是你必须仔细研究它,并用它来看看它是否真的会做到你想要的。

我推荐使用与Phobos D2。 语言足够好,足够稳定,可以弥补执行问题带来的偶然挫折。

我知道现在有两个标准库(Phobos和Tango),所以我认为可能有人试图统一它们。

由于许可证的不同,“统一”是极不可能的。 当探戈将被移植到D 2.0时,您可以将其与Phobos一起使用,这在D 1.0中不是(很容易)。

此外,我前一段时间听说,语言在GCed / non-GCed代码的边界上存在问题。 我在D网站上找不到任何关于这方面的参考,那么这个问题仍然是真的吗?

我相信如果你不小心如何pipe理内存,那就只有问题了。 如果所有对GC分配对象的引用都存储在标记为GC根的内存区域之外,GC将认为该对象未被引用,并将其删除。

如果我今天不得不selectD作为C的替代品,那么D(v 1.0或v 2.0)以及什么标准库会build议?

火卫一和探戈正朝着不同的方向发展。 Phobos(D 2.0版)与D2的新function紧密联系在一起。 Tangofunction更加丰富,包含了Phobos中不存在的模块,例如HTTP / FTP客户端支持,各种密码学类等。它们也遵循不同的devise理念(Phobos更为强制/元编程,而探戈是非常严格的面向对象的,因此在这方面与Java类似)。

我想知道D是多么成熟和稳定,如果它可能是C / C ++的好替代品。

我会小心使用任何尚未由ANSI,ISO或ECMA等标准机构支持的语言。 这也许是一个成熟的指标。 也就是说,Java和Delphi就属于这个范畴,虽然我不使用这些语言,但可能会被描述为“成熟”。

另一个措施可能是为该语言编写的书籍和文章的数量和质量。 D有一本书,我是由Andrei Alexandrescu知道的。 他还为Dobbs博士写了一篇长篇文章 ,专门讨论标准图书馆问题。

我曾经在Phobos和SDL写过一个D1的小游戏,但是这是一个非常小的项目。

在我看来,D缺乏:

  • 一个官方的networking论坛,人们可以得到帮助和search答案(而不是新闻组)
  • 许多SDK的官方存储库转换为D(例如,SDL,Gtk等,这些通常很难find和使用,当它们存在时)。

我不认为取代C的问题是关于一个潜在的替代在理论层面是否是“好的”或“成熟的”,而是关于实际的考虑和事实上C是“足够好” 。 除非一种语言对于每个主要的操作系统都有完整的本地构build和运行时环境,否则用于C的实际并不实际。 C是POSIX语言的事实是整个问题的重要组成部分。

当然,像D这样的其他半低级语言也可以在专业领域有很好的应用。 但是你不可能看到用D编写的主要的多平台软件(networking服务器,数据库服务器,文字处理器,网页浏览器等),因为没有主要的操作系统(更不用说所有这些)带有D构build或运行时环境。

Interesting Posts