Besh yillik ishlab chiqishdan so'ng, Lua 5.5 endi mavjud. Lua - bu konfiguratsiya va kengaytmalarni ishlab chiqish uchun o'rnatilgan til sifatida keng qo'llaniladigan tezkor va ixcham skript tili. Lua interpretatori C tilida yozilgan va MIT litsenziyasi ostida litsenziyalangan.
Lua oddiy protsedura sintaksisini assotsiativ massivlar va kengaytiriladigan til semantikasi orqali ma'lumotlarni tavsiflash imkoniyatlari bilan birlashtiradi. Lua dinamik yozishdan foydalanadi va til konstruksiyalari avtomatik axlat yig'ish funksiyasiga ega registrga asoslangan virtual mashinada ishlaydigan baytekodga aylantiriladi. Interpretator C va C++ loyihalariga integratsiya qilinishi mumkin bo'lgan kutubxona sifatida amalga oshiriladi.
Asosiy innovatsiyalar:
- Ko'pgina axlat yig'ish operatsiyalari incremental rejimdan foydalanadi, bu axlat yig'ish siklini dastur bajarilishi bilan birga keladigan alohida bosqichlarga ajratadi va xotirada ko'p sonli obyektlarga ega ilovalarni bajarishda uzoq pauzalarni bartaraf etadi.
- Bir xil turdagi ma'lumotlarga ega massivlar uchun 60% kamroq xotira talab qiladigan massivlarning ixcham amalga oshirilishi taklif qilinmoqda (tejashga turdagi ma'lumotlar har bir element uchun emas, balki elementlar guruhi uchun saqlanishi tufayli erishiladi).
- "global" kalit so'zidan foydalanib, istalgan kod blokida global o'zgaruvchilarni aniq e'lon qilish imkoniyati qo'shildi. Kod blokida "global" kalit so'zi bilan ifodalarni belgilashda barcha o'zgaruvchilar aniq e'lon qilinishi kerak. Agar "global" deklaratsiyasi yo'q bo'lsa, "global *" ifodasi bilvosita o'rnatiladi, bu eski xatti-harakatni saqlab qoladi va barcha o'zgaruvchilarni global deb hisoblaydi. "global" ifodasi ham qo'shildi. *" bunda barcha yashirin ravishda belgilangan global o'zgaruvchilar faqat o'qish uchun mo'ljallangan bo'ladi. X = 1 — Xo'sh, X global o'zgaruvchi bo'lib, eski standart xatti-harakat. global Y ni bajaring — Y o'zgaruvchisini global deb e'lon qiladi, blokdagi barcha boshqa o'zgaruvchilar aniq e'lon qilinishi kerak. Y = 1 — Xo'sh, Y o'zgaruvchisi oldindan aniqlangan. X = 1 — Xato, X o'zgaruvchisi aniqlanmagan. X = 2 tugadi — Xo'sh, global blokdan tashqarida eski xatti-harakat qo'llaniladi.
- "for" sikllarida ko'rsatilgan boshqaruv o'zgaruvchilari endi faqat o'qish uchun mo'ljallangan va sikl tanasi ichida o'zgartirib bo'lmaydi. Masalan, "for i = 1, 5 do" sikl ichida e'lon qilingan i o'zgaruvchisini sikl tanasi ichida o'zgartirib bo'lmaydi.
- Chop etish funksiyasidan foydalanib, suzuvchi nuqtali raqamlarni chop etishda, endi ularni satrdan asl ko'rinishiga to'g'ri qaytarish uchun yetarli miqdordagi raqamlar chop etiladi.
- Jadval konstruktorlari uchun ruxsat etilgan joylashtirish darajalari soni oshirildi.
- Bo'sh jadval qo'shish va belgilangan elementlar soni uchun xotirani oldindan ajratish uchun table.create(nseq, nrec) funksiyasi qo'shildi.
- utf8.offset funksiyasi nafaqat belgi boshiga bayt ofsetini, balki belgi oxirining o'rnini ham qaytaradi.
- Lua axlat yig'uvchisi tomonidan boshqarilmaydigan xotirada joylashgan tashqi satrlarni yaratish uchun qo'llab-quvvatlash qo'shildi.
- Tanlangan kutubxonani yuklash uchun luaL_openselelectedlibs funksiyasi, shuningdek, lua_newstate funksiyasi uchun urug' yaratadigan luaL_makeseed funksiyasi qo'shildi.
- lua.c da, agar mavjud bo'lsa, "readline" kutubxonasining dinamik yuklanishi ta'minlanadi (agar kutubxona tizimda mavjud bo'lsa, u yuklanadi va satrlarni tahrirlash funktsiyalari mavjud bo'ladi).
- Oldindan kompilyatsiya qilingan bayt kodini yuklashda xotirani tejash uchun optimallashtirish yoqilgan - Lua endi ba'zi ichki tuzilmalarda takroriy bayt kodini yuklashda dublikatlarni yaratmasdan xotirani qayta ishlatishi mumkin.
- Barcha qatorlar dump va undump operatsiyalarida qayta ishlatilishiga ishonch hosil qilindi.
- Yordamchi buferlarda, oxirgi satrni yaratishda buferni qayta ishlatish (yangi buferga nusxalamasdan) ta'minlanadi.
Manba: opennet.ru
