关于在D中实现低级库的建议(与C / C ++相反)

时间:2009-11-28 12:11:27

标签: performance language-features d low-level

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

我需要为库提供一个C API,以便与其他语言(如C ++和Python)兼容,我还预计可能需要在普通的C中编写一些部分来调整性能。

对于这项工作来说,D似乎非常有吸引力:考虑到这些要求,我是否应该注意哪些陷阱? D容器的性能如何与std ::( map,vector,unordered_map等...)进行比较,将手动性能调整考虑在内(例如使用std :: map :: lower_bound进行搜索/插入等等) )。

2 个答案:

答案 0 :(得分:1)

您是否在考虑短期,即紧迫的截止日期,下周开始运行,或长期运行,即大型多年项目的早期规划阶段?

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

然而,长期来看,D开始趋于稳定。该语言的第2版可能在6个月内保持稳定。 Andrei Alexandrescu将在3月发行一本名为“D编程语言”的书,并且正在努力为其稳定D2。

就陷阱而言,我认为最大的问题是,做大多数事情的惯用D方法有很多模板,这使得很难为事物创建稳定的ABI。它可以做到,它不是惯用的。另一个是该语言的第2版没有好的容器库,但显然正在进行中。

性能方面,DMD是参考实现,它有一个旧的优化器。如果你真的沉迷于性能,这可能是一个问题。 GDC是GCC的D编译器,它具有更好的优化器,但总是落后于一些版本。 LDC是一个用于LLVM的D编译器,具有极好的优化器,但仅支持该语言的版本1。然而,D应该和C ++一样快,根据我已经完成的基准测试,用DMD编译的D真的和使用Digital Mars C ++编译器编译的C ++一样快。

答案 1 :(得分:1)

除了dsimcha的回答,我还会注意到在D中编写优秀的性能应用程序首先需要与GC一起使用。 D中的垃圾收集速度不如Java或C#中那么快,因此您需要知道何时以及如何避免或最小化它。幸运的是,您可以1)使用raii更好地使用堆栈分配,2)在需要时使用手动内存管理。

这是一个(有点旧)的演示文稿,讲述了Tango如何利用D阵列和切片来获得高性能库,数组切片:shizzle: http://video.google.com/videoplay?docid=-4010965350602541568&hl=en#

幻灯片上的“谷歌会议2007”。 (我是新来的,只能张贴一个链接,抱歉)