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 все еще активно развиваются, но в основном это всего несколько человек.
В общем, они могли бы использовать какую-то рабочую силу.

  1. Существенным недостатком DMD является общий дефицит библиотеки:
  2. Я лично был удивлен, что GDC поддерживает D2, но они говорят, что это делает:
    • D1: 1,067
    • D2: 2,053

  3. Похоже, что LDC едва ли поддерживается: "D2 работает только на x86-32 Linux". Для меня это проблема шоу-топпера.

  4. При поиске 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 используют один и тот же внешний интерфейс, но они различаются по внутреннему интерфейсу.

Другие вопросы по тегам