Подтвердить что ты не робот

DMD против GDC против LDC

Каковы преимущества/недостатки различных компиляторов D? Каким образом производительность и стандартная совместимость/поддержка D2? Насколько хорошо поддерживаются отладчики? Насколько хороши сообщения об ошибках и интеграция IDE? Насколько хороша поддержка 64 бит? Моя мысль пока:

DMD

  • Зрелые и ухоженные
  • Только одна платформа, поддержка 64 бит не хороша.
  • Не FOSS

GDC

  • Поддержка различных платформ
  • Имеет очень зрелые оптимизации, поэтому быстро?
  • Устаревшая среда выполнения
  • GCC - хорошая поддержка отладчика?

LDC

  • Поддержка различных платформ
  • LLVM, поэтому он поддерживает JITing?
  • Имеет очень зрелые оптимизации, поэтому быстро?
  • Не очень хорошо поддерживается?
  • Устаревшая среда выполнения

мертвый/не работает

  • Данг
  • SDC
  • MiniD - очень, очень приятно, но не D (никогда не утверждал, что был, хотя)

Я думаю о таргетинге на ARM, и я думаю, что GDC - это инструмент выбора, но я не уверен.

4b9b3361

Ответ 1

DMD - эталонная реализация. Только бэкэнд является собственностью, интерфейс - с открытым исходным кодом.
Качество генерации кода не настолько подавляющее. Однако поддержка x64 составляет всего несколько месяцев.

GDC и LDC оба основаны на интерфейсе DMD, поэтому может потребоваться некоторое время, пока не будет объединена новая версия интерфейса.
Поскольку бэкэнд, который они используют, очень зрелые и хороши, качество этих компиляторов в основном зависит от кода клея, который соединяет интерфейс и бэкэнд.

LDC и GDC по-прежнему активно развиваются, но в основном только несколькими парнями.
В общем, они могли бы использовать некоторую рабочую силу.

Ответ 2

  • Существенным недостатком DMD является недостаток разделяемой библиотеки:
  • Я лично был удивлен, что GDC поддерживает D2, но говорят, что он делает:
    • D1:1.067
    • D2: 2.053

  • 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 неустойчивый).