Se ha lanzado una nueva versión del compilador para el lenguaje de programación Vala 0.50.4. También se han actualizado la rama de soporte a largo plazo (LTS) Vala 0.48.14 (empaquetada para Ubuntu 18.04) y la rama experimental Vala 0.51.3.
El lenguaje Vala es un lenguaje de programación orientado a objetos que proporciona una sintaxis similar a C# o Java. Gobject (Glib Object System) se utiliza como modelo de objetos. La gestión de la memoria se lleva a cabo por propiedad (enlaces propios/sin propietario) o mediante ARC (sustitución de destructores y disminución de contadores de referencias de objetos en la etapa de compilación).
El lenguaje tiene soporte para introspección, funciones lambda, interfaces, delegados y cierres, señales y ranuras, excepciones, propiedades, tipos no nulos, inferencia de tipos para variables locales. El kit viene con una gran cantidad de enlaces a bibliotecas en C (vala-girs, vala-extra-vapis). Los programas Vala se traducen a representación C y luego se compilan mediante un compilador estándar de C. Es posible ejecutar programas en modo script.
Lista de cambios:
- Se agregó soporte adicional para la palabra clave params para constructores class Foo{ public Foo(params string[] args){ foreach (var arg in args) print(arg); } }
- codegen:
- Soporte mejorado para constructores de estructuras SimpleType (por ejemplo, se usa para vincular typedef uint32_t people_inside; de C) [SimpleType] [CCode (cname = "people_inside")] public struct PeopleInside : uint32 {}
- Manejo mejorado del atributo "NoWrapper".
- CCode.type_cname y get_ccode_type_name() están permitidos para las clases.
- G_TYPE_INSTANCE_GET_CLASS/INTERFACE siempre se utiliza para símbolos externos.
- Se usó g_boxed_free en free-wrapper para asignar GLib.Value en el montón.
- Se corrigió una pérdida de memoria durante el unboxing implícito de GLib.Value (un contenedor universal de cualquier tipo de valor).
- Se corrigió una pérdida de memoria al mover una estructura asignada por montón a una pila.
- Se garantiza la herencia del destructor de la estructura principal.
- Se ha mejorado la recuperación correcta de symbol_reference de expresiones de conversión anidadas.
- Se eliminaron todas las apariciones anidadas de CCodeCastExpression.
- Se dejó de llamar incorrectamente al controlador de señales predeterminado.
- Conectado "string.h" para strcmp() (perfil POSIX, modo en el que Vala genera código usando solo la biblioteca C estándar).
- Vale:
- Detección mejorada de archivos fuente de paquetes duplicados.
- Los campos/propiedades de GtkChild deben declararse sin propietario.
- Está prohibido reasignar el campo/propiedad GtkChild.
- Se ha aplicado una condición más estricta a lambda al delegar una tarea.
- Está prohibido utilizar estructuras SimpleType de un solo uso.
- El unboxing de GLib.Value garantiza que se devuelva el valor sin propietario.
- Está prohibido convertir GLib.Value a una estructura que acepta valores NULL/tipo simple.
- Se agregó verificación de argumentos de tipo en condiciones previas de tipos base/clase/interfaz.
- Está prohibido capturar parámetros/variables de va_list.
- Los genéricos que contienen un puntero a una estructura deben convertirse al tipo correcto cuando se accede a ellos para evitar C UB.
- Se implementó la inferencia de tipos para "en" dentro de la enumeración.
- Comprobación de contexto mejorada para asignaciones al campo grabable.
- Se incluye "stdlib.h" para Enum.to_string() (POSIX).
- Se establece la referencia_fuente correcta para las variables implícitas "esto" y "resultado".
- Se proporcionó un mensaje de error para un operando interno no válido de expresiones unarias.
- Сodewriter: Dejé de agregar el ";" final después del cuerpo WithStatement.
- Girparser:
- Se proporciona el procesamiento de un delegado anónimo que no está respaldado por un método o señal virtual.
- Metadatos "delegate_target" aplicados para métodos y parámetros
- Aplicar metadatos "destroy_notify_cname" a los campos
- Aplicar metadatos "type_get_function" para clases e interfaces
- Establezca CCode.type_cname para las clases si no es el valor predeterminado.
- girwriter: Garantiza que se escriban los elementos de los parámetros de la instancia.
- girwriter: Salida de controlador de señal predeterminada implementada.
- libvaladoc/html: Se eliminó la clasificación de los campos de estructura para dejar su orden original al generar documentación html valadoc.org
- libvaladoc: Asegúrese de que los valores para Api.Class.is_compact se recuperen correctamente
- libvaladoc: Se agregó un contenedor para la biblioteca Graphviz "agingge"
- Fijaciones:
- Correcciones menores al generar enlaces: cairo, gobject-2.0, pango, goocanvas-2.0, curses, alsa, bzlib, sqlite3, libgvc, posix, gstreamer-1.0, gdk-3.0, gdk-x11-3.0, gtk+-3.0, gtk4, fusible, libxml-2.0
- gdk-pixbuf-2.0: Reparar Pixbuf.save_to_streamv_async()
- gio-2.0: Corrección de enlace PollableOutputStream.write*_nonblocking()
- gio-2.0,gtk+-3.0,gtk4: Se descartan los atributos explícitos de tipo c de los parámetros va_list
- gio-2.0: Falta el invocador seleccionado para algunos métodos AppInfo/File.*()
- glib-2.0: Se agregaron métodos convenientes GLib.[S]List.is_empty() para no nulos
- glib-2.0: Vinculación de la función afirmar_cmp* [#395]
- glib-2.0: Tipo de campo OptionEntry.flags mejorado
- glib-2.0: PtrArray ahora es una subclase de GenericArray
- gstreamer-1.0: CCode.type_id del MiniObject está configurado en G_TYPE_BOXED [#1133]
- gtk+-2.0,javascriptcoregtk-4.0: Uso corregido del atributo CCode.type_cname
- gtk+-3.0,gtk4: Se corrigieron algunos valores y parámetros de retorno delegado
- gtk4: Actualizado a la versión 4.0.2.
Fuente: opennet.ru