lua i luajit - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~milena/dpj/09/lua.pdf · lua...
TRANSCRIPT
![Page 1: Lua i LuaJIT - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~milena/dpj/09/LUA.pdf · Lua priručnik: Kako početi? ... Mašinski kod Mašinski kod Izvorni kod. Prevođenje tipa JIT](https://reader037.vdocuments.pub/reader037/viewer/2022100218/5a7388cb7f8b9aa3618b4e04/html5/thumbnails/1.jpg)
Lua i LuaJIT
● Stefan Pejić
● Đorđe Kovačević
● RT-RK, Computer Based Systems
● Fakultet tehničkih nauka, Novi Sad
● Radimo na programskom prevodiocu LuaJIT
● Današnje teme:
– Programski jezik Lua
– Programski prevodilac LuaJIT
![Page 2: Lua i LuaJIT - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~milena/dpj/09/LUA.pdf · Lua priručnik: Kako početi? ... Mašinski kod Mašinski kod Izvorni kod. Prevođenje tipa JIT](https://reader037.vdocuments.pub/reader037/viewer/2022100218/5a7388cb7f8b9aa3618b4e04/html5/thumbnails/2.jpg)
Programski jezik Lua
● Skriptni jezik
– Interpretiran
– Dinamički tipiziran
– Python, Ruby, JavaScript, itd.
● Koristi se u različite svrhe
– Pisanje igara (veoma rasprostranjen!)
– Pisanje proširenja za programe (često)
– Pisanje testova
– Pisanje konfiguracija
– Opisivanje podataka
![Page 3: Lua i LuaJIT - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~milena/dpj/09/LUA.pdf · Lua priručnik: Kako početi? ... Mašinski kod Mašinski kod Izvorni kod. Prevođenje tipa JIT](https://reader037.vdocuments.pub/reader037/viewer/2022100218/5a7388cb7f8b9aa3618b4e04/html5/thumbnails/3.jpg)
Osobine Lue
● Jednostavan jezik
– Pogodan za početnike
– Pogodan za osobe kojima programiranje nije primarna delatnost● Kompaktan
– Poseduje jako malu standardnu biblioteku
– Pogodan za upotrebu na namenskim uređajima● Poseduje mehanizme za širok skup funkcionalnosti
– Pogodan za kompleksne projekte● Ugradiv
– Lako se spreže sa drugim programskim jezicima
![Page 4: Lua i LuaJIT - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~milena/dpj/09/LUA.pdf · Lua priručnik: Kako početi? ... Mašinski kod Mašinski kod Izvorni kod. Prevođenje tipa JIT](https://reader037.vdocuments.pub/reader037/viewer/2022100218/5a7388cb7f8b9aa3618b4e04/html5/thumbnails/4.jpg)
Osobine Lue
● Dinamičko tipiziranje
● Automatsko upravljanje memorijom
● Funkcije se tretiraju kao i tipovi
● Mehanizam za konkurentno izvršavanje programa
● Mehanizmi za:
– Objektno programiranje
– Funkcionalno programiranje
– Proceduralno programiranje
● Znatna upotreba tabela
![Page 5: Lua i LuaJIT - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~milena/dpj/09/LUA.pdf · Lua priručnik: Kako početi? ... Mašinski kod Mašinski kod Izvorni kod. Prevođenje tipa JIT](https://reader037.vdocuments.pub/reader037/viewer/2022100218/5a7388cb7f8b9aa3618b4e04/html5/thumbnails/5.jpg)
Osobine Lue
● Lokalne i globalne promenljive
● Iteratori
● Moduli (biblioteke)
● Metatabele
● Opet tabele!
– Tabele su osnovna struktura podataka u Lui!
– Ostale strukture se predstavljaju tabelama
– Objekti/klase se predstavljaju tabelama
– Tabele se mogu koristiti kao namespace
![Page 6: Lua i LuaJIT - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~milena/dpj/09/LUA.pdf · Lua priručnik: Kako početi? ... Mašinski kod Mašinski kod Izvorni kod. Prevođenje tipa JIT](https://reader037.vdocuments.pub/reader037/viewer/2022100218/5a7388cb7f8b9aa3618b4e04/html5/thumbnails/6.jpg)
Primer
x = 20
local y = 30
local function foo ()
return x + y
end
local foo1 = foo
print(foo1())
globalna promenljiva
lokalne promenljive
![Page 7: Lua i LuaJIT - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~milena/dpj/09/LUA.pdf · Lua priručnik: Kako početi? ... Mašinski kod Mašinski kod Izvorni kod. Prevođenje tipa JIT](https://reader037.vdocuments.pub/reader037/viewer/2022100218/5a7388cb7f8b9aa3618b4e04/html5/thumbnails/7.jpg)
Lua u gaming industriji
● Veliki broj frameworka za pisanje igara
– LÖVE, Corona, MOAI, itd.
– Stingray 3D, Luxinia, Cafu 3D, itd.
● Igre proširive korišćenjem Lue:
– The Witcher
– Far Cry
– World of Warcraft
– Google „Lua-scripted video games“
![Page 8: Lua i LuaJIT - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~milena/dpj/09/LUA.pdf · Lua priručnik: Kako početi? ... Mašinski kod Mašinski kod Izvorni kod. Prevođenje tipa JIT](https://reader037.vdocuments.pub/reader037/viewer/2022100218/5a7388cb7f8b9aa3618b4e04/html5/thumbnails/8.jpg)
Ostale upotrebe Lue
● Adobe Photoshop Lightroom
● VLC media player
● Apache web server
● Wikipedia
● Cisco Adaptive Security Appliance
● I mnogi drugi
![Page 9: Lua i LuaJIT - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~milena/dpj/09/LUA.pdf · Lua priručnik: Kako početi? ... Mašinski kod Mašinski kod Izvorni kod. Prevođenje tipa JIT](https://reader037.vdocuments.pub/reader037/viewer/2022100218/5a7388cb7f8b9aa3618b4e04/html5/thumbnails/9.jpg)
Kako početi?
● Knjiga „Programming in Lua“, Roberto Ierusalimschy
● Lua zajednica: www.lua-users.org
● Mailing lista: http://www.lua.org/lua-l.html
● Lua priručnik: http://www.lua.org/manual/5.3/
![Page 10: Lua i LuaJIT - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~milena/dpj/09/LUA.pdf · Lua priručnik: Kako početi? ... Mašinski kod Mašinski kod Izvorni kod. Prevođenje tipa JIT](https://reader037.vdocuments.pub/reader037/viewer/2022100218/5a7388cb7f8b9aa3618b4e04/html5/thumbnails/10.jpg)
Kako početi?
● Postoji više implementacija Lue:
– Lua (zvanični kompajler) i LuaJIT su najpoznatiji kompajleri za Luu
– http://www.lua.org/download.html
– http://luajit.org/download.html● Postoji nekoliko verzija Lue
– 5.1, 5.2 i 5.3 su najčešće implementirane
– Programi pisani za različite verzije Lue su nekada nekompatibilni
![Page 11: Lua i LuaJIT - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~milena/dpj/09/LUA.pdf · Lua priručnik: Kako početi? ... Mašinski kod Mašinski kod Izvorni kod. Prevođenje tipa JIT](https://reader037.vdocuments.pub/reader037/viewer/2022100218/5a7388cb7f8b9aa3618b4e04/html5/thumbnails/11.jpg)
Programski prevodilac LuaJIT
● Programski prevodilac
● LuaJIT programski prevodilac za jezik Lua
– Nezavisna realizacija interpretera Lue sa prevodiocem tipa JIT
Prevodilac
IRPrednji kraj (analiza)
Zadnji kraj (sinteza)Izvorni kod Mašinski kod
Ulazne vrednosti
Rezultati
![Page 12: Lua i LuaJIT - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~milena/dpj/09/LUA.pdf · Lua priručnik: Kako početi? ... Mašinski kod Mašinski kod Izvorni kod. Prevođenje tipa JIT](https://reader037.vdocuments.pub/reader037/viewer/2022100218/5a7388cb7f8b9aa3618b4e04/html5/thumbnails/12.jpg)
Šta je interpreter?
● Prevodi kod u toku izvršavanja
● Direktno izvršava operacije definisane u izvornom programu nad ulaznim podacima
● Mane:
– za svako novo izvršavanje ponavlja kompletno prevođenje
– ukupno zahteva više vremena za izvršavanje ulaznog programa
● Prednosti:
– koristi mnogo manje memorije
– bolju dijagnostiku grešaka i interaktivno ispitivanje
![Page 13: Lua i LuaJIT - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~milena/dpj/09/LUA.pdf · Lua priručnik: Kako početi? ... Mašinski kod Mašinski kod Izvorni kod. Prevođenje tipa JIT](https://reader037.vdocuments.pub/reader037/viewer/2022100218/5a7388cb7f8b9aa3618b4e04/html5/thumbnails/13.jpg)
Šta je prevodilac tipa JIT?
● Just-In-Time
● Prevodi kod (međukod) tokom samog izvršavanja programa u formu čije izvršavanje je brže
● U većini programa postoje kritični delovi koda koji se izvršavaju uzastopno više puta
● Prevesti kritični deo koda samo jednom, sačuvati ga u memoriji i iskoristiti svaki naredni put kada treba da se izvrši isti segment
![Page 14: Lua i LuaJIT - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~milena/dpj/09/LUA.pdf · Lua priručnik: Kako početi? ... Mašinski kod Mašinski kod Izvorni kod. Prevođenje tipa JIT](https://reader037.vdocuments.pub/reader037/viewer/2022100218/5a7388cb7f8b9aa3618b4e04/html5/thumbnails/14.jpg)
Programski prevodilac LuaJIT
● Znatno brže izvršavanje koda napisanog u Lui
● Koristi se u igrama, grafičkim programima, numeričkim simulacijama, mrežama, namenskim uređajima...
● Fleksibilnost
● Visoke performanse
● Neuporedivo mala upotreba memorije
![Page 15: Lua i LuaJIT - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~milena/dpj/09/LUA.pdf · Lua priručnik: Kako početi? ... Mašinski kod Mašinski kod Izvorni kod. Prevođenje tipa JIT](https://reader037.vdocuments.pub/reader037/viewer/2022100218/5a7388cb7f8b9aa3618b4e04/html5/thumbnails/15.jpg)
Programski prevodilac LuaJIT
● LuaJIT se distribuira samo kao paket sa izvornim kodom
● Podržane arhitekture: x86, x64, ARM, MIPS, PPC
● Kompatibilan sa svim verzijama Lue do verzije 5.1
● Modul za operacije nad bitima
● FFI (Foreign Function Interface) modul
![Page 16: Lua i LuaJIT - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~milena/dpj/09/LUA.pdf · Lua priručnik: Kako početi? ... Mašinski kod Mašinski kod Izvorni kod. Prevođenje tipa JIT](https://reader037.vdocuments.pub/reader037/viewer/2022100218/5a7388cb7f8b9aa3618b4e04/html5/thumbnails/16.jpg)
Interpreter LuaJITa
● Napisan u asembleru
● Interpreter bajt koda
● Sopstveni format bajt koda
– Dva formata instrukcija
– Razlikovanje po tipu operanada (pr. ADDVN)
● Direktno razrešavanje instrukcija
B C A OP
B A OP
![Page 17: Lua i LuaJIT - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~milena/dpj/09/LUA.pdf · Lua priručnik: Kako početi? ... Mašinski kod Mašinski kod Izvorni kod. Prevođenje tipa JIT](https://reader037.vdocuments.pub/reader037/viewer/2022100218/5a7388cb7f8b9aa3618b4e04/html5/thumbnails/17.jpg)
Interpreter LuaJITa
Lua code:-----------------------local min = 100 local max = 1000local write = io.write
for i = min, max do write("Hello!")end
Bytecode:------------------------------------0001 KSHORT 0 1000002 KSHORT 1 10000003 GGET 2 0 ; "io"0004 TGETS 2 2 1 ; "write"0005 MOV 3 00006 MOV 4 10007 KSHORT 5 10008 FORI 3 => 00130009 => MOV 7 20010 KSTR 8 2 ; "Hello!"0011 CALL 7 1 20012 FORL 3 => 00090013 => RET0 0 1
![Page 18: Lua i LuaJIT - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~milena/dpj/09/LUA.pdf · Lua priručnik: Kako početi? ... Mašinski kod Mašinski kod Izvorni kod. Prevođenje tipa JIT](https://reader037.vdocuments.pub/reader037/viewer/2022100218/5a7388cb7f8b9aa3618b4e04/html5/thumbnails/18.jpg)
Prevođenje tipa JIT
Generisanje mašinskog
koda
Generisanje mašinskog
koda
Izvorni kod
ParsiranjeParsiranje InterpretiranjeInterpretiranje
Snimanje tragova
Snimanje tragova
Optimizovanje međukoda
Optimizovanje međukoda
Međukod
interpretera
Međukod interpretera
Međukod prevodioca
Optimizovanmeđukod
Mašinski kod
Mašinski
kod
Izvorni kod
![Page 19: Lua i LuaJIT - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~milena/dpj/09/LUA.pdf · Lua priručnik: Kako početi? ... Mašinski kod Mašinski kod Izvorni kod. Prevođenje tipa JIT](https://reader037.vdocuments.pub/reader037/viewer/2022100218/5a7388cb7f8b9aa3618b4e04/html5/thumbnails/19.jpg)
Prevođenje tipa JIT
● LuaJIT je prevodilac tipa tracing JIT
– Vrši formiranje koda bazirano na tragovima u toku izvršavanja
● Realizovano u programskom jeziku C
● Generiše IR instrukcije na osnovu bajt koda
● IR instrukcije su:
– 64 bita
– Kod operacije i 2 operanda
– Svaka ima tip povratne vrednosti
– Jedinstveno referencirane svojim položajem u nizu
![Page 20: Lua i LuaJIT - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~milena/dpj/09/LUA.pdf · Lua priručnik: Kako početi? ... Mašinski kod Mašinski kod Izvorni kod. Prevođenje tipa JIT](https://reader037.vdocuments.pub/reader037/viewer/2022100218/5a7388cb7f8b9aa3618b4e04/html5/thumbnails/20.jpg)
IR kod
IR code:---------------------------------0001 int SLOAD #2 CI0002 > num SLOAD #1 T0003 num CONV 0001 num.int0004 + num ADD 0003 00020005 + int ADD 0001 +1 0006 > int LE 0005 +1000007 ------ LOOP ------------0008 num CONV 0005 num.int0009 + num ADD 0008 00040010 + int ADD 0005 +1 0011 > int LE 0010 +1000012 int PHI 0005 00100013 num PHI 0004 0009
Lua code:-----------------------local x = 5
for i = 1, 100 do X = x + iend
![Page 21: Lua i LuaJIT - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~milena/dpj/09/LUA.pdf · Lua priručnik: Kako početi? ... Mašinski kod Mašinski kod Izvorni kod. Prevođenje tipa JIT](https://reader037.vdocuments.pub/reader037/viewer/2022100218/5a7388cb7f8b9aa3618b4e04/html5/thumbnails/21.jpg)
Prilagođavanje LuaJITa
● Arhitekturi MIPS32 bez jedinice za operacije u aritmetici pokretnog zareza (soft-float)
● Arhitekturi MIPS64
● Koraci:
– Prilagođavanje interpretera
– Prilagođavanje prevođenja tipa JIT
![Page 22: Lua i LuaJIT - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~milena/dpj/09/LUA.pdf · Lua priručnik: Kako početi? ... Mašinski kod Mašinski kod Izvorni kod. Prevođenje tipa JIT](https://reader037.vdocuments.pub/reader037/viewer/2022100218/5a7388cb7f8b9aa3618b4e04/html5/thumbnails/22.jpg)
Prilagođavanje interpretera
● Prilagođavanje ABI-ja
– MIPS sa koprocesorom: argumenti funkcije u koprocesorskim registrima
– MIPS bez koprocesora: argumenti u registrima opšte namene
– Modifikovanje koda pri pozivu i povratku iz funkcije
● Aritmetičke operacije
– Pozivanje funkcija napisanih u C-u koje obavljaju datu operaciju
● Operacije poređenja
– Povratna vrednost ukazuje na relaciju između operanada
– Osnova za funkcije min, max i for petlje
![Page 23: Lua i LuaJIT - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~milena/dpj/09/LUA.pdf · Lua priručnik: Kako početi? ... Mašinski kod Mašinski kod Izvorni kod. Prevođenje tipa JIT](https://reader037.vdocuments.pub/reader037/viewer/2022100218/5a7388cb7f8b9aa3618b4e04/html5/thumbnails/23.jpg)
Prilagođavanje JIT prevođenja
● Prevođenje tipa JIT implementirano u C-u
● Modifikovanje funkcija koje prevode dati međukod prevodioca u sekvencu mašinskih instrukcija
● Prilagođavanje ABI-ja
● Funkcije za čitanje i upis sadržaja u memoriju
● Funkcije min i max
![Page 24: Lua i LuaJIT - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~milena/dpj/09/LUA.pdf · Lua priručnik: Kako početi? ... Mašinski kod Mašinski kod Izvorni kod. Prevođenje tipa JIT](https://reader037.vdocuments.pub/reader037/viewer/2022100218/5a7388cb7f8b9aa3618b4e04/html5/thumbnails/24.jpg)
Hvala na pažnji!
![Page 25: Lua i LuaJIT - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~milena/dpj/09/LUA.pdf · Lua priručnik: Kako početi? ... Mašinski kod Mašinski kod Izvorni kod. Prevođenje tipa JIT](https://reader037.vdocuments.pub/reader037/viewer/2022100218/5a7388cb7f8b9aa3618b4e04/html5/thumbnails/25.jpg)
● Stefan Pejić – [email protected]
● Đorđe Kovačević – [email protected]
● RT-RK, Computer Based Systems
www.rt-rk.com