Quelles sont les principales différences entre «gc» et «gccgo»?

Quelles sont les principales différences entre les deux compilateurs Go, gc et gccgo? Construire la performance? Performances d’exécution? Options de ligne de commande? Licence?

Je ne cherche pas des avis sur ce qui est le mieux, juste un aperçu de base de leurs différences, afin que je puisse décider lequel est le mieux adapté à mes besoins.

Vous pouvez en voir plus dans ” Configuration et utilisation de gccgo “:

gccgo, un compilateur pour le langage Go. Le compilateur gccgo est une nouvelle interface pour GCC.
Notez que gccgo n’est pas le compilateur gc

Comme expliqué dans ” Gccgo in GCC 4.7.1 ” (juillet 2012)

Le langage Go a toujours été défini par une spécification, pas une implémentation. L’équipe Go a écrit deux compilateurs différents qui implémentent cette spécification: gc et gccgo.

  • Gc est le compilateur d’origine, et l’outil go l’utilise par défaut.
  • Gccgo est une implémentation différente avec un objective différent

Par rapport à gc, gccgo est plus lent à comstackr du code mais supporte des optimisations plus puissantes, donc un programme lié au CPU et construit par gccgo sera généralement plus rapide.

Aussi:

  • Le compilateur gc ne prend en charge que les processeurs les plus populaires: x86 (32 bits et 64 bits) et ARM.
  • Gccgo, cependant, prend en charge tous les processeurs pris en charge par GCC.
    Tous ces processeurs n’ont pas été testés pour gccgo, mais beaucoup d’entre eux, y compris x86 (32 bits et 64 bits), SPARC, MIPS, PowerPC et même Alpha.
    Gccgo a également été testé sur des systèmes d’exploitation que le compilateur gc ne prend pas en charge, notamment Solaris.

Si vous installez la commande go depuis une version standard de Go, elle supporte déjà gccgo via l’option -comstackr : go build -comstackr gccgo myprog .


En bref: gccgo: plus d’optimisation, plus de processeurs .


Cependant, comme commenté par OneOfOne ( source ), il y a souvent une désynchronisation entre go pris en charge par gccgo et la dernière version allant:

gccgo ne supporte que la version v1.2 , donc si vous avez besoin de quelque chose de nouveau dans 1.3 / 1.4 (tip), gccgo ne peut pas être utilisé. –

La version 4.9 de GCC contiendra la version Go 1.2 (pas 1.3) de gccgo .
Les calendriers de publication pour les projets GCC et Go ne coïncident pas, ce qui signifie que la version 1.3 sera disponible dans la twig développement, mais que la prochaine version 4.10 de GCC aura probablement la version Go 1.4 de gccgo.


twotwotwo mentionne dans les commentaires la diapositive de la présentation de Brad Fitzpasortingck

gccgo génère un très bon code
… mais manque l’parsing d’échappement: tue la performance avec beaucoup de petites allocations + garbage
… GC n’est pas précis. Mauvais pour 32 bits.

twotwotwo ajoute:

Une autre diapositive mentionne que la génération de code ARM non gccgo est un processus difficile.
En supposant que ce soit une option intéressante pour votre projet, comparez probablement les binarys pour votre cas d’utilisation sur votre architecture cible.


Comme le remarque PeterSO , Go 1.5 (Q3 / T4 2015) signifie:

Le compilateur et le runtime sont maintenant entièrement écrits dans Go (avec un petit assembleur).
C n’est plus impliqué dans l’implémentation et le compilateur C qui était nécessaire pour la construction de la dissortingbution a donc disparu .

La diapositive “Go in Go” mentionne:

C est parti.
Note latérale: gccgo continue à être fort.