Wat zijn de belangrijkste verschillen tussen ‘gc’ en ‘gccgo’?

Wat zijn de belangrijkste verschillen tussen de twee populaire Go-compilers, ‘gc’ en ‘gccgo’? Prestaties bouwen? Runtime prestaties? Opties voor de opdrachtregel? Licenties?

Ik ben niet op zoek naar meningen over wat het beste is, maar gewoon een basisoverzicht van hun verschillen, zodat ik kan beslissen welke het beste bij mijn behoeften past.


Antwoord 1, autoriteit 100%

Je kunt meer zien in “Gccgo instellen en gebruiken“:

gccgo, een compiler voor de Go-taal. De gccgo-compiler is een nieuwe frontend voor GCC.
Merk op dat gccgo niet de gc-compiler is

Zoals uitgelegd in “Gccgo in GCC 4.7.1” (juli 2012 )

De Go-taal is altijd gedefinieerd door een specificatie, niet door een implementatie. Het Go-team heeft twee verschillende compilers geschreven die die specificatie implementeren: gc en gccgo.

  • Gc is de originele compiler en de go-tool gebruikt deze standaard.
  • Gccgo is een andere implementatie met een andere focus

Vergeleken met gc, is gccgo langzamer om code te compileren, maar ondersteunt het krachtigere optimalisaties, dus een CPU-gebonden programma dat door gccgo is gebouwd, zal meestal sneller werken.

Ook:

  • De gc-compiler ondersteunt alleen de meest populaire processors: x86 (32-bit en 64-bit) en ARM.
  • Gccgo ondersteunt echter alle processors die GCC ondersteunt.
    Niet al die processors zijn grondig getest op gccgo, maar velen wel, waaronder x86 (32-bit en 64-bit), SPARC, MIPS, PowerPC en zelfs Alpha.
    Gccgo is ook getest op besturingssystemen die de gc-compiler niet ondersteunt, met name Solaris.

als je het go-commando installeert vanuit een standaard Go-release, ondersteunt het al gccgo via de optie -compiler: go build -compiler gccgo myprog.


Kortom: gccgo: meer optimalisatie, meer processors.


Echter, zoals opmerktedoor OneOfOne(bron), is er vaak een desynchronisatie tussen go ondersteund door gccgo, en de laatste go-release:

gccgo ondersteunt alleen tot versie go v1.2, dus als je iets nieuws nodig hebt in 1.3 / 1.4 (tip) kan gccgo niet worden gebruikt. –

GCC-release 4.9bevat de Go 1.2 (niet 1.3) versie van gccgo.
De releaseschema’s voor de GCC- en Go-projecten vallen niet samen, wat betekent dat 1.3 beschikbaar zal zijn in de ontwikkelingstak, maar dat de volgende GCC-release, 4.10, waarschijnlijk de Go 1.4-versie van gccgo zal hebben.


twotwotwovermeldt in de reactiesde dia van de presentatie van Brad Fitzpatrick

gccgo genereert zeer goede code
… maar mist ontsnappingsanalyse: vernietigt de prestaties met veel kleine toewijzingen + afval
… GC is niet precies. Slecht voor 32-bits.

twotwotwo voegt toe:

Een andere dia vermeldt dat het genereren van niet-gccgo ARM-code wankel is.
Ervan uitgaande dat het een interessante optie is voor uw project, vergelijkt u waarschijnlijk binaire bestanden voor uw gebruiksscenario op uw doelarchitectuur.


Als peterSOopmerkingen, Ga nu 1,5(Q3/Q4 2015) betekent:

De compiler en runtime zijn nu volledig in Go geschreven (met een kleine assembler).
C is niet langer betrokken bij de implementatie, en dus is de C-compiler die ooit nodig was voor het bouwen van de distributie verdwenen.

De “Go in Go”-diavermeldt wel:

C is weg.
Kanttekening: gccgo gaat nog steeds sterk.


Berkantvraagt ​​in de opmerkingenof gccgois waarvan gcis opgestart.

Jörg W Mittagantwoorden:

Nee, gccgoverscheen na gc.

gcis oorspronkelijk geschreven in C. Het is gebaseerd op de C-compiler van Ken Thompson uit de Besturingssysteem Plan9, de opvolger van Unix, ontworpen door dezelfde mensen. gcwerd iteratief aangepast om steeds meer van zichzelf in Go te schrijven.

gccgois gestart door Ian Lance Taylor, een GCC-hacker die niet is aangesloten bij de Ga projecteren.

Merk op dat de eerste volledig zelf-gehoste Go-compiler eigenlijk een propriëtaire commerciële closed-source-implementatie voor Windows was waarvan de naam op dezelfde manier uit mijn hoofd lijkt te zijn verdwenen als van internet. Ze beweerden een zelf-gehoste compiler te hebben geschreven in Go, gericht op Windows in een tijd waarin gccgonog niet bestond en gcuiterst pijnlijk was om op Windows in te stellen. (Je moest in feite een volledige Cygwin-omgeving opzetten, de broncode patchen en vanaf de bron compileren.) Het bedrijf lijkt echter te zijn gestopt voordat ze er ooit in slaagden het product op de markt te brengen.

Hector Chuheeft in november 2009 een Windows-port van Go uitgebracht.
En de go-lang.cat-v.org/os-portspagina vermeldt ook het eerste werk van Joe/Joseph Poirier. Op deze pagina:

Elke kans dat iemand die er verstand van heeft dat kan vragen
een van de jongens (Alex Brainman– Hector Chu – Joseph Poirier) die betrokken was bij
het produceren van de Windows-poort zou een wiki-item kunnen maken met details over hun build
omgeving?

Voeg daaraan toe (in Web-apps schrijven in Go) !光京 (Wei Guangjing).

Other episodes