Lamina: LLVM olmadan yerel kod üreten çok mimarili derleyici backend'i
(github.com/SkuldNorniern)Merhaba, bir tanıdığım yakın zamanda bir derleyici backend'i geliştirdi; oldukça ilginç geldiği için paylaşmak istiyorum.
- Proje tanıtımı
Lamina, LLVM gibi ağır bağımlılıklar olmadan, SSA tabanlı IR'den doğrudan yerel kod üreten çok mimarili bir derleyici backend'idir. x86_64, AArch64, RISC-V ve WebAssembly'yi tek bir IR ile destekler.
Basit bir DSL ya da deneysel bir dil her oluşturulduğunda LLVM'i derlemek ve birkaç GB'lık bağımlılıkları yönetmek ona fazla ağır gelmiş. "IR'yi verip assembly alan hafif bir şey yapalım" fikriyle başlamış.
- Başlıca özellikler
▸ Sıfır harici bağımlılık
LLVM veya Cranelift olmadan, IR'den doğrudan makine koduna dönüşüm yapar.
Derleme süresi de kısadır ve dağıtımı da basittir.
▸ SSA tabanlı IR
Static Single Assignment biçiminde olduğu için optimizasyon pipeline'ını kurmak temiz ve düzenlidir.
▸ Açık bellek modeli
Yığın/heap tahsisini IR seviyesinde net biçimde ayırdığı için bellek analizi kolaydır.
▸ Çok mimarili
Tek bir IR ile birden çok hedef desteği:
- x86_64 (Linux, macOS, Windows)
- AArch64/ARM64 (Linux, macOS, Windows)
- RISC-V (RV32/64/128)
- WebAssembly (32/64-bit)
▸ IRBuilder API
IR'yi fonksiyonel tarzda kurabilen bir API sunar.
Kontrol akışı veya bellek işlemlerini tip güvenli şekilde ifade edebildiği söyleniyor.
- Mevcut durum
Temel aritmetik işlemler, koşul/dallanma/döngü gibi kontrol akışı, özyinelemeli olmayan fonksiyon çağrıları ve basit optimizasyonlar çalışıyor.
Production-ready değil, ancak oyuncak diller veya DSL backend'leri için denemeler yapmak adına yeterli olduğu söyleniyor.
- Kullanım iş akışı
Kabaca şu şekilde kullanılıyor:
- Kaynak dili parse edip AST oluşturun
- AST'yi IRBuilder ile Lamina IR'ye dönüştürün
- Lamina optimizasyon yapıp hedefe göre yerel kod üretsin
IR üretim kısmı düzgün yazıldıktan sonra geri kalanını Lamina kendi hallediyor.
- Kapanış
Kişisel olarak, "derleyici backend'i yapmak" bana hep çok uzak bir konu gibi gelirdi; ama bir tanıdığımın bunu gerçekten yaptığını görmek etkileyiciydi.
Elbette LLVM düzeyinde olgunluk veya optimizasyon sunmuyor, ancak hafif deneyler yapmak ya da eğitim amaçlı kullanmak için gayet iyi görünüyor.
Ben de gerçekten lamina üzerinden Um Jun-sik dili derleyicisi geliştirmeyi denedim.
İlgilenenler göz atmak isteyebilir!
Henüz yorum yok.