Ffynhonnell agored ar gyfer Luau, amrywiad gwirio teip o'r iaith Lua

Cyhoeddi ffynhonnell agored a chyhoeddi'r datganiad annibynnol cyntaf o iaith raglennu Luau, gan barhau â datblygiad yr iaith Lua ac yn ôl yn gydnaws â Lua 5.1. Mae Luau wedi'i gynllunio'n bennaf ar gyfer ymgorffori peiriannau sgriptio mewn cymwysiadau a'i nod yw cyflawni perfformiad uchel a defnydd isel o adnoddau. Mae cod y prosiect wedi'i ysgrifennu yn C ++ ac mae'n agored o dan y drwydded MIT.

Mae Luau yn ymestyn Lua gyda galluoedd gwirio teip a rhai lluniadau cystrawen newydd fel llythrennol llinynnol. Mae'r iaith yn gydnaws yn ôl â Lua 5.1 ac yn rhannol â fersiynau mwy newydd. Cefnogir API Lua Runtime, sy'n eich galluogi i ddefnyddio Luau gyda chod a rhwymiadau presennol. Mae'r amser rhedeg iaith yn seiliedig ar god amser rhedeg Lua 5.1 sydd wedi'i ail-weithio'n helaeth, ond mae'r cyfieithydd yn cael ei ailysgrifennu'n llwyr. Yn ystod y datblygiad, defnyddiwyd rhai technegau optimeiddio newydd i gyflawni perfformiad uwch o'i gymharu â Lua.

Datblygwyd y prosiect gan Roblox ac fe'i defnyddir yng nghod platfform hapchwarae, gemau, a chymwysiadau defnyddwyr y cwmni hwn, gan gynnwys golygydd Stiwdio Roblox. I ddechrau, datblygwyd Luau y tu ôl i ddrysau caeedig, ond yn y diwedd penderfynwyd ei drosglwyddo i'r categori o brosiectau agored ar gyfer datblygiad pellach ar y cyd gyda chyfranogiad y gymuned.

Nodweddion Allweddol:

  • Teipio graddol, mewn safle canolradd rhwng teipio deinamig a statig. Mae Luau yn caniatáu ichi ddefnyddio teipio statig yn ôl yr angen trwy nodi gwybodaeth fath trwy anodiadau arbennig. Darperir y mathau adeiledig "unrhyw", "dim", "boolean", "rhif", "llinyn" ac "edau". Ar yr un pryd, cedwir y posibilrwydd o ddefnyddio teipio deinamig heb ddiffinio'n benodol y math o newidynnau a swyddogaethau. ffwythiant foo(x: rhif, y: llinyn): boolean lleol k: llinyn = y: rep(x) dychwelyd k == diwedd “a”
  • Cefnogaeth i lythrennau llinynnol (fel yn Lua 5.3) megis "\0x**" (rhif hecsadegol), "\u{**}" (nodwedd Unicode) a " \z" (diwedd y llinell), yn ogystal â'r y gallu i ddelweddu fformatio rhif (gallwch ysgrifennu 1_000_000 yn lle 1000000), llythrennol ar gyfer rhifau hecsadegol (0x...) a rhifau deuaidd (0b......).
  • Cefnogaeth i'r ymadrodd "parhau", gan ategu'r allweddair "torri" presennol, i neidio i iteriad dolen newydd.
  • Cefnogaeth i weithredwyr aseiniadau cyfansawdd (+=, -=, *=, /=, %=, ^=, ..=).
  • Cefnogaeth ar gyfer defnyddio blociau amodol "os-yna-arall" ar ffurf ymadroddion sy'n dychwelyd y gwerth a gyfrifwyd yn ystod gweithredu'r bloc. Gallwch nodi nifer mympwyol o ymadroddion elseif mewn bloc. lleol maxValue = os a > b yna arwydd lleol arall b = os x < 0 yna -1 arallif x > 0 yna 1 arall 0
  • Presenoldeb modd ynysu (blwch tywod), sy'n eich galluogi i redeg cod annibynadwy. Gellir defnyddio'r nodwedd hon i drefnu lansiad ochr yn ochr â'ch cod a'ch cod eich hun a ysgrifennwyd gan ddatblygwr arall, er enghraifft, llyfrgelloedd trydydd parti na ellir gwarantu eu diogelwch.
  • Cyfyngiad ar y llyfrgell safonol y mae swyddogaethau a allai greu problemau diogelwch wedi'u dileu ohoni. Er enghraifft, y llyfrgelloedd “io” (cyrchu ffeiliau a phrosesau lansio), “pecyn” (cyrchu ffeiliau a llwytho modiwlau), “os” (swyddogaethau ar gyfer cyrchu ffeiliau a newid newidynnau amgylchedd), “debug” (gweithrediad anniogel gyda chof) , “dofile” a “loadfile” (FS mynediad).
  • Darparu offer ar gyfer dadansoddi cod statig, nodi gwallau (linter) a gwirio'r defnydd cywir o fathau.
  • Perchennog parser perfformiad uchel, dehonglydd cod byte a chasglydd. Nid yw Luau yn cefnogi llunio JIT eto, ond honnir bod dehonglydd Luau yn eithaf tebyg o ran perfformiad i LuaJIT mewn rhai sefyllfaoedd.

Ffynhonnell: opennet.ru

Ychwanegu sylw