2011-07-20 18 views
50

Jakie są plusy/minusy różnych kompilatorów D? Jaka jest wydajność i standard zgodności/D2? Jak dobrze obsługiwane są debuggery? Jak dobre są komunikaty o błędach i czy chodzi o integrację IDE? Jak dobra jest obsługa 64 bitów? Moja myśl tej pory:DMD vs. GDC vs. LDC

DMD

  • dojrzały i dobrze utrzymane
  • Tylko jedna platforma, 64 bitowego nie jest dobre
  • Nie FOSS

GDC

  • Obsługuje różne platformy
  • Ma bardzo dojrzałe optymalizacje, więc jest szybki?
  • Nieaktualny program wykonawczy?
  • GCC, więc dobre wsparcie dla debuggera?

LDC

  • Obsługuje różne platformy
  • LLVM, więc obsługuje JITing?
  • Ma bardzo dojrzałe optymalizacje, więc jest szybki?
  • Niezbyt dobrze utrzymany?
  • Nieaktualny program wykonawczy?

martwy/nie działa

  • dang
  • sdc
  • MiniD - bardzo, bardzo ładne, ale nie D (nigdy nie twierdził, że jest, choć)

Zastanawiam się nad ukierunkowaniem na ARM i myślę, że GDC jest narzędziem wyboru, ale nie jestem pewien.

+2

DMD jest implementacja referencyjna (bugs mimo wszystko) i idzie wieloplatformowym –

+0

VisualD z cv2pdb ma bardzo dobre wsparcie dla debugowania DMD http://www.dsource.org/projects/visuald/wiki/Tour/Debugger –

Odpowiedz

21

DMD to implementacja referencyjna. Tylko backend jest zastrzeżony, frontend jest open source.
Jakość generowania kodu nie jest przytłaczająca. Obsługa x64 ma zaledwie kilka miesięcy.

GDC i LDC są zarówno oparte na interfejsie DMD więc może to zająć trochę czasu, aż nowa wersja nakładka jest scalona.
Od backendów ich stosowanie jest bardzo dojrzały i dobra jakość tych kompilatorów zależy głównie na kodzie kleju, który łączy frontend i backend.

LDC i GDC są nadal aktywnie rozwijane, ale głównie przez kilku facetów.
W sumie mogli wykorzystać trochę siły roboczej.

+0

Jak zrobić Wsparcie dla GDC i LDC dla Druntime and Tango, Phobos? Wygląda na to, że są problemy. – Fritz

+0

LDC ma bardzo dobre wsparcie dla Tango. Nie wiem o GDC. GDC ma aktualny widelec phobos2, widelec LDC ma teraz 2 miesiące. – Trass3r

+3

LDC jest żywy. https://bitbucket.org/lindquist/ldc/changesets – Trass3r

7
  1. Istotną wadą DMD jest wspólna niedobór biblioteka:
  2. Osobiście byłem zaskoczony, że GDC wspiera D2, ale they say it does:
    • D1: 1,067
    • D2: 2,053

  3. LDC zdecydowanie wydaje się być ledwie utrzymuje: "D2 is working on x86-32 Linux only". Dla mnie jest to problem z showstopper.

  4. Podczas wyszukiwania LDC znalazłem jeszcze jeden kompilator (?!): dil. Nie testowałem jeszcze tego, ale przynajmniej jest on obecnie utrzymywany. Będę badać więcej na ten temat JAK NAJSZYBCIEJ. EDYCJA: Jak wskazano w komentarzach, dil nie jest na razie w pobliżu kompletnego stanu - potrafi tylko analizować kod i generować dokumentację ze źródeł.
+2

Nie oceniaj na LDC na podstawie wiki. Rozwój odbywa się na https://bitbucket.org/lindquist/ldc i widłach. – Trass3r

+0

Dil jest najwyraźniej niezdolny do wygenerowania binariów (działa tylko na generatorze docs atm). Jest to podane na ich stronie kodowej Google. Coś w stylu bummer, wygląda całkiem fajnie –

+0

@Andrew Spott: hmm ... Nie ma nawet pośredniej reprezentacji? – vines

3

Wydaje się, że od lutego 2012 r. LDC nie jest właściwie użyteczną opcją (przynajmniej na Debianie).

Rozważmy na przykład pierwszy program w D book:

import std.stdio; 

void main(string[] args) 
{ 
     writeln("Hello, world!"); 
} 

to nie uda się skompilować z LDC w moim systemie:

hello.d(24): Error: module stdio cannot read file 'std/stdio.d' 

Tak samo jest z pierwszego programu w 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); 
} 

Dzieje się tak, ponieważ mój LDC nie ma podnośnik Phobos--the current D runtime library. Wygląda na to, że można zbudować wersję LDC D2, w tym Phobos, ale to nie jest sposób w jaki dostarcza ją przynajmniej Debian.

GDC, i oczywiście DMD, oba kompilują powyższe dobrze. Wygląda na to, że GDC jest dość aktualne (DMD wydało 2.057 dwa miesiące temu i GDC obsługuje go teraz).

Dla mnie GDC był oczywistym wyborem, ponieważ prosty "apt-get -V install gdc" przyniósł zarówno kompilator, jak i środowisko uruchomieniowe Phobos bez żadnych problemów (testowane na niestabilnym systemie Debian).

+5

Twój problem wynika z nieprawidłowej lub brakującej konfiguracji ('etc/ldc2.conf', zwykle znajduje się w'/usr/local'). Jeśli plik istnieje, to powinien znajdować się przynajmniej jeden przełącznik '' -I {PATH} "', który wskazuje na źródła należące do biblioteki (phobos2) i środowisko wykonawcze. 'std/stdio.d' na przykład należy do phobos2. Nie jestem ekspertem, ale udało mi się uzyskać kompilator LDC (master na Github w tym czasie) do kompilacji na OSX Lion 64-bit i ta konfiguracja została wykonana automatycznie przez CMake. Uwaga: podczas łączenia programów wystąpiły problemy z niektórymi symbolami środowiska wykonawczego, ale prześlę poprawkę na ich temat. – Dan

+0

Mam ten sam problem. Jeśli brakuje jakiejś konfiguracji, brakuje jej w pakiecie Debiana LMD. – poolie