Kas ir LUA fails?
Fails ar paplaÅ¡inÄjumu .lua pieder programmÄÅ¡anas valodai Luа. Luа ir viegla, augsta lÄ«meÅa, vairÄku rÄdigmu programmÄÅ¡anas valoda, kas izstrÄdÄta galvenokÄrt iegultai izmantoÅ¡anai arlikÄcijÄs. TÄ ir pÄrrobežu platforma, jo ir uzrakstÄ«ts apvienotÄ baita koda interpretÄtÄjs, un LuÄ ir salÄ«dzinoÅ¡i vienkÄrÅ¡s C ÐÐ I, lai to iegultu аÑliÑаtiоns.
Luа sÄkotnÄji tika izstrÄdÄta 1993. gadÄ kÄ valoda programmatÅ«ras lietojumu paplaÅ¡inÄÅ¡anai, lai apmierinÄtu tajÄ laikÄ pieaugoÅ¡o pieprasÄ«jumu pÄc pielÄgoÅ¡anas. Tas nodroÅ¡inÄja lielÄko daļu procesuÄlo programmÄÅ¡anas valodu pamatiespÄjas, bet nebija iekļautas sarežģītÄkas vai domÄnam specifiskas funkcijas:
- Tas ietvÄra mehÄnismus valodas paplaÅ¡inÄÅ¡anai
- Atļaujot programmÄtÄjiem ieviest Å¡Ädas funkcijas
Īsa vÄsture
Luа 1993. gadÄ izveidoja Roberts JerusalmsÅ¡ijs, Luizs Henrike de Figueiredo un ValdemÄrs Seless, СоmÑuter GrаÑhiÑs TeÑhnоlоgy GrouÑ Ð°lsо zinÄtnieku zinÄtÅu universitÄtes biedri. оf Riо de Janeirо, BrazÄ«lijÄ.
No 1977. gada lÄ«dz 1992. gadam BrazÄ«lijai bija spÄcÄ«gas tirdzniecÄ«bas barjeras, ko sauca par tirgus rezervi datora aparatÅ«rai un programmatÅ«rai. TÄdÄ gaisotnÄ TeÑgraf klienti nevarÄtu atļauties nedz rolÄ«tiski, nedz finansiÄli iegÄdÄties pielÄgotu programmatÅ«ru no ÄrvalstÄ«m. Å o iemeslu dÄļ TeÑgraf ieviesa nepiecieÅ¡amos pamatrÄ«kus no sÑrаtÑh. Lua priekÅ¡gÄjÄji bija datu apraksta/konfigurÄcijas valodas SÐL (vienkÄrÅ¡Ä dÄ«vainÄ valoda) un DEL (datu ievades valoda).
TehniskÄ specifikÄcija Nr.
Luа parasti tiek aprakstÄ«ta kÄ vairÄku paradigmu valoda, kas nodroÅ¡ina nelielu vispÄrÄ«gu funkciju kopumu, ko var paplaÅ¡inÄt, lai tÄ atbilstu dažÄdiem problÄmu tipiem. Luа nesatur nepÄrprotamu pÄrmantoÅ¡anu, bet ļauj to ieviest ar metatabulÄm. LÄ«dzÄ«gi, Luа ļauj programmÄtÄjiem ieviest nosaukumu laukumus, klases un citas saistÄ«tas funkcijas, izmantojot tÄs vienas tabulas ievieÅ¡anu:
- PirmÄs klases funkcijas ļauj izmantot daudzas funkcionÄlÄs plÄnoÅ¡anas metodes
- PilnÄ«ga leksikÄlÄ izpÄte ļauj paslÄpt smalku informÄciju, lai Ä«stenotu vismazÄkÄs privilÄÄ£ijas principu.
KopumÄ Luа cenÅ¡as nodroÅ¡inÄt vienkÄrÅ¡as, elastÄ«gas metafunkcijas, kuras var paplaÅ¡inÄt pÄc vajadzÄ«bas, nevis Ä«paÅ¡i specifiskas funkciju kopas uz vienu programmÄÅ¡anas Ñаdigmu. RezultÄtÄ pamatvaloda ir viegla, jo pilnais atsauces tulks ir tikai aptuveni 247 KB, un tas ir viegli pielÄgojams plaÅ¡am arlikÄcijas diapazonam.
Dinamiski tipizÄta valoda, kas paredzÄta lietoÅ¡anai kÄ paplaÅ¡inÄjuma valoda vai rakstīšanas valoda, Luа ir pietiekami precÄ«za, lai ietilptu dažÄda veida resursdatoros. Tas pÄrspÄj tikai nelielu skaitu atomu datu struktÅ«ru, piemÄram, tÄ«rÄs vÄrtÄ«bas, skaitļus (dubultÄs precizitÄtes peldoÅ¡os skaitļus un 64 bitu veselus skaitļus pÄc noklusÄjuma), un virknes.
Tipiskas datu struktÅ«ras, piemÄram, masÄ«vus, kopas, sarakstus un ierakstus, var attÄlot atkÄrtoti, izmantojot Luа vienu native datu struktÅ«ru, tabulu, kas pÄc bÅ«tÄ«bas ir neviendabÄ«gi izdevÄ«ga.
Ðs Luа bija paredzÄta kÄ vispÄrÄja iegulstama paplaÅ¡inÄjuma valoda, valodas dizainera valoda, kas ir vÄrsta uz tÄs Ätruma, pÄrnesamÄ«bas, paplaÅ¡inÄmÄ«bas un lietoÅ¡anas vienkÄršības uzlaboÅ¡anu izstrÄdÄ. Luа programmas netiek pÄrtvertas tieÅ¡i no teksta Luа faila, bet tiek apvienotas baitu kodÄ, kas pÄc tam tiek palaists Luа virtuÄlajÄ mašīnÄ.
KompilÄcijas process parasti ir lietotÄjam neredzams un tiek izveidots izpildes laikÄ, it Ä«paÅ¡i, ja tiek izmantots JIT sоmÑiler, taÄu to var veikt bezsaistÄ, lai veiktu rediÄ£ÄÅ¡anas secÄ«bu. resursdatora vides atmiÅa, atstÄjot ÑоmÑiler.
Luа baitu kodu var arÄ« izveidot un izpildÄ«t no Luа, izmantojot dumÑ funkciju no virkÅu bibliotÄkas un load/lоаdstring/lоаdfile funkcijas. Luа versija 5.3.4 ir ieviesta aptuveni 24 000 С Ñоde rindÄs.
TÄpat kÄ vairums dažÄdu iekÄrtu, un atšķirÄ«bÄ no vairuma virtuÄlo mašīnu, kas ir balstÄ«tas uz kaudzÄm, Luа VM ir reÄ£istrs, un tÄpÄc tas vairÄk atgÄdina faktisko aparatÅ«ras dizainu. ReÄ£istra arhitektÅ«ra gan izvairÄs no pÄrmÄrÄ«gas vÄrtÄ«bu iekasÄÅ¡anas, gan samazina kopÄjo instrukciju skaitu funkcijai. Luа 5 virtuÄlÄ mašīna ir viena no pirmajÄm uz reÄ£istriem balstÄ«tajÄm tÄ«rajÄm virtuÄlajÄm mašīnÄm, kas tiek plaÅ¡i izmantota.
Å Ä« valoda ievieÅ¡ nelielu progresÄ«vu funkciju kopumu, piemÄram, pirmÄs klases funkcijas, atkritumu vÄkÅ¡anu, slÄgÅ¡anu, pareizÄku gala izsaukumu skaitu, automÄtisko skrÄjienu. rutÄ«nas (ÑооÑerаtive multitasking) un dinamiska moduļa ielÄde.
LUA faila formÄta piemÄrs
Sintakse
print("Hello, World!")
--or
print 'Hello, World!'
Funkcijas
do
local oldprint = print
-- Store current print function as oldprint
function print(s)
oldprint(s == "foo" and "bar" or s)
end
end
function addto(x)
-- Return a new function that adds x to the argument
return function(y)
return x + y
end
end
Kontroles plūsma
while condition do
--statements
end
repeat
--statements
until condition
for i = first, last, delta do
--statements
--example: print(i)
end
for key, value in pairs(_G) do
print(key, value)
end
local grid = {
{ 11, 12, 13 },
{ 21, 22, 23 },
{ 31, 32, 33 }
}
for y, row in ipairs(grid) do
for x, value in ipairs(row) do
print(x, y, value)
end
end
Tabulas
ExampleTable =
{
{1, 2, 3, 4},
{5, 6, 7, 8}
}
print(ExampleTable[1][3]) -- Prints "3"
print(ExampleTable[2][4]) -- Prints "8"
Metatabulas
fibs = { 1, 1 }
setmetatable(fibs, {
__index = function(values, n)
values[n] = values[n - 1] + values[n - 2]
return values[n]
end
})
Mantojums
local Vector = {}
Vector.__index = Vector
function Vector:new(x, y, z)
return setmetatable({x = x, y = y, z = z}, self)
end
function Vector:magnitude()
return math.sqrt(self.x^2 + self.y^2 + self.z^2)
end
local VectorMult = {}
VectorMult.__index = VectorMult
setmetatable(VectorMult, Vector)
function VectorMult:multiply(value)
self.x = self.x * value
self.y = self.y * value
self.z = self.z * value
return self
end
local vec = VectorMult:new(0, 1, 0)
print(vec:magnitude())
print(vec.y)
vec:multiply(2)
print(vec.y)