Actualización do compilador da linguaxe de programación Vala 0.50.4

Lanzouse unha nova versión do compilador para a linguaxe de programación Vala 0.50.4. Tamén se actualizou a rama de soporte a longo prazo (LTS) Vala 0.48.14 (empaquetada para Ubuntu 18.04) e a rama experimental Vala 0.51.3.

A linguaxe Vala é unha linguaxe de programación orientada a obxectos que proporciona unha sintaxe similar a C# ou Java. Gobject (Glib Object System) úsase como modelo de obxectos. A xestión da memoria realízase por propiedade (enlaces de propiedade/non propietario) ou mediante ARC (substitución de destrutores e decrementos de contadores de referencia de obxectos na fase de compilación).

A linguaxe ten soporte para introspección, funcións lambda, interfaces, delegados e peches, sinais e slots, excepcións, propiedades, tipos non nulos, inferencia de tipos para variables locais. O kit inclúe unha gran cantidade de enlaces a bibliotecas en C (vala-girs, vala-extra-vapis). Os programas Vala son traducidos á representación C e despois compilados por un compilador estándar C. É posible executar programas en modo script.

Lista de cambios:

  • Engadido soporte adicional para a palabra clave params para constructores clase Foo{ public Foo(params string[] args){ foreach (var arg en args) print(arg); } }
  • codexen:
    • Compatibilidade mellorada para construtores de estrutura SimpleType (por exemplo, usado para ligar typedef uint32_t people_inside; desde C) [SimpleType] [CCode (cname = "people_inside")] public struct PeopleInside : uint32 {}
    • Mellorado o manexo do atributo "NoWrapper".
    • CCode.type_cname e get_ccode_type_name() están permitidos para as clases.
    • G_TYPE_INSTANCE_GET_CLASS/INTERFACE úsase sempre para símbolos externos.
    • Usouse g_boxed_free en free-wrapper para asignar GLib.Value no montón.
    • Corrixiuse unha fuga de memoria durante o desembalaxe implícito de GLib.Value (un contedor universal de calquera tipo de valor).
    • Corrixiuse unha fuga de memoria ao mover unha estrutura asignada por montón a unha pila.
    • A herdanza do destrutor da estrutura pai está garantida
    • Mellorouse a recuperación correcta de symbol_reference das expresións de emisión aniñadas.
    • Elimináronse todas as ocorrencias aniñadas de CCodeCastExpression.
    • Deixou de chamar incorrectamente ao controlador de sinal predeterminado.
    • "string.h" conectado para strcmp() (perfil POSIX, modo no que Vala xera código usando só a biblioteca C estándar).
  • Vala:
    • Mellora a detección de ficheiros fonte de paquetes duplicados.
    • Os campos/propiedades de GtkChild deben ser declarados non propietarios.
    • Prohíbese reasignar o campo/propiedade GtkChild.
    • Aplicouse unha condición máis estrita á lambda á hora de delegar unha tarefa.
    • Está prohibido utilizar estruturas SimpleType dun só uso.
    • GLib.Value unboxing garante que se devolve o valor non propietario.
    • Prohíbese enviar GLib.Value a un tipo de estrutura/simple anulable.
    • Engadiuse a comprobación de argumentos de tipo nas condicións previas de tipos/clase/interface base.
    • Está prohibido capturar parámetros/variables va_list.
    • Os xenéricos que conteñan un punteiro a unha estrutura deben emitirse ao tipo correcto cando se accede para evitar C UB.
    • Implementouse a inferencia de tipo para "in" dentro de enumeración.
    • Mellora a comprobación do contexto para as asignacións ao campo escribible.
    • Inclúese "stdlib.h" para Enum.to_string() (POSIX).
    • Establécese a fonte_reference correcta para as variables implícitas "this" e "result"
    • Forneceu unha mensaxe de erro para un operando interno non válido de expresións unarias.
  • Сodewriter: deixou de engadir o final ";" despois do corpo WithStatement.
  • Girparser:
    • Ofrécese o procesamento dun delegado anónimo non apoiado por un método ou sinal virtual.
    • Metadatos "delegate_target" aplicados para métodos e parámetros
    • Aplica metadatos "destroy_notify_cname" aos campos
    • Aplica metadatos "type_get_function" para clases e interfaces
    • Establece CCode.type_cname para as clases se non é o predeterminado.
  • girwriter: garante que os elementos do parámetro de instancia estean escritos.
  • girwriter: Implementouse a saída do controlador de sinal predeterminado.
  • libvaladoc/html: Eliminouse a clasificación dos campos de estrutura para deixar a súa orde orixinal ao xerar documentación html valadoc.org
  • libvaladoc: asegúrese de que os valores de Api.Class.is_compact se recuperen correctamente
  • libvaladoc: Engadiuse o envoltorio para a biblioteca graphviz "agedge".
  • Encadernacións:
    • Correccións menores ao xerar ligazóns: 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: corrixir Pixbuf.save_to_streamv_async()
    • gio-2.0: corrección de enlace PollableOutputStream.write*_nonblocking().
    • gio-2.0,gtk+-3.0,gtk4: descartanse os atributos explícitos de tipo c dos parámetros va_list
    • gio-2.0: invocador faltante seleccionado para algúns métodos AppInfo/File.*()
    • glib-2.0: Engadidos métodos de conveniencia GLib.[S]List.is_empty() para non nulos
    • glib-2.0: vincular a función assert_cmp* [#395]
    • glib-2.0: tipo de campo OptionEntry.flags mellorado
    • glib-2.0: PtrArray agora é unha subclase de GenericArray
    • gstreamer-1.0: CCode.type_id do MiniObject está definido como G_TYPE_BOXED [#1133]
    • gtk+-2.0,javascriptcoregtk-4.0: uso corrixido do atributo CCode.type_cname
    • gtk+-3.0,gtk4: corrixiron algúns valores e parámetros de retorno de delegados
    • gtk4: actualizado á versión 4.0.2.

Fonte: opennet.ru

Engadir un comentario