Lua 5.4

Después de dos años de desarrollo, el 29 de junio se lanzó de manera silenciosa y desapercibida una nueva versión del lenguaje de programación Lua — 5.4.

Lua es un lenguaje de programación interpretado y sencillo que se integra fácilmente en aplicaciones. Gracias a estas características, Lua se usa ampliamente como un lenguaje de extensión o descripción de configuraciones de programas (en particular, videojuegos). Lua se distribuye bajo la licencia MIT.

La versión anterior (5.3.5) fue lanzada el 10 de julio de 2018.

Principales cambios en la nueva versión

  • nuevo recolector de basura basado en generaciones (generational). En la función collectgarbage, los parámetros setpause y setstepmul han sido declarados obsoletos, en su lugar se recomienda usar el parámetro incremental;

  • nueva función para emitir advertencias warn con la posibilidad de desactivar su visualización;

  • nueva implementación de math.random utiliza el algoritmo xoshiro256** en lugar del proporcionado por libc y inicializa el generador con un número aleatorio;

  • constantes (constant variables);

  • variables 'cerradas' (to-be-closed) — constantes locales para las cuales se ejecuta el método __close al salir del ámbito;

  • nueva función lua_resetthread — limpia la pila y cierra todas las variables 'cerradas';

  • nueva función coroutine.close — cierra la co-rutina especificada y todas sus variables 'cerradas';

  • los datos de usuario (userdata) pueden contener un conjunto de valores accesibles por índice. Se han introducido nuevas funciones para trabajar con ellos: lua_newuserdatauv, lua_setiuservalue y lua_getiuservalue;

  • está disponible información de depuración sobre parámetros y valores de retorno de funciones;

  • si se utiliza un índice entero en el bucle for y hay un desbordamiento, el bucle se interrumpe;

  • a la función string.gmatch se le ha añadido un argumento opcional, que indica un desplazamiento desde el principio de la cadena para buscar coincidencias;

  • las funciones de conversión implícita de cadenas a números se han trasladado a la biblioteca de cadenas, y su comportamiento ha cambiado. Por ejemplo, el resultado de la operación "1" + "2" ahora es un entero, no un número de punto flotante;

  • en la función de asignación de memoria, se permite la ocurrencia de un error al reducir el bloque de memoria;

  • nuevo especificador de formato en la función string.format — %p (para punteros);

  • la biblioteca utf8 acepta códigos de caracteres hasta 2³¹ (si se especifica un indicador especial, de lo contrario, solo se permiten códigos hasta 0x10FFFF y no se permiten sustitutos);

  • Las constantes enteras que exceden el rango de valores se convierten en números de punto flotante (anteriormente ocurría un truncamiento de bits);

  • El metamétodo __lt ya no se utiliza para emular el metamétodo __le, si es necesario, el metamétodo __le debe definirse explícitamente;

  • No se puede crear una etiqueta para el operador goto si en el ámbito actual ya existe una etiqueta con el mismo nombre (incluso si se definió en un ámbito externo);

  • El metamétodo __gc puede no ser solo una función. Si la llamada al método falla, se mostrará una advertencia;

  • La función print no llama a tostring para cada argumento, sino que utiliza sus conversiones internas;

  • La función io.lines devuelve un conjunto de cuatro valores en lugar de uno, para emular el antiguo comportamiento, coloque la llamada entre paréntesis si la utiliza como parámetro al llamar a otra función.

Fuente: linux.org.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