quarta-feira, 11 de março de 2009

Quem vai pra Vala?

live.gnome.org Dessa vez o pessoal do Gnome acertou a mão. Estou falando da linguagem de programação Vala.

Até hoje, quem queria programar em C# era obrigado a usar ou um sistema operacional problemático, ou uma ferramenta monstruosamente pesada e ineficiente.

Não mais.

O projeto Gnome lançou há algum tempo a linguagem Vala, fortemente baseada na sintaxe do C#, mas voltada para aplicações Gnome. Quem manja de C# ou maja de Java e já viu C# não terá dificuldade em lidar com Vala.

Instalação


Segundo a página do projeto, Vala foi feito para plataforma Gnome. Surgiu aí meu primeiro problema: uso Slackware e o Volkerding decidiu que Slackware não terá mais suporte a Gnome! Em sua total substituição, há o Xfce.

Simplesmente não há um pacote oficial de Gnome para Slackware – e os não-oficiais que já experimentei simplesmente detonaram o sistema todo.

Ainda mais: e quem usa outros SOs? Se não tiver Gnome já era?

Qual não foi minha agradável surpresa quando descobri que Vala compilou e instalou sem problemas no Slackware 12.2?! Sua dependência verdadeira é GTK+ 2.x, que você encontra em praticamente qualquer distribuição GNU/Linux ou BSD.

E Windows? Também tem!

Usando


Um «Olá Mundo» em Vala é bastante simples (tanto quanto Java, pelo menos):
using GLib;

public class HelloWorld : Object {
public static int main(string[] args) {
stdout.printf("Olá Mundo!\n");
return 0;
}
}


Ao contrário do .NET, não há código escondido do programador. Por exemplo:
using GLib;

public class HelloWorld : Object {

private Gtk.Window window;


public HelloWorld() {
window = new Gtk.Window(Gtk.WindowType.TOPLEVEL);
window.set_default_size(300, 200);
window.destroy += Gtk.main_quit;
window.add(new Gtk.Label("Olá Mundo!"));
}


public void show() {
window.show_all();
Gtk.main();
}


public static int main (string[] args) {
Gtk.init(ref args);
var sample = new HelloWorld();
sample.show();

return 0;
}
}


Antes que alguém reclame, peço desculpas pelos códigos mal orientados a objetos, mas não quis ter muito o que explicar.
[update]Ajeitei pra ninguém ficar me chateando.[/update]

Maturidade


Estranhamente a linguagem já está bastante madura na 0.5.7. Não encontrei quebras inusitadas nem erros bizarros.

[update 2009-04-01]
Encontrei uma quebra inusitada: Vala não lida bem com closures e escopo dinâmico. Ela se perde um pouco gerando alguns erros inesperados.

Outro erro inconveniente está na API com C: o bind de método destruidor não suporta parâmetros, o que pode ocorrer em alguns casos da GLib – lembre-se do que não há métodos destruidores reais em C, mas sim funções de desalocação.
[/update]


A única coisa que tenho a reclamar muito é a documentação precária, bem longe das documentações de API bem organizadas da SUN Microsystems e da Microsoft.

IDE


Por enquanto há uma IDE chamada Val(a)IDE – só que essa já desarmou na minha cara algumas vezes – e a promessa de uma extensão para o Eclipse – que ainda não apareceu na página da própria extensão.

Segundo a página official, há também extensões para MonoDevelop (Deus me livre!) e para GEdit.

**

É isso aí! Quando eu ganhar um pouco mais de intimidade com a linguagem, escrevo mais alguma coisa. Por enquanto foi só divulgação. Um tutorial meia-boca pode ser encontrado aqui.

[]'s
Cacilhas, La Batalema

9 comentários:

Cainã Costa disse...

Muito interessante a linguagem, parece que pelo menos dessa vez o povo do gnome acertou a mão :D

Já tô começando a estudar, vai ser interessante criar programas GTK mais rapidamente sem necessitar de bindings lentas e estranhas.

O esquema de sinais da linguagem também é muito legal :]

La Batalema disse...

Sim, Cainã!

Também gostei do esquema de sinais. É uma forma interessante e enxuta de registrar callbacks.

Só não lembro se em C# é assim também (a última vez que vi C# foi na faculdade).

[]'s
Cacilhas, La Batalema

Zappala disse...

Ótimo post Cacilhas, sempre é bom divulgar um projeto tão legal e promissor quanto esse.

Um ponto importante a se destacar sobre a linguagem Vala é que seu código fonte é compilado para C e após em binário nativo e ela usa objetos do sistema GLib2/GTK para a orientação a objetos. Sendo assim não são necessários nenhum tipo de máquina virtual ou biblioteca runtime para a sua execução mas ainda garante sua portabilidade entre diversas plataformas.

Até mais,
Zappala.

Cainã Costa disse...

La Batalema,
O porém é que C# é .NET, o que implica em Monões de problemas :P

Zappala,
Exatamente, e outra vantagem é que não precisamos mais fazer aquelas gambiarras que é pra programar GTK em C, com uma pseudo-orientação à objetos.

Angelo disse...

Tem uma diferença básica:
O Exemplo em Java não usa Formulário e o outro sim.. por isso o código é maior.

La Batalema disse...

Que exemplo Java? Onde?

[]'s

Tiago "PacMan" Peczenyj disse...

Puxa... não consigo fazer o Gtk funcionar, fica dando um erro de 'namespace Gtk can not be found' :/

La Batalema disse...

Você precisa compilar com a flag --pkg gtk+-2.0

[]'s
Cacilhas, La Batalema

Francisco Antônio da Silva Souza disse...

Achei a linguagem muito interessante também. O fraco do projeto é a documentação, como você apontou no teu post.

Abraços.