Рэліз мовы праграмавання Lua 5.4

Пасля пяці гадоў распрацоўкі даступны рэліз Lua 5.4, хуткай і кампактнай скрыптовай мовы праграмавання, атрымалага вялікі распаўсюд у якасці ўбудаванага (напрыклад, для вызначэння канфігурацыі ці для напісання пашырэнняў). Код інтэрпрэтатара Lua напісаны на мове Сі і распаўсюджваецца пад ліцэнзіяй MIT.

Lua камбінуе просты працэдурны сінтаксіс з магутнымі магчымасцямі апісання дадзеных праз выкарыстанне асацыятыўных масіваў і якая пашыраецца семантыкі мовы. У Lua выкарыстоўваецца дынамічная тыпізацыя, моўныя канструкцыі пераўтворацца ў байт-код, які выконваецца па-над рэгістравай віртуальнай машыны з аўтаматычным зборшчыкам смецця. Сам інтэрпрэтатар аформлены ў выглядзе бібліятэкі, якая лёгка інтэгруецца ў праекты на мовах Сі і Сі++.

Асноўныя навіны:

  • Рэалізаваны новы рэжым працы зборшчыка смецця.пакаленне«, які дапоўніў сабой раней даступны інкрыментальны рэжым зборкі смецця. Новы рэжым мае на ўвазе больш часты запуск скарочанага абыходу, які ахоплівае толькі нядаўна створаныя аб'екты. Поўны абыход усіх аб'ектаў выконваецца толькі, калі пасля скарочанага абыходу не ўдалося дабіцца жаданых паказчыкаў спажывання памяці. Падобны падыход дазваляе дасягнуць больш высокай прадукцыйнасці і паменшыць спажыванне памяці ў сітуацыі захоўвання вялікай колькасці аб'ектаў, якія жывуць кароткі час.
  • Дададзена магчымасць вызначэння пастаянных зменных, якiя вызначаюцца з атрыбутам «const». Падобныя зменныя могуць быць прызначаны толькі адзін раз і пасля ініцыялізацыі ўжо не могуць быць зменены.
  • Дададзена падтрымка зменныхto-be-closed«, якія прызначаюцца пры дапамозе атрыбута «close» і нагадваюць сталыя лакальныя зменныя (з атрыбутам const), адрозніваючыся ад іх тым, што значэнне зачыняецца (выклікаецца метад «__close») пры любым вынахадзе з вобласці бачнасці, напрыклад, пасля звычайнага завяршэння блока, пераходу пры дапамозе break/goto/return або выхаду пры ўзнікненні памылкі.
  • Тып «дадзеныя карыстальніка«, які прадстаўляе магчымасць захоўвання ў Lua-пераменных любых Сі-дадзеных (уяўляе блок дадзеных у памяці або змяшчае Сі-паказальнік), зараз можа змяшчаць некалькі значэнняў (мець некалькі метатабліц).
  • Прадстаўлена новая рэалізацыя функцыі для генерацыі псеўдавыпадковых лікаў - math.random.
  • Дададзена сістэма папярэджанняў, якія вызначаюцца пры дапамозе выраза папярэджваць і, у адрозненне ад памылак, не ўплываюць на далейшае выкананне праграмы.
  • Дададзена адладкавая інфармацыя аб аргументах функцый і значэннях, якія вяртаюцца ў аператары "return".
  • Прапанавана новая семантыка для перабору цэлых лікаў у цыклах.для“. Разлік колькасці ітэрацый робіцца да пачатку цыкла, што дазваляе пазбегнуць перапаўнення зменнай і зацыклення. Калі пачатковае значэнне больш абмяжоўвалага, тое выводзіцца памылка.
  • У функцыю 'string.gmatch' дададзены новы неабавязковы аргумент 'init', вызначальны з якой пазіцыі пачаць пошук (па змаўчанні з 1 знака).
  • Дададзеныя новыя функцыі 'lua_resetthread' (скідае струмень, чысціць увесь стэк выклікаў і закрывае ўсе «to-be-closed» зменныя) і 'coroutine.close' (закрывае супраграму і ўсе звязаныя "to-be-closed" зменныя).
  • Функцыі пераўтварэння радкоў у лікі перамешчаныя ў бібліятэку «string».
  • Выклік функцыі вылучэння памяці зараз можа завяршыцца няўдачай у выпадку скарачэння памеру блока памяці.
  • У функцыю 'string.format' дададзена падтрымка новага спецыфікатара фармату '%p' (паказальнік, які вяртаецца lua_topointer).
  • У бібліятэцы utf8 забяспечана падтрымка кодаў сімвалаў з нумарамі да 2^31.

Крыніца: opennet.ru

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