'Gc' ve 'gccgo' arasındaki temel farklar nelerdir?


88

İki popüler Go derleyicisi olan 'gc' ve 'gccgo' arasındaki temel farklar nelerdir? Performans oluşturmak mı? Çalışma zamanı performansı? Komut satırı seçenekleri? Lisans mı?

Hangisinin en iyisi olduğuna dair fikir aramıyorum, farklılıklarının temel bir özetini görmüyorum, böylece hangisinin ihtiyaçlarım için en iyi olduğuna karar verebilirim.


3
Bu zaman içinde nasıl değişti? Şimdi 2019'da
Leo Gallucci

Yanıtlar:


110

" Gccgo’yu kurma ve kullanma " bölümünde daha fazlasını görebilirsiniz :

gccgo, Go dili için bir derleyici. Gccgo derleyicisi, GCC için yeni bir ön uçtur.
Gccgo'nun gc derleyicisi olmadığını unutmayın

" GCC 4.7.1'de Gccgo " (Temmuz 2012) bölümünde açıklandığı gibi

Go dili her zaman bir uygulama tarafından değil, bir spesifikasyonla tanımlanmıştır. Go ekibi bu özelliği uygulayan iki farklı derleyici yazdı: gc ve gccgo.

  • Gc orijinal derleyicidir ve go aracı bunu varsayılan olarak kullanır.
  • Gccgo, farklı bir odağa sahip farklı bir uygulamadır

Gc ile karşılaştırıldığında, gccgo kodu derlemek için daha yavaştır ancak daha güçlü optimizasyonları destekler, bu nedenle gccgo tarafından oluşturulan CPU'ya bağlı bir program genellikle daha hızlı çalışır.

Ayrıca:

  • Gc derleyicisi yalnızca en popüler işlemcileri destekler: x86 (32 bit ve 64 bit) ve ARM.
  • Ancak Gccgo, GCC'nin desteklediği tüm işlemcileri destekler.
    Tüm bu işlemciler gccgo için kapsamlı bir şekilde test edilmemiştir, ancak x86 (32-bit ve 64-bit), SPARC, MIPS, PowerPC ve hatta Alpha dahil olmak üzere çoğu işlemciye sahiptir.
    Gccgo, başta Solaris olmak üzere gc derleyicisinin desteklemediği işletim sistemlerinde de test edilmiştir.

Eğer standart Git sürümden go komutu yüklerseniz, zaten destekler aracılığıyla gccgo -compilerseçeneği: go build -compiler gccgo myprog.


Kısaca: gccgo: daha fazla optimizasyon, daha fazla işlemci .


Ancak, OneOfOne ( kaynak ) tarafından yorumlandığı gibi , genellikle gccgo tarafından desteklenen go ile en son go sürümü arasında bir senkronizasyon çözme vardır:

gccgo yalnızca go v1.2 sürümüne kadar destekler , bu nedenle 1.3 / 1.4'te (ipucu) yeni bir şeye ihtiyacınız varsa gccgo kullanılamaz. -

GCC sürüm 4.9 , gccgo'nun Go 1.2 (1.3 değil) sürümünü içerecektir .
GCC ve Go projeleri için yayın programları çakışmıyor, bu da 1.3'ün geliştirme dalında mevcut olacağı, ancak bir sonraki GCC sürümü olan 4.10'un muhtemelen gccgo'nun Go 1.4 sürümüne sahip olacağı anlamına geliyor.


twotwotwo bahseder yorumlarda Brad Fitzpatrick en sunum slayt

gccgo çok iyi kod üretir
... ancak kaçış analizinden yoksundur: birçok küçük alaşım + çöp ile performansı düşürür
... GC hassas değildir. 32 bit için kötü.

twotwotwo ekliyor:

Başka bir slayt, gccgo dışı ARM kod oluşturmanın riskli olduğundan bahsediyor.
Projeniz için ilginç bir seçenek olduğunu varsayarsak, muhtemelen hedef mimarinizdeki kullanım durumunuz için ikili dosyaları karşılaştırın.


As peterSO yorumların , Go 1.5 şimdi (Q3 / Q4 2015) vasıtası:

Derleyici ve çalışma zamanı artık tamamen Go'da yazılmıştır (küçük bir derleyici ile).
C artık uygulamaya dahil değildir ve bu nedenle bir zamanlar dağıtımı oluşturmak için gerekli olan C derleyicisi ortadan kalkar. .

"Git" slaydında şunlar belirtilmektedir:

C gitti.
Yan not: gccgo hala güçleniyor.


Berkant yorumlardagccgo ne olup olmadığını soruyorgc den önyükleyicisini edildi.

Jörg W Mittag cevaplar:

Hayır, gccgosonra ortaya çıktıgc .

gcC de yazılmıştır . Aynı kişiler tarafından tasarlanan Unix'in halefi olan Plan9 işletim sisteminden Ken Thompson'ın C derleyicisine dayanmaktadır . gcgittikçe daha fazla Go'da yazılması için yinelemeli olarak yeniden düzenlendi.

gccgoGo projesine bağlı olmayan bir GCC hacker'ı olan Ian Lance Taylor tarafından başlatıldı .

Tamamen kendi kendine barındırılan ilk Go derleyicisinin aslında adı, internetten olduğu gibi beynimden silinmiş gibi görünen, Windows için özel bir ticari kapalı kaynak uygulaması olduğunu unutmayın. Go'da yazılmış, kendi kendine barındırılan bir derleyiciye sahip olduklarını iddia ettiler, gccgohenüz var olmayan bir zamanda Windows'u hedefliyorlardı ve Windows'ta gckurulması son derece zahmetliydi. (Temelde tam bir Cygwin ortamı kurmanız, kaynak kodunu yamalamanız ve kaynaktan derlemeniz gerekiyordu.) Bununla birlikte, şirket daha ürünü pazarlamayı başaramadan katlanmış görünüyor.

Hector Chu Kasım 2009'da Go Windows bağlantı noktasını serbest vermedi
Ve go-lang.cat-v.org/os-portssayfa bahseder Joe / Joseph Poirier sıra ilk işi. Gelen bu sayfada :

Bilgiye sahip birinin , Windows bağlantı noktasını üreten adamlardan birinin ( Alex Brainman - Hector Chu - Joseph Poirier), yapı ortamlarını detaylandıran bir wiki girişi yapmasını istemesi ihtimali var mı?

Buna ekleyin ( Go'da Web Uygulamaları Yazma ) ! 光 京 (Wei Guangjing) .


4
golang.org/doc/go1.3#gccgo Ve daha da önemlisi gccgo yalnızca go v1.2 sürümüne kadar destekler, bu nedenle 1.3 / 1.4 (ipucu) sürümünde yeni bir şeye ihtiyacınız varsa gccgo kullanılamaz.
OneOfOne

1
@OneOfOne iyi bir nokta, daha fazla görünürlük için cevaba yorumunuzu ekledim.
VonC

1
@twotwotwo iyi bul. Daha fazla görünürlük için cevaba ekledim.
VonC

3
Gccgo'nun her bir gorutine özel bir iş parçacığı vererek gorutinleri uyguladığını okudum (birçok gorutini tek bir iş parçacığına çoklamak yerine). Bu hala doğruysa, bu bazı insanlar için büyük bir fark olabilir.
DragonFax

2
@LeoGallucci Bu yanıttaki genel fikir Go 1.11'dir ("gccgo: daha fazla optimizasyon, daha fazla işlemci."). Stackoverflow.com/a/46970176/6309 adresinde daha yeni bir örnek görebilirsiniz .
VonC
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.