2009-11-28 62 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