Malferma fonto por Luau, tipkontrola varianto de la Lua lingvo

Anoncis la malferman fonton kaj publikigon de la unua memstara eldono de la Luau programlingvo, daŭrigante la evoluon de la Lua lingvo kaj retrokongrua kun Lua 5.1. Luau estas desegnita ĉefe por enkonstrui skriptmotorojn en aplikojn kaj celas atingi altan rendimenton kaj malaltan konsumon de rimedoj. La projektkodo estas skribita en C++ kaj estas malfermita sub la MIT-licenco.

Luau etendas Lua kun tipo-kontroladkapabloj kaj kelkaj novaj sintaksaj konstrukcioj kiel ekzemple ĉenliteraĵoj. La lingvo estas retrokongrua kun Lua 5.1 kaj parte kun pli novaj versioj. La Lua Runtime API estas subtenata, permesante al vi uzi Luau kun ekzistanta kodo kaj ligadoj. La lingva rultempo baziĝas sur tre reverkita Lua rultempo 5.1 kodo, sed la interpretisto estas tute reverkita. Dum evoluo, kelkaj novaj optimumigaj teknikoj estis uzataj por atingi pli altan rendimenton kompare kun Lua.

La projekto estis disvolvita de Roblox kaj estas uzata en la kodo de la ludplatformo, ludoj kaj uzantaj aplikoj de ĉi tiu kompanio, inkluzive de la redaktilo Roblox Studio. Komence, Luau estis disvolvita malantaŭ fermitaj pordoj, sed finfine oni decidis translokigi ĝin al la kategorio de malfermitaj projektoj por plua komuna disvolviĝo kun la partopreno de la komunumo.

Ŝlosilaj Karakterizaĵoj:

  • Laŭgrada tajpado, okupante mezan pozicion inter dinamika kaj senmova tajpado. Luau permesas vin uzi senmovan tajpadon laŭbezone specifante tipinformojn per specialaj komentarioj. La enkonstruitaj tipoj "ajna", "nil", "bulea", "nombro", "ŝnuro" kaj "fadeno" estas provizitaj. Samtempe, la ebleco uzi dinamikan tajpadon sen eksplicite difini la specon de variabloj kaj funkcioj estas konservita. funkcio foo(x: nombro, y: ĉeno): bulea loka k: ĉeno = y:rep(x) return k == “a” fino
  • Subteno por ĉenvortaĵoj (kiel en Lua 5.3) kiel "\0x**" (deksesuma nombro), "\u{**}" (Unikoda signo) kaj "\z" (liniofino), same kiel la kapablo bildigi nombroformatadon (vi povas skribi 1_000_000 anstataŭ 1000000), literalojn por deksesuma (0x...) kaj binaraj nombroj (0b......).
  • Subteno por la "daŭrigi" esprimo, kompletigante la ekzistantan "rompi" ŝlosilvorton, por salti al nova buklo-ripeto.
  • Subteno por kunmetitaj asignofunkciigistoj (+=, -=, *=, /=, %=, ^=, ..=).
  • Subteno por la uzo de kondiĉaj "se-tiam-alie" blokoj en formo de esprimoj, kiuj redonas la valoron kalkulitan dum la ekzekuto de la bloko. Vi povas specifi arbitran nombron da elseif-esprimoj en bloko. loka maxValue = se a > b tiam a else b loka signo = if x < 0 tiam -1 elseif x > 0 tiam 1 alia 0
  • La ĉeesto de izola reĝimo (sandbox), kiu permesas ruli nefidindan kodon. Ĉi tiu funkcio povas esti uzata por organizi la lanĉon flank-al-flanke de via propra kodo kaj kodo skribita de alia programisto, ekzemple, triaj bibliotekoj por kies sekureco ne povas esti garantiita.
  • Limigo de la norma biblioteko de kiu funkcioj kiuj eble povus krei sekurecproblemojn estis forigitaj. Ekzemple, la bibliotekoj "io" (aliro de dosieroj kaj lanĉaj procezoj), "pako" (aliro de dosieroj kaj ŝarĝo de moduloj), "os" (funkcioj por aliri dosierojn kaj ŝanĝi mediajn variablojn), "debug" (nesekura operacio kun memoro) , "dosiero" kaj "ŝarĝodosiero" (FS-aliro).
  • Provizante ilojn por statika kodanalizo, identigante erarojn (linter) kaj kontrolante la ĝustan uzon de tipoj.
  • Propra alt-efikeca analizilo, bajtokoda interpretilo kaj kompililo. Luau ankoraŭ ne apogas JIT-kompilon, sed estas postulite ke la Luau-interpretisto estas sufiĉe komparebla en efikeco al LuaJIT en kelkaj situacioj.

fonto: opennet.ru

Aldoni komenton