Lua, öncelikle gömülü sistemler ve uygulamalar için tasarlanmış hafif, yüksek seviyeli bir betik dilidir. Brezilya'da geliştirilen bu dil, sadeliği, verimliliği ve taşınabilirliği ile tanınmaktadır. Lua, oyun geliştirme, web uygulamaları ve çeşitli yazılım platformlarında bir betik dili olarak yaygın bir şekilde kullanılmaktadır. Basit bir sözdizimi ve birinci sınıf fonksiyonlar, kapanışlar ve otomatik bellek yönetimi gibi güçlü özellikler sunar.
Lua, 1990'ların başında Brezilya'daki Rio de Janeiro Papalık Katolik Üniversitesi'nde yaratılmıştır. Dilin başlangıçtaki amacı, veri işleme uygulamaları için esnek ve genişletilebilir bir betik çözümü sağlamaktı. Orijinal yaratıcılar—Roberto Ierusalimschy, Luiz Henrique de Figueiredo ve Waldemar Celes—mevcut yazılımlara kolayca entegre edilebilecek bir dil geliştirmeyi hedeflediler.
Yıllar içinde Lua, sadelik ve verimlilik gibi temel ilkelerini koruyarak önemli ölçüde evrim geçirmiştir. İlk resmi sürüm olan Lua 1.0, 1993 yılında piyasaya sürüldü ve sonraki sürümler iyileştirmeler ve yeni özellikler getirdi. 2006 yılında Lua 5.1 sürümü yayımlandı ve modül sistemi ile korutinlerdeki iyileştirmelerle önemli bir dönüm noktası oldu. Bugün, Lua 5.4 sürümündedir (2020 itibarıyla) ve özellikle performans ve bellek yönetimi alanlarında yeteneklerini daha da geliştirmiştir.
Lua'nın tasarım felsefesi, C, JavaScript ve Scheme gibi birkaç dilden ilham almıştır, ancak hafif tasarımı ve birinci sınıf fonksiyonları ile kendine özgü kalmaktadır. Lua, diğer programlama dilleriyle etkileşim yeteneği ile de tanınır ve C, C++ ve Java uygulamalarına kolayca entegre edilebilir.
Lua, uygulamalarda gömülü bir betik dili olarak kullanılmakta olup, Unity ve Corona SDK gibi motorlar aracılığıyla oyun geliştirmede önemli bir rol oynamaktadır. Hafif yapısı, bulut uygulamaları, web sunucuları ve IoT cihazları için idealdir.
Lua, dinamik olarak türlenmiş bir dildir; bu, bir değişkenin veri türünü açıkça belirtmenize gerek olmadığı anlamına gelir. Örneğin:
x = 10 -- x bir sayıdır
x = "Merhaba" -- Artık x bir dizedir
Lua'da fonksiyonlar birinci sınıf değerlerdir; bu, onların değişkenlere atanabileceği, argüman olarak geçirilebileceği ve diğer fonksiyonlardan döndürülebileceği anlamına gelir.
function topla(a, b)
return a + b
end
toplam = topla
print(toplam(5, 10)) -- Çıktı: 15
Tablolar, Lua'daki birincil veri yapısıdır ve diziler, sözlükler ve nesneler olarak işlev görür.
benimTablom = {anahtar1 = "değer1", anahtar2 = "değer2"}
print(benimTablom.anahtar1) -- Çıktı: değer1
Lua, fonksiyonların çevresindeki ortamdan değişkenleri yakalamasına olanak tanıyan kapanışları destekler.
function sayac()
local sayim = 0
return function()
sayim = sayim + 1
return sayim
end
end
benimSayacim = sayac()
print(benimSayacim()) -- Çıktı: 1
print(benimSayacim()) -- Çıktı: 2
Lua, işbirlikçi çoklu görevleri kolaylaştıran korutinleri destekler.
co = coroutine.create(function ()
for i = 1, 5 do
coroutine.yield(i)
end
end)
print(coroutine.resume(co)) -- Çıktı: true 1
print(coroutine.resume(co)) -- Çıktı: true 2
Lua, tabloların davranışını değiştirmek için metatablolar kullanır ve operatör aşırı yüklemesine olanak tanır.
mt = {}
mt.__add = function(t1, t2)
return t1[1] + t2[1]
end
setmetatable(t1, mt)
setmetatable(t2, mt)
print(t1 + t2) -- Çıktı: Uygulamaya bağlı sonuç
Lua'da dize işleme basittir ve birleştirme ve desen eşleştirme gibi işlemler için yerleşik fonksiyonlar sunar.
str = "Merhaba, "
str = str .. "Dünya!" -- Birleştirme
print(str) -- Çıktı: Merhaba, Dünya!
Lua, pcall
fonksiyonu aracılığıyla basit bir hata yönetim mekanizması sağlar.
function riskliFonksiyon()
error("Bir hata oluştu!")
end
durum, hata = pcall(riskliFonksiyon)
print(durum) -- Çıktı: false
print(hata) -- Çıktı: Bir hata oluştu!
Lua, kullanılmayan belleği otomatik olarak geri kazanmak için bir çöp toplayıcı aracılığıyla otomatik bellek yönetimi içerir.
-- Lua belleği otomatik olarak yönetir; açık bir yönetim gerektirmez
Lua, kodu ayırmak ve düzenlemek için modülleri destekler ve modüler programlama uygulamalarını geliştirir.
-- mymodule.lua
local mymodule = {}
function mymodule.merhabaDe()
print("Mymodule'dan Merhaba!")
end
return mymodule
-- main.lua
local mymodule = require("mymodule")
mymodule.merhabaDe() -- Çıktı: Mymodule'dan Merhaba!
Lua, C API'sini kullanarak uygulamalara kolayca gömülebilir; bu, herhangi bir uygulamanın genellikle Lua betiklerini çalıştırabileceği anlamına gelir. Lua yorumlayıcısı hafif olup, C'yi destekleyen herhangi bir ortamda betikleri çalıştırabilir.
Lua, çeşitli IDE'ler kullanılarak verimli bir şekilde geliştirilebilir:
Lua'da bir proje oluşturmak için genellikle Lua betiklerinizi yazarsınız ve eğer bir uygulama Lua kütüphanesini kullanıyorsa, Lua kodunu çağıracak ana uygulamayı derlersiniz. Lua betikleri genellikle .lua
dosya uzantısı ile kaydedilir ve komut satırında lua script.lua
komutuyla çalıştırılır.
Lua, aşağıdaki alanlarda yaygın olarak kullanılmaktadır:
Lua, genellikle birkaç dille karşılaştırılmaktadır:
Lua, boyut ve hızın kritik olduğu durumlarda özellikle değerlidir, bu da onu oyun geliştiricileri ve gömülü sistemler için popüler kılar. C++, Java veya C# gibi dillerdeki yük, önemli olabilecekken, Lua'nın hafif yapısı daha hızlı yinelemelere ve daha az kaynak tüketimine olanak tanır.
Lua kodunu başka bir dile çevirirken dikkate alınması gerekenler:
Şu anda, Lua için özel olarak popüler bir kaynak koddan kaynak koda çeviri aracı yoktur, ancak SWIG (Basitleştirilmiş Sarıcı ve Arayüz Üreticisi) gibi bazı genel araçlar, Lua'nın C/C++ kod tabanlarıyla arayüz oluşturmasına olanak tanır ve iki dil arasında bazı entegrasyon veya çeviri seviyeleri sağlar.