58 votes

DMD vs. GDC vs. LDC

Quels sont les avantages/inconvénients des différents compilateurs D? Qu'en est-il des performances et de la conformité aux normes/D2? Comment les débogueurs sont-ils pris en charge? Comment sont les messages d'erreur et l'intégration à l'IDE? Comment est le support 64 bits? Mes réflexions jusqu'à maintenant:

DMD

  • Mûr et bien entretenu
  • Une seule plateforme, le support 64 bits n'est pas bon
  • Pas open source

GDC

  • Prise en charge de diverses plates-formes
  • Dispose de très bonnes optimisations matures, donc c'est rapide?
  • Runtime obsolète?
  • GCC donc un bon support de débogage?

LDC

  • Prise en charge de diverses plates-formes
  • LLVM, donc il prend en charge la JITing?
  • Dispose de très bonnes optimisations matures, donc c'est rapide?
  • Peu maintenu?
  • Runtime obsolète?

mort/ne fonctionne pas

  • dang
  • sdc
  • MiniD - très, très bien, mais pas D (bien qu'elle ne prétende jamais l'être)

Je pense à cibler ARM et je pense que GDC est l'outil de choix, mais je ne suis pas sûr.

2 votes

DMD est l'implémentation de référence (bugs mis à part) et il est multi plateforme

0 votes

VisualD avec cv2pdb a un très bon support de débogage pour DMD dsource.org/projects/visuald/wiki/Tour/Debugger

25voto

Trass3r Points 1505

DMD est l'implémentation de référence, le backend et le frontend sont open source. La qualité de la génération de code n'est pas si écrasante.

GDC et LDC sont tous deux basés sur le frontend de DMD, donc cela peut prendre un certain temps jusqu'à ce qu'une nouvelle version du frontend soit fusionnée.
Étant donné que les backends qu'ils utilisent sont très matures et performants, la qualité de ces compilateurs dépend principalement du code de liaison qui connecte le frontend et le backend.

LDC et GDC sont toujours activement développés, mais principalement par quelques personnes seulement.
Dans l'ensemble, ils pourraient utiliser un peu de main-d'œuvre supplémentaire.

0 votes

Comment GDC et LDC soutiennent-ils Druntime et Tango, Phobos ? Il semble y avoir des problèmes.

0 votes

LDC a un très bon support pour Tango. Ne sais pas pour GDC. GDC a un fork à jour de phobos2, le fork de LDC a maintenant 2 mois.

0 votes

Il semble que la prise en charge de 64 bits fonctionne maintenant : auto-tester.puremagic.com/?projectid=14

9voto

vines Points 3649
  1. Le principal inconvénient de DMD est le manque de bibliothèque partagée :

  2. Personnellement, j'ai été surpris que GDC supporte D2, mais ils disent que c'est le cas :

    • D1 : 1.067
    • D2 : 2.053
  3. LDC semble clairement être peu entretenu : "D2 fonctionne uniquement sur x86-32 Linux". Pour moi, c'est un problème rédhibitoire.

  4. En cherchant des informations sur LDC, j'ai trouvé un autre compilateur (?!): dil. Je ne l'ai pas encore testé, mais au moins il est actuellement maintenu. Je vais me renseigner davantage sur ce sujet dès que possible. EDIT : Comme cela a été souligné dans les commentaires, dil est loin d'être dans un état complet pour le moment — il est seulement capable de parser le code et de générer de la documentation à partir des sources.

2 votes

Ne jugez pas le CDC en fonction du wiki. Le développement se déroule sur bitbucket.org/lindquist/ldc et forks.

0 votes

Dil n'est apparemment pas en mesure de générer des binaires pour le moment (il ne fonctionne que pour la génération de documents pour le moment). Cela est indiqué sur leur page Google Code. Un peu décevant, car ça a l'air plutôt cool.

0 votes

@Andrew Spott: hmm... Même pas une représentation intermédiaire?

3voto

Justin Points 5321

En février 2012, il semble que LDC ne soit pas vraiment une option utilisable (du moins sur Debian).

Par exemple, considérez le premier programme dans le livre D :

import std.stdio;

void main(string[] args)
{
        writeln("Bonjour, tout le monde !");
}

Cela échouera à compiler avec LDC sur mon système :

hello.d(24): Erreur : le module stdio ne peut pas lire le fichier 'std/stdio.d'

Il en va de même pour le premier programme sur dlang.org :

import std.stdio;

void main() {
    ulong lignes = 0;
    double sommeLongueur = 0;
    foreach (ligne; stdin.byLine()) {
        ++lignes;
        sommeLongueur += ligne.length;
    }
    writeln("Longueur moyenne de ligne: ",
        lignes ? sommeLongueur / lignes : 0);
}

Cela est dû au fait que mon LDC ne prend pas en charge Phobos--la bibliothèque d'exécution D actuelle. Il semble possible de construire une version D2 de LDC, y compris Phobos, mais ce n'est pas ainsi qu'il est distribué sur Debian au moins.

GDC, et bien sûr DMD, compilent tous les deux le code ci-dessus sans problème. Il semble que GDC soit assez à jour (DMD a publié la version 2.057 il y a deux mois et GDC le prend en charge maintenant).

Pour moi, GDC était le choix évident car un simple 'apt-get -V install gdc' a apporté à la fois le compilateur et la bibliothèque d'exécution Phobos sans problème (testé sur Debian unstable).

5 votes

Votre problème est dû à une configuration incorrecte ou manquante (etc/ldc2.conf, qui se trouve généralement dans /usr/local). Si le fichier existe, il doit y avoir au moins un commutateur "-I{CHEMIN}" à l'intérieur qui pointe vers des sources appartenant à la bibliothèque (phobos2) et au runtime. Par exemple, std/stdio.d appartient à phobos2. Je ne suis pas un expert, mais j'ai réussi à faire compiler le compilateur LDC (branche principale sur github à ce moment) sur OSX Lion 64 bits et cette configuration a été faite automatiquement par CMake. NB : il y avait des problèmes avec certains symboles du runtime lors de la liaison des programmes, mais je soumettrai un correctif à ce sujet.

0 votes

J'ai le même problème. S'il manque une configuration, c'est manquant dans l'empaquetage Debian de lmd.

0voto

Airbus5717 Points 1

DMD est utilisé pour le développement car il compile plus rapidement pour la production, vous pouvez utiliser LDC ou GDC tous les compilateurs du langage D utilisent le même frontal mais ils diffèrent en termes de backend

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X