El lenguaje de programación Lua 5.5 ya está disponible

Después de cinco años de desarrollo, se presenta la versión Lua 5.5, un lenguaje de programación de scripting rápido y compacto que se ha popularizado como lenguaje embebido para la configuración y para escribir extensiones. El código del intérprete de Lua está escrito en C y se distribuye bajo la licencia MIT.

Lua combina una sintaxis procedural sencilla con la capacidad de describir datos mediante el uso de arrays asociativos y una semántica del lenguaje extensible. Lua utiliza tipado dinámico y las construcciones del lenguaje se convierten en bytecode que se ejecuta sobre una máquina virtual de registros con recolección automática de basura. El intérprete se presenta como una biblioteca que se puede integrar en proyectos en lenguajes C y C++.

Novedades principales:

  • Para la mayor parte de las operaciones de recolección de basura, se utiliza un modo incremental, donde el ciclo de recolección de basura se divide en pasos separados que alternan con la ejecución del programa, lo que permite eliminar largas pausas en la ejecución de aplicaciones con muchos objetos en memoria.
  • Se ha propuesto una implementación compacta de arrays que requiere un 60% menos de memoria para arrays con datos homogéneos (el ahorro se logra gracias a que la información sobre el tipo se conserva no para cada elemento, sino para un grupo de elementos).
  • Se ha añadido la capacidad de declarar explícitamente variables globales en cualquier bloque de código utilizando la palabra clave "global". Al incluir expresiones con la palabra clave "global" en un bloque de código, todas las variables deben ser declaradas explícitamente. Si falta la declaración "global", se aplica implícitamente la expresión "global *", que conserva el comportamiento anterior y todas las variables se interpretan como globales. También se ha agregado la expresión "global<const> *" que hace que todas las variables globales no definidas sean accesibles en modo de solo lectura. X = 1 — Ok, X es una variable global, comportamiento anterior por defecto. do global Y — declaración de la variable Y como global, todas las demás variables en el bloque deben ser declaradas explícitamente Y = 1 — Ok, la variable Y fue definida anteriormente X = 1 — Error, la variable X no está definida end X = 2 — Ok, fuera del bloque global se aplica el comportamiento anterior
  • Las variables de control especificadas en los bucles «for» ahora son solo de lectura y no se pueden modificar dentro del cuerpo del bucle. Por ejemplo, la variable i, declarada en el bucle «for i = 1, 5 do», no puede ser modificada en el cuerpo del bucle.
  • Al imprimir números de coma flotante a través de la función print, ahora se muestra un número suficiente de dígitos para una conversión inversa correcta de la cadena a la representación original.
  • Se ha incrementado el número permitido de niveles de anidamiento de constructores de tablas.
  • Se ha añadido la función table.create(nseq, nrec) para agregar una tabla vacía y preasignar memoria para el número indicado de elementos.
  • En la función utf8.offset se garantiza el retorno no solo del desplazamiento en bytes al comienzo del carácter, sino también la posición del final del carácter.
  • Se ha añadido soporte para crear cadenas externas, que se ubican en memoria no gestionada por el recolector de basura de Lua.
  • Se ha añadido la función luaL_openselectedlibs para cargar la biblioteca seleccionada, así como la función luaL_makeseed, que crea una semilla para la función lua_newstate.
  • En lua.c se garantiza la carga dinámica de la biblioteca ‘readline’ si está disponible (si la biblioteca está en el sistema, se carga y se hacen disponibles las funciones de edición de cadenas).
  • Se ha incluido una optimización para ahorrar memoria al cargar bytecode precompilado: Lua ahora puede reutilizar memoria en algunas estructuras internas sin crear duplicados al cargar bytecode duplicado.
  • Se ha garantizado la reutilización de todas las cadenas en las operaciones «dump» y «undump».
  • En los búferes auxiliares se asegura la reutilización de búferes (sin copia en un nuevo búfer) al crear la cadena final.

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster