Lanzamiento del lenguaje de programación Lua 5.4

Después de cinco años de desarrollo esta disponible relizar Lua 5.4, un lenguaje de programación de scripts rápido y compacto que se usa ampliamente como lenguaje integrado (por ejemplo, para definir configuraciones o escribir extensiones). El código del intérprete de Lua está escrito en C y distribuido por bajo la licencia del MIT.

Lua combina una sintaxis procedimental simple con potentes capacidades de descripción de datos mediante el uso de matrices asociativas y una semántica extensible del lenguaje. Lua utiliza escritura dinámica, convirtiendo construcciones de lenguaje en código de bytes que se ejecuta sobre una máquina virtual basada en registros con recolección automática de basura. El intérprete en sí está diseñado como una biblioteca que se puede integrar fácilmente en proyectos en los lenguajes C y C++.

El principal innovaciones:

  • Se implementó un nuevo modo de operación del recolector de basura - "generacional“, que complementó el modo de recolección de basura incremental disponible anteriormente. El nuevo modo implica ejecutar un rastreo abreviado con mayor frecuencia, cubriendo sólo los objetos creados recientemente. Se realiza un recorrido completo de todos los objetos solo si, después de un breve recorrido, no fue posible lograr el consumo de memoria deseado. Este enfoque le permite lograr un mayor rendimiento y reducir el consumo de memoria al almacenar una gran cantidad de objetos que viven por poco tiempo.
  • Se agregó la capacidad de definir variables constantes definidas con el atributo "const". Estas variables sólo se pueden asignar una vez y, una vez inicializadas, no se pueden cambiar.
  • Se agregó soporte para variables "estar cerrado", que se asignan mediante el atributo "close" y se asemejan a variables locales constantes (con el atributo const), diferenciándose de ellas en que el valor se cierra (se llama al método "__close") cada vez que se sale del alcance, por ejemplo, después de la finalización normal del bloque, realice la transición usando break/goto/return o exit cuando se produzca un error.
  • Tipo de "userdata“, que brinda la capacidad de almacenar cualquier dato C en variables Lua (representa un bloque de datos en la memoria o contiene un puntero C), ahora puede contener varios valores (tener varias metatablas).
  • Se presenta una nueva implementación de la función para generar números pseudoaleatorios: math.random.
  • Se agregó un sistema de advertencias que se determinan mediante la expresión advertir y, a diferencia de los errores, no afectan la ejecución posterior del programa.
  • Se agregó información de depuración sobre argumentos de funciones y valores de retorno.
  • Se ha propuesto una nueva semántica para enumerar números enteros en bucles "para". El número de iteraciones se calcula antes de que comience el bucle, lo que evita el desbordamiento de variables y los bucles. Si el valor inicial es mayor que el valor límite, se muestra un error.
  • En función 'cadena.gmatch' agregó un nuevo argumento opcional 'init', que determina en qué posición iniciar la búsqueda (por defecto, a partir de 1 carácter).
  • Nuevas funciones agregadas 'lua_resetthread' (restablece el hilo, borra toda la pila de llamadas y cierra todas las variables "por cerrar") y 'corrutina.cerrar' (cierra la corrutina y todas las variables asociadas "por cerrar").
  • Las funciones para convertir cadenas en números se han trasladado a la biblioteca "cadenas".
  • Las llamadas a la función de asignación de memoria ahora pueden fallar si se reduce el tamaño del bloque de memoria.
  • En función 'cadena.formato' se agregó soporte para el nuevo especificador de formato '%p' (puntero devuelto por lua_topointer).
  • La biblioteca utf8 proporciona soporte. códigos de caracteres con números hasta 2^31.

Fuente: opennet.ru

Añadir un comentario