Рекомендации по реализации низкоуровневых библиотек в D (в отличие от C / C ++) - PullRequest
2 голосов
/ 28 ноября 2009

Мне нужен совет по выбору языка программирования D для проекта. Проект представляет собой низкоуровневую библиотеку, похожую на базу данных со множеством ассоциативных контейнеров и так далее. Следовательно, эффективность очень важна для меня.

Мне нужно предоставить C API для библиотеки для совместимости с другими языками, такими как C ++ и Python, и я также ожидаю, что некоторые разделы могут быть написаны на простом C для настройки производительности.

D кажется очень привлекательным для этой работы: есть ли какие-то подводные камни, о которых я должен знать, учитывая эти требования? Как производительность D-контейнеров сравнивается с std: :( ​​map, vector, unordered_map и т. Д.), Учитывая ручную настройку производительности (например, используя std :: map :: lower_bound для поиска / вставки и т. Д. ).

Ответы [ 2 ]

1 голос
/ 15 декабря 2009

В дополнение к ответу 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' для слайдов. (Я новичок здесь и могу опубликовать только одну ссылку, извините)

1 голос
/ 29 ноября 2009

Думаете ли вы о краткосрочном, то есть о сжатых сроках, о том, чтобы приступить к работе на следующей неделе, или о долгосрочном, то есть о ранних этапах планирования большого многолетнего проекта?

Если вы заинтересованы в краткосрочной перспективе, я бы рекомендовал против D. Это все еще слишком круто.

В долгосрочной перспективе, однако, D начинает стабилизироваться. Версия 2 языка, вероятно, будет стабильной через 6 месяцев. Андрей Александреску выпускает книгу «Язык программирования D» в марте, и делается огромный шаг, чтобы стабилизировать D2 для него.

Что касается подводных камней, я бы сказал, что самый большой из них заключается в том, что идиоматический способ D делать большинство вещей - это множество шаблонов, что затрудняет создание стабильных ABI для вещей. Это может быть сделано, это просто не идиоматично. Другая причина в том, что пока нет хорошей библиотеки контейнеров для версии 2 языка, хотя, видимо, над этим работают.

С точки зрения производительности, DMD, являющаяся эталонной реализацией, имеет старый оптимизатор. Если вы действительно одержимы производительностью, это может быть проблемой. GDC, D-компилятор для GCC, имеет лучший оптимизатор, но всегда отстает от нескольких выпусков. LDC, D-компилятор для LLVM, имеет потрясающий оптимизатор, но поддерживает только версию 1 языка. D, однако, должен быть таким же быстрым, как C ++, а D, скомпилированный с DMD, действительно так же быстр, как C ++, скомпилированный с компилятором Digital Mars C ++, в соответствии с моими тестами.

...