2009-11-28 23 views
2

我需要选择d编程语言的一个项目了一些建议。该项目是一个类似于具有许多关联容器的数据库的低级库,等等。因此效率对我来说非常重要。建议在d执行低级别库(相对于C/C++)

我需要为库中的C API,可以兼容像C++和Python语言,我也预料到某些部分可能需要在普通的C调优性能被写入。

d看起来非常有吸引力的这个工作:是否有任何陷阱我应该知道考虑这些要求的?如何d容器的性能比较的标准::(地图,矢量,unordered_map,等...),以手动性能调整到帐户(例如,使用的std ::地图:: LOWER_BOUND搜索/插入等等)。

+0

你永远不会知道,没有标杆这些东西自己。如果不理解其性能,你将如何编写一个“低级”库? – 2009-11-28 13:19:12

+0

@Jonathan:我仍然处于设计的投机阶段。在挖掘基准之前,我正在寻找快速生存能力的答案。我认为这是第一次听到别人不得不说的浪费时间。 (但设置一些基准测试是个好主意) – 2009-11-28 13:44:13

+1

无论如何,您可能需要一些积极的性能调整技术,例如:http:// stackoverflow。com/questions/926266/performance-optimization-strategies-of-last-resort/927773#927773 – 2009-11-28 14:23:56

回答

1

你在想短期内,即时间紧迫,得到这个启动和运行,下周,或长期的,即一个大的多期项目的早期规划阶段?

如果你有兴趣在短期内,我会建议对D.它仍然太前沿。

但从长远来看,d开始趋于稳定。该语言的第2版可能会在6个月内保持稳定。 Andrei Alexandrescu将在3月份发布一本名为“D语言程序设计语言”的书,并且正在为稳定D2做出巨大的努力。

至于陷阱,我认为最大的一点是,大多数事情的惯用D方法是有很多模板,这使得很难为事物创建稳定的ABI。它可以完成,它不是惯用的。另一个原因是这个语言版本2没有好的容器库,尽管显然这个工作正在进行中。

性能方面,DMD,这是参考实现,有一个老优化。如果你真的痴迷于表现,这可能是一个问题。 GDC是一个GCC的D编译器,它有一个更好的优化器,但总是落后几个版本。 LDVM是一个用于LLVM的D编译器,它有一个了不起的优化器,但只支持该语言的版本1。然而,D的速度应该和C++一样快,而使用DMD编译的D实际上与根据我所做的基准测试,使用Digital Mars C++编译器编译的C++一样快。

+0

说实话,这个库是一个巨大的关联容器,或多或少像一个“活”数据库。实际上我并不需要为我的初始应用程序提供高性能,但我打算将库增加到强大的高带宽应用程序中,所以我想要一个相对容易的“升级路径”。我的计划是从一些STL容器开始,逐渐迁移到特殊结构,以处理诸如分页到磁盘和优化缓存在运行时的使用情况(这些显然是非常长期的)。我可能会写一些C代码并将其链接到D库,尽管... – 2009-11-29 16:44:34

+0

(另外,我是LLVM的粉丝,所以我希望LDC在不久的将来能够支持2.0版本,如果我有那种时间我会跳进去帮助!) – 2009-11-29 16:51:30

1

除了dsimcha的答案我想指出的是,在首位d书写性能良好的应用程序需要发挥好与GC。 D中的垃圾收集速度不如Java或C#中的快,因此您需要知道何时以及如何避免或最小化它。幸运的是,您可以1)更好地利用raii的堆栈分配和2)在需要时使用手动内存管理。

下面是关于探戈是如何顺势d阵列和切片的高性能库,阵列切片为” shizzle: http://video.google.com/videoplay?docid=-4010965350602541568&hl=en#

谷歌的一个(有点老)介绍d会议2007'为幻灯片。 (我是新来的,只能发布一个链接,抱歉)

+0

啊,是的,我打算使用手动内存管理。谢谢,切片上的信息非常丰富! – 2009-12-16 11:19:54