Clx, Lua programlama dili için geliştirilmiş, çapraz platform bir derleyici ve çalışma zamanı ortamıdır. Proje, Lua kodlarını C++20 araç zincirini kullanarak önceden derleyip (AOT) bağımsız, yerel çalıştırılabilir dosyalar haline getirir. Amaç, en hızlı Lua yorumlayıcısı olmak değil; öngörülebilir performans, hızlı başlatma süreleri ve modern C++ derleyicileriyle güçlü optimizasyon imkanı sunmaktır. Clx, bytecode yorumlayıcı yükü olmadan doğrudan makine koduna derleme yaparak, özellikle AOT dostu iş yüklerinde kayda değer performans artışı sağlar.
Clx'in öne çıkan özellikleri arasında, Clang/GCC/MSVC gibi modern derleyicilerin agresif optimizasyonlarından yararlanması, boyut odaklı derlemelerde çok küçük ikili dosyalar üretebilmesi (--minimal ile Lua programları 100 KB altına inebilir) ve 16 baytlık etiketli değerler ile inline string optimizasyonu (≤6 bayt string, heap tahsisi olmadan değerde saklanır) yer alıyor. Ayrıca, hızlı yol tablo erişim önbellekleri ve hafif AOT odaklı çalışma zamanı ile Lua 5.5 uyumluluğunu (coroutine, metametot, tablo vb.) hedefliyor. Clx C++ API'si, değer odaklı bir arayüzle taşınabilir yerel modüller geliştirmeye olanak tanıyor.
Clx'in kullanımı oldukça basit: 'git clone https://github.com/samyeyo/clx.git' ile projeyi indirdikten sonra, POSIX sistemlerde './build.sh install', Windows'ta 'build.bat install' komutlarıyla derleyip kurabilirsiniz. Ardından, 'clx examples/hello/hello.lua' ile bir Lua dosyasını derleyip './hello' ile çalıştırabilirsiniz. Derleyici, varsayılan olarak boyut optimizasyonu yapar; '--fast' ile hız, '--debug' ile hata ayıklama, '--minimal' ile yalnızca temel modülleri içeren derlemeler yapabilirsiniz.
Clx'in performansı, standart Lua 5.5 yorumlayıcısına kıyasla kayda değer bir hızlanma sunuyor. Örneğin, fib.lua testinde 62 kat, arraysum.lua'da 4 kat, spectralnorm.lua'da 10 kattan fazla hızlanma gözlemlenmiş. Ancak canada.lua gibi bazı iş yüklerinde hızlanma daha mütevazı (1.30x). Bu sonuçlar, Clx'in özellikle hesaplama yoğun ve AOT dostu algoritmalarda ne kadar etkili olduğunu gösteriyor. Ölçümler, Intel Core i5 Ultra 125U işlemcili bir Linux sistemde GCC 13.3.0 ile yapılmış.
Nasıl Önlem Alınmalı?
Clx şu anda beta aşamasında. Derleyici, basit Lua uygulamalarını başarıyla derleyebiliyor; uyumluluk ve optimizasyon çalışmaları devam ediyor. Linux'ta g++ (TCO için önerilir) veya clang++, macOS'ta clang++ (Xcode) veya Homebrew ile g++, Windows'ta g++ (LLVM) veya MSVC kullanılabilir. CMake 3.15+ gerekiyor. Derleyici, yapılandırma sırasında sabitlenen bir C++ derleyicisi ile Lua betiklerini derleyerek ABI uyumluluğunu garanti ediyor.
Clx'in mevcut uyumluluk durumu: temel dil büyük ölçüde tamamlanmış; tablolar, metatablolar, coroutine'ler ve modüller çalışıyor. Çoğu standart kütüphane destekleniyor. Ancak, load(), dofile(), loadfile(), string.dump() gibi dinamik kod yükleme işlevleri bir çalışma zamanı yorumlayıcısı gerektirdiğinden desteklenmiyor. debug modülü de saf AOT modelinde oldukça karmaşık olduğu için henüz tam desteklenmiyor. Geleneksel Lua C API'si yerine Clx C++ API'si kullanılması öneriliyor.
Proje, test ve benchmark araçlarıyla birlikte geliyor. 'tests/run.sh' (POSIX) veya 'tests/run.bat' (Windows) ile her .lua dosyası derlenip çalıştırılarak doğruluk kontrolü yapılıyor. Ayrıca, Pong ve Mandelbrot görüntüleyici gibi örnek uygulamalar, Clx'in Sokol kütüphanesiyle grafik uygulamaları geliştirmeye uygun olduğunu gösteriyor. Belgeler (doc/ dizininde) ile başlangıç, CLI referansı, uyumluluk durumu, modül geçiş kılavuzu, C++ API referansı ve mimari bilgileri sunuluyor.
Gelecekte Ne Bekleniyor?
Sonuç olarak, Clx, Lua ile yazılmış uygulamaları bağımsız, hızlı başlayan ve küçük boyutlu yerel çalıştırılabilir dosyalara dönüştürmek isteyen geliştiriciler için güçlü bir araç. Özellikle oyun, gömülü sistemler veya performans kritik uygulamalarda Lua'nın esnekliğini C++'ın performansıyla birleştirmek isteyenler için ideal. Beta aşamasında olmasına rağmen, temel özellikleri ve performans artışları umut verici. Proje, açık kaynak olarak GitHub'da gelişmeye devam ediyor.
Kaynak: github.com