Lua 5.4

Después de dos años de desarrollo, el 29 de junio se lanzó silenciosa e imperceptiblemente una nueva versión del lenguaje de programación Lua, la 5.4.

Lua es un lenguaje de programación simple e interpretado que se puede integrar fácilmente en las aplicaciones. Debido a estas cualidades, Lua se usa ampliamente como lenguaje para extender o describir la configuración de programas (en particular, juegos de computadora). Lua se distribuirá bajo la licencia MIT.

La versión anterior (5.3.5) se lanzó el 10 de julio de 2018.

Principales cambios en la nueva versión

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

  • una nueva función para emitir advertencias de advertencia con la capacidad de desactivar su visualización;

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

  • variables constantes;

  • Las variables "a cerrar" son constantes locales para las que se ejecuta el método __close cuando se sale del alcance;

  • nueva función lua_resetthread: borra la pila y cierra todas las variables "cerradas";

  • nueva función coroutine.close - cierra la coroutine especificada y todas sus variables "cerrables";

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

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

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

  • agregó un argumento opcional a la función string.gmatch que especifica el desplazamiento desde el principio de la cadena para buscar coincidencias;

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

  • en la función de asignación de memoria, puede ocurrir un error cuando se reduce un bloque de memoria;

  • nuevo carácter de formato en la función string.format - %p (para punteros);

  • la biblioteca utf8 acepta códigos de caracteres de hasta 2³¹ (cuando se especifica una bandera especial, sin ella solo se permiten códigos de hasta 0x10FFFF y no se permiten sustitutos);

  • las constantes enteras que están fuera del rango de valores se convierten en números flotantes (anteriormente se producía un recorte de bits);

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

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

  • el metamétodo __gc puede ser más que una simple función. Si falla el intento de llamar al método, se mostrará una advertencia;

  • la función de impresión no llama a tostring para cada argumento, pero usa sus propias transformaciones internas;

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

Fuente: linux.org.ru

Añadir un comentario