DMD против GDC против LDC
Каковы преимущества/недостатки различных компиляторов D? Каким образом производительность и стандартная совместимость/поддержка D2? Насколько хорошо поддерживаются отладчики? Насколько хороши сообщения об ошибках и интеграция IDE? Насколько хороша поддержка 64 бит? Моя мысль пока:
DMD
- Зрелые и ухоженные
- Только одна платформа, поддержка 64 бит не хороша.
- Не FOSS
GDC
- Поддержка различных платформ
- Имеет очень зрелые оптимизации, поэтому быстро?
- Устаревшая среда выполнения
- GCC - хорошая поддержка отладчика?
LDC
- Поддержка различных платформ
- LLVM, поэтому он поддерживает JITing?
- Имеет очень зрелые оптимизации, поэтому быстро?
- Не очень хорошо поддерживается?
- Устаревшая среда выполнения
мертвый/не работает
- Данг
- SDC
- MiniD - очень, очень приятно, но не D (никогда не утверждал, что был, хотя)
Я думаю о таргетинге на ARM, и я думаю, что GDC - это инструмент выбора, но я не уверен.
Ответы
Ответ 1
DMD - эталонная реализация. Только бэкэнд является собственностью, интерфейс - с открытым исходным кодом.
Качество генерации кода не настолько подавляющее. Однако поддержка x64 составляет всего несколько месяцев.
GDC и LDC оба основаны на интерфейсе DMD, поэтому может потребоваться некоторое время, пока не будет объединена новая версия интерфейса.
Поскольку бэкэнд, который они используют, очень зрелые и хороши, качество этих компиляторов в основном зависит от кода клея, который соединяет интерфейс и бэкэнд.
LDC и GDC по-прежнему активно развиваются, но в основном только несколькими парнями.
В общем, они могли бы использовать некоторую рабочую силу.
Ответ 2
- Существенным недостатком DMD является недостаток разделяемой библиотеки:
- Я лично был удивлен, что GDC поддерживает D2, но говорят, что он делает:
- LDC определенно почти не поддерживается: "D2 работает только с x86-32 Linux" . Для меня это проблема шоу.
- При поиске LDC я нашел еще один компилятор (?!): dil. Я еще не тестировал его, но, по крайней мере, он в настоящее время поддерживается. Я буду исследовать больше на эту тему как можно скорее. EDIT: Как было отмечено в комментариях,
dil
пока не близок к несколько полному состоянию - он может только анализировать код и генерировать документацию из источников.
Ответ 3
По состоянию на февраль 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'
То же самое относится к первой программе на 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, в том числе Phobos, но это не так, как она отправляется на Debian по крайней мере.
GDC, и, конечно же, DMD, как скомпилировать выше, так и отлично. Похоже, что GDC довольно современен (DMD выпущен 2.057 два месяца назад, и GDC поддерживает его сейчас).
Для меня GDC был очевидным выбором, потому что простой "apt-get -V install gdc
" привел как в компилятор, так и во время выполнения Phobos без проблем (протестирован на Debian неустойчивый).