代码之家  ›  专栏  ›  技术社区  ›  Rehno Lindeque

D(与C/C++相反)实现低层图书馆的建议

  •  2
  • Rehno Lindeque  · 技术社区  · 15 年前

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

    我需要为库提供一个C API,用于与其他语言(如C++和Python)兼容,我也预期某些部分可能需要用纯C编写来调整性能。

    D对这份工作似乎很有吸引力:在考虑这些要求时,我是否应该意识到一些陷阱?与STD:(map,vector,unordeDelmap等)相比,D容器的性能如何,考虑到手动性能调整(例如,使用STD::MAP:LoopeSyk绑定用于搜索/插入等等)。

    2 回复  |  直到 15 年前
        1
  •  1
  •   dsimcha    15 年前

    你是在考虑短期的,即很紧的最后期限,下周开始运作,还是长期的,即一个大型多年项目的早期计划阶段?

    如果你对短期感兴趣的话,我建议你不要选D。这还是太过分了。

    然而,从长期来看,d开始趋于稳定。该语言的第二版可能在6个月内稳定下来。AndreiAlexandrescu将在三月份发行一本名为“D编程语言”的书,并且正在大力推动D2的稳定。

    至于陷阱,我想说最大的一个陷阱是,做大多数事情的惯用的d方法是使用大量模板,这使得很难为事情创建稳定的abi。这是可以做到的,只是不习惯而已。另一个原因是该语言的版本2还没有一个好的容器库,尽管很明显这是正在开发的。

    从性能上看,DMD(参考实现)有一个旧的优化器。如果你真的对表演着迷,这可能是个问题。gdc是gcc的d编译器,它有更好的优化器,但总是落后于几个版本。ldc是llvm的d编译器,它有一个非常好的优化器,但只支持语言的版本1。然而,D应该是和C++一样快,而用DMD编译的D真的和按照我所做的基准的数字MARS C++编译器编译的C++一样快。

        2
  •  1
  •   Lutger    15 年前

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

    这里有一个关于Tango如何利用D数组和高性能库的切片的(有些陈旧)演示,Array Slice fo'shizzle: http://video.google.com/videoplay?docid=-4010965350602541568&hl=en#

    谷歌2007年会议的幻灯片。(我是新来的,只能发布一个链接,对不起)