Vala é uma linguagem de programação que visa proporcionar uma experiência de programação moderna, garantindo compatibilidade com a linguagem de programação C, particularmente dentro do Sistema de Tipos GObject. Foi projetada para ser simples e eficiente, visando principalmente o desenvolvimento de aplicações para o ambiente de desktop GNOME. Com uma sintaxe que se assemelha a linguagens como C# ou Java, Vala suporta recursos como programação orientada a objetos, inferência de tipos e expressões lambda, enquanto compila para código C para desempenho nativo.
Vala foi criada por Jürg Billeter e apareceu pela primeira vez em 2006 como parte do projeto GNOME. O desenvolvimento foi amplamente motivado pela dificuldade e complexidade de usar C diretamente para o desenvolvimento de GObject. Jürg tinha como objetivo fornecer uma linguagem de nível mais alto que mantivesse o poder do C, ao mesmo tempo em que simplificava a sintaxe e aumentava a produtividade.
Vala foi inspirada por linguagens como C# e Java, particularmente em sua sintaxe e recursos como coleta de lixo e segurança de tipos. Ela se integra de forma próxima às bibliotecas GNOME e ao GObject, uma parte central do ecossistema GNOME, o que a torna adequada para a construção de aplicações dentro desse ambiente. Vala oferece uma ponte entre abstração de alto nível e desempenho de baixo nível, tornando-a distinta entre linguagens semelhantes.
Atualmente, Vala amadureceu significativamente e possui uma comunidade dedicada. É mantida ativamente, com atualizações regulares e suporte para as mais recentes tecnologias GNOME. Vala é cada vez mais utilizada no desenvolvimento de aplicações de desktop, particularmente aquelas destinadas a ambientes Linux, e continua a ganhar adoção devido à sua facilidade de uso e eficiência.
Vala suporta programação orientada a objetos (POO) através de classes, herança e interfaces. As classes podem ser definidas usando a palavra-chave class
.
class MinhaClasse {
public int meu_valor;
public MinhaClasse(int valor) {
meu_valor = valor;
}
}
Vala permite a inferência de tipos, o que significa que o desenvolvedor não precisa sempre especificar explicitamente o tipo de uma variável.
var saudacao = "Olá, Mundo!"; // Tipo String inferido
Vala suporta expressões lambda, que permitem a criação de funções anônimas.
void main() {
var soma = (int a, int b) => a + b;
print("%d\n", soma(3, 4));
}
Vala permite a definição de propriedades, fornecendo métodos getter e setter automaticamente.
class Ponto {
public int x { get; set; }
public int y { get; set; }
}
Vala suporta sinais, um recurso do sistema GObject que permite programação orientada a eventos.
signal meu_sinal(string mensagem);
Vala possui recursos de tratamento de erros embutidos, facilitando a gestão de exceções.
void funcao_riscada() throws Erro {
// código que pode lançar um erro
}
Vala impõe tipagem estática, o que ajuda a capturar erros em tempo de compilação.
int meu_numero = 42; // Deve ser um inteiro.
Vala suporta coleções e tipos genéricos para criar estruturas de dados flexíveis.
List<string> minha_lista = new List<string>();
Vala pode invocar diretamente bibliotecas e funções C, permitindo interação sem costura com bases de código C existentes.
public C.funcao(param1);
Vala permite o uso de anotações para metadados, o que é útil para interface com outros sistemas.
[CustomAnnotation]
class ClasseAnotada { }
O código Vala é compilado usando o compilador vala
, que traduz o código Vala em C. Em seguida, utiliza um compilador C padrão (como GCC) para compilar o código C resultante em um executável. O sistema de construção pode ser integrado com o Meson
, que é comumente usado no ecossistema GNOME.
Existem algumas Ambientes de Desenvolvimento Integrados (IDEs) que suportam o desenvolvimento em Vala:
Para construir um projeto Vala, crie um arquivo com a extensão .vala
, e então use a linha de comando:
vala --pkg gtk+-3.0 meu_programa.vala -o meu_programa
Este exemplo compila meu_programa.vala
, vinculando-o à biblioteca GTK+.
Vala é utilizada principalmente para construir aplicações de desktop dentro do ecossistema GNOME. É comum em projetos que requerem desenvolvimento orientado a GObject. Aplicações como editores de texto, reprodutores de mídia e utilitários de sistema foram desenvolvidas em Vala. Projetos notáveis incluem:
Quando comparada a linguagens semelhantes, Vala se destaca devido à sua integração com o sistema GObject e foco em aplicações GNOME.
Uma das ferramentas existentes para traduzir código Vala é o próprio compilador Vala para C, pois ele traduz efetivamente o código-fonte Vala para C. Se você está procurando ferramentas mais generalizadas, não há ferramentas de tradução de fonte para fonte amplamente adotadas especificamente para Vala, mas ferramentas como GObject Introspection podem ser utilizadas para criar bindings com outras linguagens.