DMD против GDC против LDC
Каковы плюсы / минусы разных D-компиляторов? Как производительность и стандарт соответствия / поддержка D2? Насколько хорошо поддерживаются отладчики? Насколько хороши сообщения об ошибках и интегрирована ли IDE? Насколько хороша поддержка 64 бит? Моя мысль до сих пор:
DMD
- Зрелый и ухоженный
- Только одна платформа, 64-битная поддержка не хорошо
- Не ФОСС
GDC
- Поддерживает различные платформы
- Есть очень зрелые оптимизации, так что это быстро?
- Устаревшее время выполнения?
- GCC так хорошая поддержка отладчика?
LDC
- Поддерживает различные платформы
- LLVM, поэтому он поддерживает JITing?
- Есть очень зрелые оптимизации, так что это быстро?
- Не очень ухоженный?
- Устаревшее время выполнения?
мертв / не работает
- Данг
- SDC
- MiniD - очень, очень хороший, но не D (хотя никогда не претендовал)
Я думаю о таргетинге ARM и думаю, что GDC - это инструмент выбора, но я не уверен.
4 ответа
DMD является эталонной реализацией. Только бэкэнд является проприетарным, а внешний интерфейс - открытым.
Качество генерации кода не такое уж подавляющее. x64 поддержка всего несколько месяцев назад.
GDC и LDC основаны на внешнем интерфейсе DMD, поэтому может потребоваться некоторое время, пока новая версия внешнего интерфейса будет объединена.
Поскольку используемые ими бэкэнды очень зрелые и хорошие, качество этих компиляторов в основном зависит от связующего кода, связывающего фронтенд и бэкэнд.
LDC и GDC все еще активно развиваются, но в основном это всего несколько человек.
В общем, они могли бы использовать какую-то рабочую силу.
- Существенным недостатком DMD является общий дефицит библиотеки:
- Я лично был удивлен, что GDC поддерживает D2, но они говорят, что это делает:
- D1: 1,067
- D2: 2,053
- Похоже, что LDC едва ли поддерживается: "D2 работает только на x86-32 Linux". Для меня это проблема шоу-топпера.
- При поиске LDC я нашел еще один компилятор (?!): Dil. Я еще не проверял это, но по крайней мере это в настоящее время поддерживается. Я буду исследовать больше по этой теме как можно скорее. РЕДАКТИРОВАТЬ: Как было указано в комментариях,
dil
пока не близок к полному состоянию - он способен только анализировать код и генерировать документацию из источников.
По состоянию на февраль 2012 года, кажется, что LDC на самом деле не годится для использования (по крайней мере, в Debian).
Например, рассмотрим первую программу в книге D:
import std.stdio;
void main(string[] args)
{
writeln("Hello, world!");
}
Это не удастся скомпилировать с LDC в моей системе:
hello.d(24): Error: module stdio cannot read file 'std/stdio.d'
То же самое относится и к первой программе на http://dlang.org/:
import std.stdio;
void main() {
ulong lines = 0;
double sumLength = 0;
foreach (line; stdin.byLine()) {
++lines;
sumLength += line.length;
}
writeln("Average line length: ",
lines ? sumLength / lines : 0);
}
Это потому, что мой LDC не поддерживает Phobos - текущую библиотеку времени выполнения D. Похоже, что возможно построить версию LDC для D2, включая Phobos, но это, по крайней мере, не так, как в Debian.
GDC, и, конечно, DMD, оба компилируют вышеупомянутое просто отлично. Похоже, что GDC достаточно обновлен (DMD выпущен 2.057 два месяца назад, и GDC поддерживает его).
Для меня GDC был очевидным выбором, потому что простойapt-get -V install gdc
'ввел как компилятор, так и среду выполнения Phobos без проблем (проверено на нестабильной работе Debian).
DMD используется для разработки, потому что он быстрее компилируется для производства. Вы можете использовать LDC или GDC. Все компиляторы языка D используют один и тот же внешний интерфейс, но они различаются по внутреннему интерфейсу.