2

我需要一些关于为项目选择 D 编程语言的建议。该项目是一个低级库,类似于具有许多关联容器等的数据库。因此,效率对我来说非常重要。

我需要为该库提供一个 C API,以便与 C++ 和 Python 等其他语言兼容,并且我还预计某些部分可能需要用纯 C 编写以调整性能。

D 似乎对这份工作很有吸引力:考虑到这些要求,我应该注意哪些陷阱?D 容器的性能与 std::(map, vector, unordered_map, etc...) 相比如何,考虑到手动性能调整(例如使用 std::map::lower_bound 进行搜索/插入等)。

4

2 回答 2

1

除了 dsimcha 的回答之外,我还要指出,在 D 中编写性能良好的应用程序首先需要与 GC 配合得很好。D 中的垃圾收集不如 Java 或 C# 快,因此您需要知道何时以及如何避免或最小化它。幸运的是,您可以 1) 通过 raii 更好地利用堆栈分配,以及 2) 在需要时使用手动内存管理。

这是关于 Tango 如何利用 D 数组和切片来构建高性能库的(有点旧的)演示文稿,Array slicing fo' shizzle:http: //video.google.com/videoplay ?docid=-4010965350602541568&hl=en #

google 'd Conference 2007' 的幻灯片。(我是新来的,只能发一个链接,抱歉)

于 2009-12-14T22:17:53.323 回答
1

您是考虑短期的,即紧迫的最后期限,下周启动并运行它,还是考虑长期的,即大型多年项目的早期规划阶段?

如果您对短期感兴趣,我建议您反对 D。它仍然过于前沿。

然而,从长期来看,D 开始稳定。该语言的第 2 版可能会在 6 个月内稳定下来。Andrei Alexandrescu 将在 3 月出版一本名为“The D Programming Language”的书,并且正在大力推动稳定 D2 的工作。

至于陷阱,我想说最大的一个是做大多数事情的惯用 D 方法是使用大量模板,这使得为事物创建稳定的 ABI 变得困难。可以做到,只是不习惯而已。另一个是该语言的第 2 版还没有好的容器库,尽管显然这正在处理中。

在性能方面,作为参考实现的 DMD 有一个旧的优化器。如果你真的痴迷于性能,这可能是个问题。GDC 是 GCC 的 D 编译器,具有更好的优化器,但总是落后几个版本。LDC 是 LLVM 的 D 编译器,具有出色的优化器,但仅支持该语言的版本 1。但是,D 应该与 C++ 一样快,根据我所做的基准测试,使用 DMD 编译的 D 确实与使用 Digital Mars C++ 编译器编译的 C++ 一样快。

于 2009-11-29T16:08:27.610 回答