Vrijgave van de programmeertaal Lua 5.4

Na vijf jaar ontwikkeling is beschikbaar релиз Lua 5.4, een snelle en compacte scriptprogrammeertaal die veel wordt gebruikt als ingebedde taal (bijvoorbeeld voor het definiëren van configuraties of het schrijven van extensies). De Lua-interpretercode is geschreven in C en gedistribueerd door onder de MIT-licentie.

Lua combineert een eenvoudige procedurele syntaxis met krachtige gegevensbeschrijvingsmogelijkheden door het gebruik van associatieve arrays en uitbreidbare semantiek van de taal. Lua maakt gebruik van dynamisch typen, waarbij taalconstructies worden omgezet in bytecode die draait op een op registers gebaseerde virtuele machine met automatische garbagecollection. De tolk zelf is ontworpen als een bibliotheek die eenvoudig kan worden geïntegreerd in projecten in de talen C en C++.

De belangrijkste innovaties:

  • Er is een nieuwe werkingsmodus van de afvalverzamelaar geïmplementeerd - “generaties“, die een aanvulling was op de eerder beschikbare incrementele garbage collection-modus. De nieuwe modus houdt in dat er vaker een verkorte crawl wordt uitgevoerd, waarbij alleen recentelijk gemaakte objecten worden bestreken. Een volledige doorloop van alle objecten wordt alleen uitgevoerd als het na een korte doorloop niet mogelijk was om het gewenste geheugengebruik te bereiken. Met deze aanpak kunt u hogere prestaties bereiken en het geheugengebruik verminderen wanneer u een groot aantal objecten opslaat die een korte tijd meegaan.
  • De mogelijkheid toegevoegd om constante variabelen te definiëren die zijn gedefinieerd met het attribuut “const”. Dergelijke variabelen kunnen slechts één keer worden toegewezen en kunnen, eenmaal geïnitialiseerd, niet meer worden gewijzigd.
  • Ondersteuning toegevoegd voor variabelen "gesloten zijn", die worden toegewezen met behulp van het attribuut "close" en lijken op constante lokale variabelen (met het attribuut const), die daarvan verschillen doordat de waarde wordt gesloten (de methode "__close" wordt aangeroepen) wanneer deze het bereik verlaat, bijvoorbeeld na de normale voltooiing van het blok, overgang met behulp van break/goto/return of exit als er een fout optreedt.
  • Typ "gebruikersgegevens“, dat de mogelijkheid biedt om alle C-gegevens in Lua-variabelen op te slaan (vertegenwoordigt een gegevensblok in het geheugen of bevat een C-aanwijzer), kan nu meerdere waarden bevatten (heeft verschillende metatabelen).
  • Er wordt een nieuwe implementatie van de functie voor het genereren van pseudowillekeurige getallen gepresenteerd: math.random.
  • Een systeem van waarschuwingen toegevoegd die worden bepaald met behulp van de expressie waarschuwen en hebben, in tegenstelling tot fouten, geen invloed op de verdere uitvoering van het programma.
  • Foutopsporingsinformatie toegevoegd over functieargumenten en retourwaarden.
  • Er is een nieuwe semantiek voorgesteld voor het opsommen van gehele getallen in lussen "For". Het aantal iteraties wordt berekend voordat de lus begint, waardoor variabele overflow en looping worden vermeden. Als de beginwaarde groter is dan de grenswaarde, wordt er een fout weergegeven.
  • In functie 'string.gmatch‘ heeft een nieuw optioneel argument ‘init’ toegevoegd, dat bepaalt op welke positie de zoekopdracht moet starten (standaard vanaf 1 teken).
  • Nieuwe functies toegevoegd ‘lua_resetthread‘ (reset de thread, wist de volledige call-stack en sluit alle ‘to-be-closed’-variabelen) en ‘coroutine.close' (sluit de coroutine en alle bijbehorende 'te sluiten'-variabelen).
  • Functies voor het converteren van strings naar getallen zijn verplaatst naar de "string" -bibliotheek.
  • Aanroepen van de geheugentoewijzingsfunctie kunnen nu mislukken als de geheugenblokgrootte wordt verkleind.
  • In functie 'string.formaat‘ ondersteuning toegevoegd voor de nieuwe formaatspecificatie ‘%p’ (pointer geretourneerd door lua_topointer).
  • De utf8-bibliotheek biedt ondersteuning karaktercodes met getallen tot 2^31.

Bron: opennet.ru

Voeg een reactie