2011-06-30 23 views
6

Geçerli, resmi derleyici Go (http://code.google.com/p/go/) şu anda ELF İkili'ne özel bölümler enjekte eden el yapımı, tartışmalı bir arcane kod üreteci kullanmaktadır. Git neden kendi Kod üretecini kullanıyor?

Bu yaklaşım

böyle ldd, objdump veya strip olarak doğrudan okuma ve/veya ELF bilgiler yazma programları, ilgili epeyce hatalar oluşmasına neden oldu.

Bunun hiç LLVM gibi bir welltested crossplatform kod jeneratörü kullanılarak önlenebilir ve daha sonra böyle MinGW w/pencerelerde Unix/Linux üzerinde ld (veya ld.exe olarak OS ile sevk bağlama olanakları kullanabilir olabilirdi inanıyoruz) veya Visual Studio'lu Windows'ta link.exe.

Neden Go kendi kod üreticisini kullanıyor? Gerçekten tekerleği yeniden icat ediyor mu? Yoksa arkasında daha önemli nedenler var mı?

+0

Bu projeye birisini neden bu seçimi yaptıklarını sormalısınız. – dmckee

+1

Yaptıklarının tam kontrolüne sahip olmak. – OscarRyz

+2

@dmckee: Ya da bu sorunun cevabını okuyabilirsiniz. – peterSO

cevap

4

referans derleyici (5g, topluca gc olarak anılacaktır 6g ve 8g) Ken Thompson tarafından yazılmıştır dayalı Plan 9 işletim sistemi için yazdığı C derleyicisi. Orada bunu birkaç nedenleri şunlardır:

  • O C derleyicisi nasıl çalıştığını zaten aşina olduğunu, bu yüzden onu tamamen yeni bir çerçeve öğrenme yerine onun mevcut çalışma uyum için daha kolay oldu.
  • Go'nun hedeflerinden biri hızlı bir şekilde derlemektir. Gc derleyicisi muhtemelen LLVM tabanlı bir derleyiciden daha hızlıdır çünkü çok fazla çalışma yapmıyor olabilir. Sonra tekrar, aynı zamanda optimize etmiyor.

Peter'in belirttiği gibi, gcc'yi arka uç olarak kullanan gccgo da var. Go kütüphanelerinin tam bir Go ayrıştırıcı ve bir (kısmen tamamlanmış) tip denetleyicisi içermesi nedeniyle Go derleyiciler için diğer seçeneklerin olacağından şüpheleniyorum.

İlgili konular