Uma nova versão do compilador para a linguagem de programação Vala 0.50.4 foi lançada. O branch Vala 0.48.14 de suporte de longo prazo (LTS) (empacotado para Ubuntu 18.04) e o branch experimental Vala 0.51.3 também foram atualizados.
A linguagem Vala é uma linguagem de programação orientada a objetos que fornece uma sintaxe semelhante a C# ou Java. Gobject (Glib Object System) é usado como modelo de objeto. O gerenciamento de memória é realizado por propriedade (links próprios/sem propriedade) ou usando ARC (substituição de destruidores e decrementos de contadores de referência de objetos na fase de compilação).
A linguagem tem suporte para introspecção, funções lambda, interfaces, delegados e fechamentos, sinais e slots, exceções, propriedades, tipos não nulos, inferência de tipos para variáveis locais. O kit vem com um grande número de ligações para bibliotecas em C (vala-girs, vala-extra-vapis). Os programas Vala são traduzidos para representação C e então compilados por um compilador C padrão. É possível executar programas em modo script.
Lista de alterações:
- Adicionado suporte adicional para a palavra-chave params para construtores class Foo{ public Foo(params string[] args){ foreach (var arg in args) print(arg); } }
- codegen:
- Suporte aprimorado para construtores de estrutura SimpleType (por exemplo, usado para vincular typedef uint32_t people_inside; de C) [SimpleType] [CCode (cname = "people_inside")] public struct PeopleInside: uint32 {}
- Tratamento aprimorado do atributo “NoWrapper”.
- CCode.type_cname e get_ccode_type_name() são permitidos para classes.
- G_TYPE_INSTANCE_GET_CLASS/INTERFACE é sempre usado para símbolos externos.
- Usado g_boxed_free no free-wrapper para alocar GLib.Value no heap.
- Corrigido um vazamento de memória durante o unboxing implícito de GLib.Value (um contêiner universal de qualquer tipo de valor).
- Corrigido um vazamento de memória ao mover uma estrutura alocada em heap para uma pilha.
- A herança do destruidor da estrutura pai é garantida
- A recuperação correta de symbol_reference de expressões convertidas aninhadas foi melhorada.
- Todas as ocorrências aninhadas de CCodeCastExpression foram removidas.
- Parou de chamar incorretamente o manipulador de sinal padrão.
- Conectado "string.h" para strcmp() (perfil POSIX, modo em que Vala gera código usando apenas a biblioteca C padrão).
- Vala:
- Detecção aprimorada de arquivos de origem de pacotes duplicados.
- Os campos/propriedades GtkChild devem ser declarados sem propriedade.
- A reatribuição do campo/propriedade GtkChild é proibida.
- Uma condição mais rigorosa foi aplicada ao lambda ao delegar uma atribuição.
- É proibido usar estruturas SimpleType de uso único.
- O unboxing de GLib.Value garante que o valor sem propriedade seja retornado.
- É proibido converter GLib.Value para um tipo struct/simple anulável.
- Adicionada verificação de argumento de tipo em pré-condições de tipos/classes/interface base.
- A captura de parâmetros/variáveis va_list é proibida.
- Os genéricos que contêm um ponteiro para uma estrutura devem ser convertidos para o tipo correto quando acessados para evitar C UB.
- Inferência de tipo implementada para "in" dentro de enum.
- Verificação de contexto aprimorada para atribuições ao campo gravável.
- Incluído "stdlib.h" para Enum.to_string() (POSIX).
- A source_reference correta está definida para as variáveis implícitas "this" e "result"
- Foi fornecida uma mensagem de erro para um operando interno inválido de expressões unárias.
- Сodewriter: Parou de adicionar o ";" final após o corpo WithStatement.
- Gerparser:
- É fornecido o processamento de um delegado anônimo não apoiado por um método ou sinal virtual.
- Metadados "delegate_target" aplicados para métodos e parâmetros
- Aplicar metadados "destroy_notify_cname" aos campos
- Aplicar metadados "type_get_function" para classes e interfaces
- Defina CCode.type_cname para classes, se não for o padrão.
- girwriter: garante que os elementos dos parâmetros da instância sejam gravados.
- girwriter: Implementada saída do manipulador de sinal padrão.
- libvaladoc/html: Removida a classificação dos campos da estrutura para deixar sua ordem original ao gerar a documentação html valadoc.org
- libvaladoc: Certifique-se de que os valores para Api.Class.is_compact sejam recuperados corretamente
- libvaladoc: Adicionado wrapper para a biblioteca graphviz "agedge"
- Ligações:
- Pequenas correções ao gerar ligações: cairo, gobject-2.0, pango, goocanvas-2.0, maldições, alsa, bzlib, sqlite3, libgvc, posix, gstreamer-1.0, gdk-3.0, gdk-x11-3.0, gtk+-3.0, gtk4, fusível, libxml-2.0
- gdk-pixbuf-2.0: Corrigir Pixbuf.save_to_streamv_async()
- gio-2.0: Correção de ligação PollableOutputStream.write*_nonblocking()
- gio-2.0,gtk+-3.0,gtk4: Atributos explícitos do tipo c dos parâmetros va_list são descartados
- gio-2.0: Invocador ausente selecionado para alguns métodos AppInfo/File.*()
- glib-2.0: Adicionados métodos de conveniência GLib.[S]List.is_empty() para não-nulos
- glib-2.0: Vinculando a função assert_cmp* [#395]
- glib-2.0: Tipo de campo OptionEntry.flags aprimorado
- glib-2.0: PtrArray agora é uma subclasse de GenericArray
- gstreamer-1.0: CCode.type_id do MiniObject está definido como G_TYPE_BOXED [#1133]
- gtk+-2.0,javascriptcoregtk-4.0: Corrigido o uso do atributo CCode.type_cname
- gtk+-3.0,gtk4: Corrigidos alguns valores e parâmetros de retorno de delegado
- gtk4: Atualizado para a versão 4.0.2.
Fonte: opennet.ru