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

D语言是否有多个标准库和GC问题?,d,phobos,tango,D,Phobos,Tango,我想知道D有多成熟和稳定,它是否可以很好地替代C/C++ 我知道目前有两个标准库(Phobos和Tango)。是否仍然没有统一的标准库 此外,我不久前听说这些语言在GCed/非GCed代码的边界上存在问题。我在D网站上找不到任何关于这方面的参考资料,所以这个问题仍然是真的吗 我知道目前有两个标准库(Phobos和Tango),所以我假设可能有人试图统一它们 由于许可证不同,“统一”的可能性极低。当Tango被移植到D2.0时,你将能够和火卫一一起使用它,这在D1.0中是不可能的 此外,我不久前听

我想知道D有多成熟和稳定,它是否可以很好地替代C/C++

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

此外,我不久前听说这些语言在GCed/非GCed代码的边界上存在问题。我在D网站上找不到任何关于这方面的参考资料,所以这个问题仍然是真的吗

我知道目前有两个标准库(Phobos和Tango),所以我假设可能有人试图统一它们

由于许可证不同,“统一”的可能性极低。当Tango被移植到D2.0时,你将能够和火卫一一起使用它,这在D1.0中是不可能的

此外,我不久前听说这些语言在GCed/非GCed代码的边界上存在问题。我在D网站上找不到任何关于这方面的参考资料,所以这个问题仍然是真的吗

我相信只有在你不小心管理内存的情况下才会有问题。如果对GC分配对象的所有引用都存储在标记为GC根的内存区域之外,GC将考虑未引用的对象并删除它。

如果我今天不得不选择D作为C的替代品,您会推荐什么样的D(V1.0或V2.0)和什么样的标准库


火卫一和探戈的方向有些不同。火卫一(在D2.0中)与D2的新功能密切相关。Tango的功能更加丰富,包含Phobos中没有的模块,例如HTTP/FTP客户端支持、各种加密类等。它们还遵循不同的设计理念(Phobos更像是命令式/元编程,而Tango则非常严格地类似于OOP,因此在这方面类似于Java)

我不认为替换C的问题在于潜在的替代品在理论上是否“好”或“成熟”,而在于实际考虑以及C对于其用途是否“足够好”。除非一种语言对于每个主要的操作系统都有完整的本机构建和运行时环境,否则对于C语言的用途来说是不实际的。C是POSIX语言这一事实是整个问题的一个重要部分

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

我想知道D有多成熟和稳定,它是否可以很好地替代C/C++

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


另一个衡量标准可能是为该语言编写的书籍和文章的数量和质量。我知道安德烈·亚历山德雷斯库为D写了一本书。他还为Dobbs博士写了一篇关于语言的长篇文章,专门讨论标准图书馆问题。

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编程语言已经足够成熟了,它是该语言的权威资源,除非文本中出现错误,否则应该保持有效(这也是我读过的最好的编程语言书之一)。然而,仍然有大量的bug修复工作正在进行,因此很可能会遇到一个bug,它会对您的特定应用程序造成相当大的不适。它确实足够成熟和稳定,可以用它做实际的工作,但是要注意,它很可能会遇到bug

Tango还没有被移植到D2,所以在D2中编程时,它实际上不是一个选项。不过,火卫一现在进展得相当不错。它得到了很多很好的补充(它现在实际上有容器了!-火卫一中缺少容器是在D1中使用Tango而不是火卫一的一个重要原因),并且有一些非常强大的东西在里面-std.algorithm特别好。D处理lambda函数、嵌套函数和函数指针的方式使得传递函数到算法的光年比当前的C++标准要轻松很多。此外,它已在D2中修复,因此Tango复制的垃圾收集器和其他一些核心内容现在与Phobos分离。因此,一旦Tango被移植到D2,您将能够混合使用Phobos和Tango代码——尽管正如前面的回答中所指出的,Phobos和Tango使用