Etter fem Ärs utvikling er Lua 5.5 nÄ tilgjengelig, et raskt og kompakt skriptsprÄk som har fÄtt bredt fotfeste som et innebygd sprÄk for konfigurasjonsbeskrivelser og for Ä skrive utvidelser. Koden til Lua-oversetteren er skrevet i C og distribueres under MIT-lisensen.
Lua kombinerer et enkelt prosedyresyntaks med muligheter for databeskrivelse gjennom bruken av assosiative lister og utvidbar semantikk. Lua bruker dynamisk typing, og sprÄkstrukturer konverteres til bytekode som kjÞres over en registerbasert virtuell maskin med automatisk sÞppeloppsamling. Oversetteren er utformet som et bibliotek som kan integreres i prosjekter pÄ C og C++.
Hovudnyhende:
- For det meste av sĂžppeloppsamlingens operasjoner brukes en inkrementell modus, der sĂžppeloppsamlingssyklusen deles opp i separate trinn som veksler med programkjĂžring, noe som reduserer lange pauser i utfĂžrelsen av applikasjoner med mange objekter i minnet.
- Det er foreslÄtt en kompakt implementering av lister som krever 60 % mindre minne for lister med ensartede data (besparelsen oppnÄs ved at typeinformasjonen lagres ikke for hvert enkelt element, men for grupper av elementer).
- Det er lagt til muligheten for eksplisitt deklarering av globale variabler i alle kodeblokker ved hjelp av nĂžkkelordet «global». NĂ„r uttrykk med nĂžkkelordet «global» angis i en kodeblokk, mĂ„ alle variabler nĂždvendigvis deklareres eksplisitt. Hvis deklarasjonen «global» mangler, vil uttrykket «global *» bli implisitt satt, som opprettholder den gamle atferden der alle variabler betraktes som globale. Det er ogsĂ„ lagt til uttrykket «global<const> *» der alle implisitt definerte globale variabler blir tilgjengelige i lesemodus. X = 1 â Ok, X â global variabel, gammel atferd som standard. do global Y â deklarering av variabel Y som global, alle andre variabler i blokken mĂ„ deklareres eksplisitt Y = 1 â Ok, variabel Y er tidligere definert X = 1 â Feil, variabel X er ikke definert end X = 2 â Ok, utenfor globalblokken opprettholdes den gamle atferden.
- Kontrollvariablene som er angitt i «for»-slÞyfer er nÄ bare tilgjengelige for lesing og kan ikke endres i slÞyfens kropp. For eksempel kan variabelen i, erklÊrt i slÞyfen «for i = 1, 5 do», ikke endres i slÞyfens kropp.
- NÄr flyttall skrives ut med funksjonen print, vises nÄ et tilstrekkelig antall sifre for korrekt omvendt konvertering fra streng til opprinnelig representasjon.
- Det tillatte antallet nivÄer med innkapsling av tabellkonstruktÞrer er Þkt.
- Funksjonen table.create(nseq, nrec) er lagt til for Ă„ legge til en tom tabell og forbeholde minne for det angitte antallet elementer.
- I funksjonen utf8.offset returneres nÄ ikke bare byteoffsetet til begynnelsen av tegnet, men ogsÄ posisjonen til slutten av tegnet.
- StĂžtte for Ă„ opprette eksterne strenger som plasseres i minne som ikke styres av Lua's sĂžppeloppsamler, er lagt til.
- Funksjonen luaL_openselectedlibs for Ă„ laste den valgte biblioteken er lagt til, samt funksjonen luaL_makeseed, som genererer en seed for lua_newstate-funksjonen.
- I lua.c er dynamisk lasting av âreadlineâ-biblioteket implementert nĂ„r det er tilgjengelig (hvis biblioteket finnes i systemet, lastes det inn og gjĂžr redigeringsfunksjoner tilgjengelige).
- Optimalisering for minnebesparelse ved lasting av forhĂ„ndskomponert bytekode er aktivert â Lua kan nĂ„ gjenbruke minnet i visse interne strukturer uten Ă„ opprette duplikater ved innlasting av duplisert bytekode.
- Alle strenger gjenbrukes i «dump»- og «undump»-operasjoner.
- I hjelpebufferne er gjenbruk av buffere (uten Ă„ kopiere til et nytt buffer) sikret ved oppretting av den endelige strengen.
Kilde: opennet.ru
