DMD против GDC против LDC - PullRequest
       45

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

55 голосов
/ 20 июля 2011

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

DMD

  • Зрелый и ухоженный
  • Только одна платформа, поддержка 64 битов не годится
  • Не FOSS

GDC

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

LDC

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

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

  • dang
  • sdc
  • MiniD - очень, очень приятно, ноне D (хотя никогда не утверждал, что это так)

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

Ответы [ 3 ]

23 голосов
/ 21 июля 2011

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

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

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

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

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

  4. При поиске LDC я нашел еще один компилятор (?!): dil . Я еще не проверял это, но по крайней мере это в настоящее время поддерживается. Я буду исследовать больше по этой теме как можно скорее. РЕДАКТИРОВАТЬ: Как было отмечено в комментариях, dil пока не близка к несколько завершенному состоянию - она ​​может только анализировать код и генерировать документацию из источников.
3 голосов
/ 25 февраля 2012

По состоянию на февраль 2012 года, похоже, что LDC на самом деле не годится для использования (по крайней мере, в Debian).

Например, рассмотрим первую программу из D book :

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 для D2, включая Phobos, но это не тот способ, которым она поставляется в Debian, по крайней мере.

GDC, и, конечно, DMD, оба прекрасно компилируют вышеприведенное.Похоже, что GDC достаточно обновлен (DMD выпущен 2.057 два месяца назад, и GDC поддерживает его сейчас).

Для меня GDC был очевидным выбором, потому что простой 'apt-get -V install gdc' принес оба компилятораи среда выполнения Phobos без проблем (проверено на нестабильной работе Debian).

...