Bir derleyicinin çeviri verimliliği için iyi bir test kendi kendine derleme: belirli bir derleyicinin kendini derlemesi ne kadar sürer? C ++ için çok uzun zaman alır (saat?). Karşılaştırıldığında, bir Pascal / Modula-2 / Oberon derleyici kendini modern bir makinede bir saniyeden daha kısa sürede derleyecektir [1].
Go bu dillerden ilham almıştır, ancak bu verimliliğin temel nedenlerinden bazıları şunlardır:
Etkili tarama ve ayrıştırma için matematiksel olarak sağlam, açıkça tanımlanmış bir sözdizimi.
C / C ++ gibi bağımsız derlemenin aksine, başlık dosyalarının gereksiz yere yeniden okunmasını ve diğer modüllerin yeniden derlenmesini önlemek için modül sınırları boyunca bağımlılık ve tür denetimi ile ayrı derleme kullanan, tür güvenli ve statik olarak derlenmiş bir dil. derleyici tarafından böyle bir çapraz modül kontrolü yapılmaz (bu nedenle basit bir tek satırlık "merhaba dünya" programı için bile tüm bu başlık dosyalarını tekrar tekrar okuma ihtiyacı).
Tabii ki yukarıdaki 1 ve 2. noktalarda büyük ölçüde yardımcı olan verimli bir derleyici uygulaması (örneğin, tek geçişli, yinelemeli iniş yukarıdan aşağıya ayrıştırma).
Bu ilkeler 1970 ve 1980'lerde Mesa, Ada, Modula-2 / Oberon ve diğerleri gibi dillerde zaten biliniyor ve tam olarak uygulanıyor ve sadece şimdi (2010'larda) Go (Google) gibi modern dillere doğru yol alıyor , Swift (Apple), C # (Microsoft) ve diğerleri.
Bunun yakında istisna değil norm olacağını umalım. Oraya ulaşmak için iki şeyin olması gerekir:
İlk olarak, Google, Microsoft ve Apple gibi yazılım platformu sağlayıcıları, uygulama geliştiricilerini yeni derleme yöntemini kullanmaya teşvik ederken, mevcut kod tabanlarını yeniden kullanmalarını sağlayarak başlamalıdır. Apple şimdi Objective-C ile aynı anda varolabilen Swift programlama diliyle yapmaya çalışıyor (aynı çalışma ortamı kullandığından).
İkincisi, temeldeki yazılım platformlarının kendileri, zaman içinde bu ilkeleri kullanarak zaman içinde yeniden yazılmalı, aynı zamanda süreçte modül hiyerarşisini daha az monolitik hale getirmek için yeniden tasarlanmalıdır. Bu elbette mamut bir görevdir ve on yılın daha iyi bir kısmını alabilir (aslında bunu yapmak için yeterince cesurlarsa - Google konusunda hiç emin değilim).
Her durumda, dilin benimsenmesini sağlayan platform, tersi değil.
Referanslar:
[1] http://www.inf.ethz.ch/personal/wirth/ProjectOberon/PO.System.pdf , sayfa 6: "Derleyici kendini yaklaşık 3 saniye içinde derler". Bu teklif, 25 MHz saat frekansında çalışan ve 1 MByte ana bellek içeren düşük maliyetli Xilinx Spartan-3 FPGA geliştirme kartı içindir. Bundan 1 GHz'in üzerinde bir saat frekansında ve birkaç GByte ana bellekten (yani Xilinx Spartan-3 FPGA kartından daha güçlü birkaç büyüklükte siparişlerde) çalışan modern bir işlemci için kolayca "1 saniyeden daha azına" gidebilir , G / Ç hızları dikkate alındığında bile. Zaten 1990'da Oberon 2-4 MBytes ana belleğe sahip 25MHz NS32X32 işlemcide çalıştırıldığında, derleyici sadece birkaç saniye içinde derlendi. Aslında bekleme kavramıderleyicinin bir derleme döngüsünü bitirmesi için Oberon programcıları o zaman bile tamamen bilinmiyordu. Tipik programlar için, derleme komutunu tetikleyen fare düğmesinden parmağın kaldırılması her zaman derleyicinin tetiklenen derlemeyi tamamlamasını beklemekten daha uzun sürdü. Sıfıra yakın bekleme süreleriyle gerçekten anında tatmin oldu. Ve üretilen kodun kalitesi, o zamanlar mevcut olan en iyi derleyicilerle tamamen eşit olmasa da, çoğu görev için oldukça iyi ve genel olarak oldukça kabul edilebilirdi.