QBE - Derleyici Backend'i: Sürüm 1.3
(c9x.me)- Performans optimizasyonları büyük ölçüde eklendi; QBE 1.3, standart coremark üzerinde ticari derleyici performansının %63'ünden fazlasına ulaşıyor ve Hare test paketinde qbe-1.2'ye kıyasla %33 iyileşme sağlıyor
- QBE 1.3, 1.0'dan bu yana en büyük sürüm; yaklaşık 7 bin satır ekleme ve 1,5 bin satır silme içeriyor
- Yeni optimizasyonlar arasında GVN/GCM, döngü optimizasyonu, if kaldırma ve CFG sadeleştirme yer alıyor, ancak yalnızca doğrulanmış bazı pass'ler korunuyor
- Inlining, QBE'nin fonksiyon bazlı streaming derleme modeli ile uyumsuzluk yarattığı için bu optimizasyon setine dahil edilmedi
ee_isdigitinline edilipcrcu8daha basit, dalsız bir uygulamayla değiştirilen coremark varyantında QBE, hedeflenengcc -O2performansının %70'ine ulaştı- Yeni OCaml aracı
mgen, lispy IL kalıplarını C eşleştirme koduna derleyerek mevcut elle yazılmış komut seçimi mantığını değiştirmeyi veya sadeleştirmeyi mümkün kılıyor mgen, özel yorum bloklarındaki IL kalıplarını bulup hemen altına C kodu ekliyor; mevcut kullanım örneğiisel.ciçinde yer alıyor- Komut DAG eşleştirmesi, Ken Thompson'ın Plan9 C derleyicisindeki yönteme benzer bir numaralandırma yaklaşımını izliyor ve
runmatch()tarafından yorumlanan basit bir bytecode matcher da üretiliyor - Windows ABI desteği eklendi;
-t amd64_winverildiğinde Windows hedefi için derleme yapılabiliyor - QBE'nin ürettiği assembly hâlâ AT&T sözdizimini kullanıyor ve mingw assembler ile derleme yapılmasının uygun olduğu belirtiliyor
- Konumdan bağımsız kod desteği geliştirildi; böylece çoğu hedefte paylaşılan nesnelerle daha sorunsuz bağlantı kurulabiliyor ve paylaşılan nesneler üretilebiliyor
- Yeni
externdinamik sabit bayrağı (DYNCONST) sayesinde, dinamik kütüphane değişkenleri gibi global sembollere dolaylı erişim IL düzeyinde ifade edilebiliyor
1 yorum
Lobste.rs görüşleri
Uzun süredir devam eden bir hobi projesi olarak TRIPOS/Amiga Exec tarzı küçük bir OS yapıyorum
Bellek koruması yok, düz bir bellek haritası var ve mesajlaşma da pointer aktarma seviyesinde
Böyle bir sistemi kendi kendine barındırır hale getirmek için PIE/PIC üretebilen küçük bir derleyici çok daha kullanışlı. Amiga tarzı kütüphanelerin doğal olarak PIC olması gerekiyor ve yürütülebilir dosyaları paylaşımlı bellek haritasında herhangi bir yere koyarken yükleme anında çok fazla yama gerektirmemesi de güzel
GCC ve Clang bunu yapabiliyor ama fazla büyükler. Son baktığımda TCC PIC yapamıyordu, QBE’ye daha yakından bakmam gerekecek
Kendi reklamım gibi duyulmasını istemem. Küçük derleyici alanını gerçekten seviyorum ve daha fazla teste de ihtiyaç var
Şimdiden epey ilerledi ve birçok platformu destekliyor
Yakında kendi kendini barındıran bir noktaya gelmesi zor görünüyor. Thumb-2 kod üretimi gerekiyor ve bunu yapmanın pratikte tek yolu doğrudan bir derleyici yazmak. Çekirdek kodu dışında kullanılabilir RAM’in yalnızca 8 MB olması gibi bir kısıt da var
ELF dosyalarını dönüştürerek oluşturulan kendi çalıştırılabilir dosya biçimi
.ashexkullanılıyor. Bu süreçte aslında tek bir mutlak atlama olan özel bir bölüm tüketiliyor ve uygulama yükleyicisi bunu gerçek sistem çağrısı adresiyle yeniden yazıyorDüz bellek sistemlerinin zorluğu, paylaşımlı nesneleri temiz biçimde desteklemekte yatıyor. Farklı uygulamalar arasında kod paylaşmak için tüm dinamik sembol erişimlerinin register’da tutulan değişkenler üzerinden yapılmasına yönelik derleyici desteği gerekiyor
Yeni
externanahtar kelimesinin gelmesine gerçekten sevindimSürüm notlarında yok ama bunun
threadile de birlikte çalışması initial-exec TLS’i mümkün kılıyor. Başka bir paylaşımlı kütüphanede tanımlanan thread-local global değişkenlere erişirken buna ihtiyaç duyuluyor ve FreeBSD’ninctype.hdosyası için gerekliextern, macOS veya Haiku gibi platformlarda paylaşımlı kütüphanelerdeki normal global değişkenlere, örneğinstderr’a erişmek için de gerekiyor. Artık QBE tabanlı derleyiciler çok daha fazla işletim sistemi ve kullanım senaryosunu destekleyebilirRoland’ın performans iyileştirmeleri için de çok minnettarım. Gerçekten harika iş çıkarmış
Bunu doğru okuduysam artık resmî Windows desteği mi var?
QBE’nin tarihsel olarak ve hâlâ en büyük kısıtlarından biri bu değil miydi? Bunu görmek gerçekten güzel
Bu projenin hedefi Cranelift ile çakışıyor mu? QBE’yi ne zaman kullanmak gerektiğini pek kestiremiyorum
Asıl rakipleri Cranelift ve LLVM
Ne yazık ki geçmişte daha çok hobi dilleri veya derleyici implementasyonlarında kullanıldı. Örneğin yeni bir C benzeri dil gibi görünen myrddin artık ölmüş görünüyor, cproc ise hâlâ yaşayan bir hobi C derleyicisi implementasyonu
Yine de Hare’in QBE’yi benimsemesinden sonra umut verici görünmeye başladı. Sorunun yanıtı burada: https://harelang.org/documentation/faq.html#why-qbe-instead-of-llvm
Ayrıntıları çok iyi bildiğimi söyleyemem ama karşılaştırma için bolca kaynak var. Bildiğim kadarıyla QBE, diğer ikisine göre çok daha basit bir backend olmayı hedefliyor
Komut seçimi matcher’ları üretmek için küçük bir DSL kullanma yaklaşımı gerçekten çok hoş