Пасля двух гадоў распрацоўкі, 29 чэрвеня ціха і неўзаметку выйшла новая версія мовы праграмавання Lua – 5.4.

Lua – гэта простая інтэрпрэтаваная мова праграмавання, якая лёгка ўбудоўваецца ў дадатку. Дзякуючы гэтым якасцям, Lua шырока выкарыстоўваецца як мова пашырэння ці апісанні канфігурацыі праграм (у прыватнасці, кампутарных гульняў). Распаўсюджваюцца Lua па ліцэнзіі MIT.

Папярэдняя версія (5.3.5) выходзіла 10 ліпеня 2018 года.

Асноўныя змены ў новай версіі

  • новы зборшчык смецця на аснове пакаленняў (generational). У функцыі collectgarbage параметры setpause і setstepmul абвешчаныя састарэлымі, замест іх рэкамендуецца выкарыстоўваць параметр incremental;

  • новая функцыя для выдачы папярэджанняў warn з магчымасцю адключэння іх адлюстравання;

  • новая рэалізацыя math.random выкарыстоўвае алгарытм xoshiro256** замест які прадстаўляецца libc і ініцыялізуе генератар выпадковым лікам;

  • канстанты (constant variables);

  • "зачыняюцца" (to-be-closed) зменныя - лакальныя канстанты, для якіх выконваецца метад __close пры выхадзе з вобласці бачнасці;

  • новая функцыя lua_resetthread - чысціць стэк і выконвае зачыненне ўсіх «зачыняных» зменных;

  • новая функцыя coroutine.close - закрывае паказаную супраграму і ўсе яе «зачыняныя» зменныя;

  • карыстацкія дадзеныя (userdata) могуць утрымоўваць набор значэнняў з доступам па азначніку. Для працы з імі ўведзены новыя функцыі: lua_newuserdatauv, lua_setiuservalue і lua_getiuservalue;

  • даступная адладкавая інфармацыя аб параметрах і якія вяртаюцца значэннях функцый;

  • калі ў цыкле па лічыльніку for выкарыстоўваецца цэлалікавы індэкс і адбываецца перапаўненне - цыкл завяршаецца;

  • у функцыю string.gmatch дададзены неабавязковы аргумент, які задае зрушэнне ад пачатку радка для пошуку супадзенняў;

  • функцыі няяўнага пераўтварэння радкоў у лікі перамешчаныя ў радковую бібліятэку, змяніліся іх паводзіны. Напрыклад, вынік аперацыі "1" + "2" зараз цэлы лік, а не лік з якая плавае кропкай;

  • у функцыі вылучэння памяці дапушчальна ўзнікненне памылкі пры скарачэнні блока памяці;

  • новы сімвал фарматавання ў функцыі string.format - %p (для паказальнікаў);

  • бібліятэка utf8 прымае коды сімвалаў аж да 2³¹ (пры ўказанні спецыяльнага флага, без яго дапускаюцца толькі коды да 0x10FFFF і не дапускаюцца сурагаты);

  • цэлалікавыя канстанты, якія выходзяць за межы дыяпазону значэнняў, пераўтворацца ў плывучыя лікі (раней адбывалася бітавае адсячэнне);

  • метаметод __lt больш не выкарыстоўваецца для эмуляцыя метаметода __le, пры неабходнасці, метаметод __le павінен быць зададзены відавочна;

  • пазнака для аператара goto не можа быць створана, калі ў бягучай вобласці бачнасці ўжо існуе пазнака з такім жа імем (нават калі яна была вызначана ў знешняй вобласці);

  • метаметод __gc можа быць не толькі функцыяй. Калі спроба выклікаць метад не атрымоўваецца, будзе выведзена папярэджанне;

  • функцыя print не выклікае tostring для кожнага аргумента, а выкарыстоўвае свае ўнутраныя пераўтварэнні;

  • функцыя io.lines вяртае набор з чатырох значэнняў замест аднаго, для эмуляцыі старых паводзін складайце выклік у дужкі, калі падстаўляеце яго як параметр пры выкліку іншай функцыі.

Крыніца: linux.org.ru

Дадаць каментар