Efter fem Ärs utveckling Àr Lua 5.5, ett snabbt och kompakt skriptsprÄk som har fÄtt stor spridning som inbyggt sprÄk för konfigurationsdefinition och för skrivande av tillÀgg, nu tillgÀngligt. Koden för Lua-tolkaren Àr skriven i C och distribueras under MIT-licensen.
Lua kombinerar en enkel procedurbaserad syntax med möjligheter att beskriva data genom anvÀndning av associativa arrayer och utbyggbar semantik. I Lua anvÀnds dynamisk typning och sprÄkliga konstruktioner omvandlas till bytekod som körs pÄ en registreringsbaserad virtuell maskin med automatisk skrÀpsamling. Tolken Àr utformad som ett bibliotek som kan integreras i projekt skrivna i C och C++.
Huvudsakliga nyheter:
- För majoriteten av skrÀpsamlingsoperationer anvÀnds ett inkrementellt lÀge dÀr skrÀpsamlingscykeln delas upp i separata steg som alternerar med körningen av programmet. Detta gör att man kan undvika lÄnga avbrott i körningen av applikationer med mÄnga objekt i minnet.
- En kompakt implementation av arrayer har föreslagits, vilket krÀver 60% mindre minne för arrayer med homogena data (besparingen uppnÄs genom att typinformation sparas för grupper av element snarare Àn för varje enskilt element).
- Möjligheten att tydligt deklarera globala variabler i alla kodblock med hjĂ€lp av nyckelordet 'global' har lagts till. NĂ€r uttryck med nyckelordet 'global' anges i ett kodblock mĂ„ste alla variabler deklareras tydligt. Om deklarationen 'global' saknas anvĂ€nds implicit uttrycket 'global *', vilket bibehĂ„ller det gamla beteendet och alla variabler betraktas som globala. Uttrycket 'global<const> *' har ocksĂ„ lagts till, vilket gör att alla implicit definierade globala variabler blir tillgĂ€ngliga i endast lĂ€sbart lĂ€ge. X = 1 â Ok, X â global variabel, gammalt beteende som standard. do global Y â deklaration av variabel Y som global, alla andra variabler i blocket mĂ„ste deklareras tydligt Y = 1 â Ok, variabel Y har tidigare definierats X = 1 â Fel, variabel X Ă€r inte definierad end X = 2 â Ok, utanför globalblock tillĂ€mpas gammalt beteende
- Variabler som anges i 'for'-loopar Àr nu bara skrivskyddade och kan inte Àndras inom loopens kropp. Till exempel kan variabeln i, som deklarerats i loopen 'for i = 1, 5 do', inte Àndras inom loopens kropp.
- NÀr flyttal skrivs ut med funktionen print anges nu tillrÀckligt med siffror för att möjliggöra korrekt omvandling frÄn strÀng till ursprungligt vÀrde.
- Det maximala antalet nivÄer för inbÀddade tabellkonstruktorer har ökat.
- Funktionen table.create(nseq, nrec) har lagts till för att skapa en tom tabell och förhandsallokera minne för det angivna antalet element.
- Funktionen utf8.offset returnerar nu inte bara byteoffsetet till början av tecknet, utan Àven positionen för slutet av tecknet.
- Stödet för att skapa externa strÀngar som lagras i minne icke-hanterat av Lua:s skrÀpinsamling har lagts till.
- Funktionen luaL_openselectedlibs har lagts till för att ladda den valda biblioteket, samt funktionen luaL_makeseed som skapar ett seed för funktionen lua_newstate.
- I lua.c har dynamisk laddning av biblioteket 'readline' sÀkerstÀllts om det finns (om biblioteket finns i systemet - laddas det och funktioner för strÀngredigering blir tillgÀngliga).
- Optimering för minnesbesparing vid laddning av förkompilerad bytekod har införts - Lua kan nu ÄteranvÀnda minnet i vissa interna strukturer utan att skapa dubbletter vid laddning av dubblettbytekod.
- à teranvÀndning av alla strÀngar vid operationer 'dump' och 'undump' har sÀkerstÀllts.
- à teranvÀndning av buffrar i hjÀlpbuffrar (utan kopiering till en ny buffer) har sÀkerstÀllts vid skapandet av den slutgiltiga strÀngen.
KĂ€lla: opennet.ru
