- Luau, Lua 5.1'den türetilmiş hızlı, güvenli ve kademeli tiplendirmeyi destekleyen gömülü bir betik dilidir
- Roblox platformundaki karmaşık oyunları ve büyük kod tabanlarını desteklemek için performans, dil araçları ve tip sistemi güçlendirilerek geliştirilmiştir
- Temel Lua'dan farklı olarak, sandboxing özellikleri içerir ve farklı yetkilere sahip kodların yan yana çalışabilmesi için tasarlanmıştır
- Sözdizimi Lua 5.1 ile uyumludur, ancak ek sözdizimi genişletmeleri ve analiz araçları (linter, tip denetleyici) sunarak kod kalitesini artırır
- Performans optimizasyonu, özel bytecode, JIT desteği gibi özelliklerle LuaJIT düzeyinde çalışma hızı hedefler; Roblox'un ötesinde çeşitli gömülü ortamlarda da kullanım potansiyeli yüksektir
Motivation (ortaya çıkış nedeni)
- Yaklaşık 2006'da Roblox, oyun betik dili olarak Lua 5.1'i benimsedi
- Zaman içinde Roblox platformundaki oyunların karmaşıklığı arttıkça ve ekipler büyüdükçe, mevcut Lua'nın sınırlarını aşmak için dili ve uygulamasını kapsamlı biçimde geliştirdi
- Platformun büyümesine paralel olarak performans optimizasyonu, kullanıcı dostuluğu ve dille ilgili araçların geliştirilmesine büyük yatırım yapıldı
- Özellikle 2020 itibarıyla 1 milyondan fazla satırlık büyük kod tabanları yönetilirken kademeli tip sisteminin benimsenmesinin zorunlu olduğu fark edildi
- Bu ihtiyaçlar doğrultusunda Roblox, Lua'dan türetilen Luau adlı dili geliştirdi; hızlı, küçük ve güvenli kalırken tiplerin kademeli olarak uygulanabilmesini sağlar
- Daha ayrıntılı açıklama Why Luau belgesinde yer alır
Luau'ya genel bakış
- Luau, Lua 5.1 tabanlı gömülü bir betik dilidir
- Hızlı ve hafif bir runtime sunar
- Kademeli tip sistemini destekleyerek dinamik ve statik analizin birlikte kullanılmasını sağlar
- Roblox Studio'ya entegredir ve
--!strictbayrağı ile strict mode etkinleştirilebilir - Geliştiriciler, Roblox ile bağlantılı belgelere Luau Creator Docs üzerinden ulaşabilir
Sandboxing (sandbox özellikleri)
- Luau, dışa açılan standart kütüphaneyi sınırlar ve ek sandboxing özellikleri sunar
- Bu sayede genel geliştiricilerin yazdığı yetkisiz kodlar ile platform içindeki yetkili kodlar güvenli biçimde paralel çalıştırılabilir
- Bu nedenle temel Lua'dan farklı bir çalışma ortamına sahiptir
- Ayrıntılar Sandbox açıklaması sayfasında bulunabilir
Compatibility (uyumluluk)
- Mümkün olduğunca Lua 5.1 ile geriye dönük uyumluluk korunur; sonraki sürümlerdeki bazı özellikler de kısmen yansıtılmıştır
- Ancak Luau, Lua'nın tüm tasarım kararlarını benimsemez; Roblox'a özgü kullanım senaryolarını ve kısıtları dikkate alır
- Lua 5.1 sonrası sürümlerdeki özelliklerin destek durumu Compatibility belgesi içinde sunulmaktadır
Syntax (sözdizimi)
- Lua 5.1 sözdizimiyle tamamen uyumludur
- Buna ek olarak modern ve tanıdık sözdizimi genişletmeleri sunarak geliştirici deneyimini iyileştirir
- Tüm sözdizimi Syntax belgesinde incelenebilir
Analysis (analiz araçları)
-
Doğru kod yazımını desteklemek için betik analiz araçları sunar
-
Bileşenler:
- Linter: yaygın hataları tespit eder
- Type Checker: tip doğrulaması yapar
-
luau-analyzeCLI aracıyla çalıştırılabilir -
Lint kuralları için Lint belgesi, tip denetimi rehberi için Typecheck belgesi referans alınabilir
Performance (performans)
- Parser, linter ve tip denetleyiciyi içeren özel bir frontend ile optimize edilmiş bytecode, interpreter ve compiler sunar
- Bazı durumlarda LuaJIT interpreter'ı ile yarışabilecek performans sağlayabilir
- x64 ve ARM64 platformlarında manuel JIT compiler desteği sunar; belirli programların performansını önemli ölçüde artırabilir
- Runtime sürekli optimize edilmekte ve bazı parçaları yeniden yazılarak verimlilik artırılmaktadır
- Performansın ayrıntılı özellikleri Performance belgesinde sunulmaktadır
Libraries (kütüphaneler)
- Dilin kendisi Lua 5.1'in tam bir üst kümesidir
- Standart kütüphanede bazı işlevler kaldırılmış, bazı yeni işlevler eklenmiştir
- Uygulamaya gömülü olduğunda uygulamaya özel genişletme kütüphanelerine de erişebilir
- Kütüphanelerin tamamı Library belgesinde görülebilir
1 yorum
Hacker News görüşleri
--!strictbildirdikten sonra bile bariz tip ihlalleri olduğunda hiçbir hata ya da uyarı vermeden kodun çalışması beni şaşırttı, beklediğim davranış bu değildiluauçalıştırılabilir dosyasıyla doğrudan çalıştırırsanız tip denetimi uygulanmıyor, eğer gömülü ortamda tüm kodu derlemeden önce zorunlu olarak tip denetiminden geçirirseniz beklediğiniz gibi tip hatalarının yakalandığı bir deneyim elde edebilirsiniz, bu da yüz milyonlarca satır Lua 5.1 kodunun bir anda Luau'ya dönüştürülmüş olmasının kaçınılmaz bir tasarım sonucu