Vala é uma linguagem moderna proposta pelo pessoal do Gnome. Sua sintaxe é baseada no C#. Trata-se de um compilador, sendo, assim, uma alternativa a linguagens interpretadas que possuem menor desempenho. Este artigo apresenta a linguagem e instrui o leitor a instalá-la em seu sistema, independente de qual distribuição.
Como já foi dito, o código do Vala baseia-se fortemente no código do C#. Logo, se você já usou C#, ou mesmo Java, programar em Vala não será um desafio. Principalmente se você tiver experiência também com GObject.
Vamos começar pelo exemplo básico, um "Olá pessoal do Viva o Linux!":
using GLib;
public class HelloWorld : Object {
public static int main(string[] args) {
stdout.printf("Olá pessoal do Viva o Linux!\n");
return 0;
}
}
Salve o arquivo OlaVol.vala. Agora basta compilar o código.
O compilador Vala chama-se valac. O uso dele é muito semelhante ao uso do gcc.
valac -o OlaVol OlaVol.vala
$ ./OlaVol
Olá pessoal do Viva o Linux!
Simples, não? E como faríamos uma "janelinha"? Vamos agora ver um exemplo usando interface gráfica Gtk. Nada muito complexo, só um pequeno botão escrito "Click me".
Crie um arquivo chamado Click.vala e coloque o seguinte conteúdo:
using Gtk;
static int main (string[] args) {
Gtk.init (ref args);
var window = new Window (WindowType.TOPLEVEL);
window.title = "First GTK+ Program";
window.set_default_size (300, 50);
window.position = WindowPosition.CENTER;
window.destroy += Gtk.main_quit;
var button = new Button.with_label ("Click me!");
button.clicked += (source) => {
source.label = "Thank you";
};
window.add (button);
window.show_all ();
Gtk.main ();
return 0;
}
Salve e feche o arquivo. Vamos compilá-lo. Ao compilar um arquivo que usa Gtk+, temos que especificar isso explicitamente no comando:
[4] Comentário enviado por f_Candido em 14/04/2009 - 20:11h
Legal, muito interessante o artigo.
Você afirmou que o desempenho e semelhante ao do Java e C#, correto?
Existe algum benchamark comparando as linguagens??
Interessante notar é a sintaxe simples. Isso é bom.
[5] Comentário enviado por franciscosouza em 14/04/2009 - 20:39h
Olá f_candido, na verdade não existe nenhum benchmark ainda. Mas de repente eu faço um...
Quanto ao desempenho, na TEORIA, Vala tende a ser mais rápida, por ser compilada. Mas vale lembrar que as máquinas virtuais possuem diversos recursos que possibilitam ganho de desempenho.
[7] Comentário enviado por mslomp em 14/04/2009 - 23:40h
não conhecia o vala, e pelo que li no site oficial não se trata de um compilador rigorosamente falando, e sim de um tradutor vala->c. ou seja, o código vala será transformado em c, e então compilado/montado/ligado de fato por um compilador externo - no caso, o gcc. desse modo, eventuais benchmarks não serão aplicados à eficiência do compilador vala, e sim ao quão enxuto e otimizado está o código c gerado por ele, o que é muito interessante de se observar à medida que novas versões surjam.
parabéns pelo artigo, realmente uma novidade bem abordada.
[8] Comentário enviado por franciscosouza em 15/04/2009 - 00:43h
Olá mslomp. Vale atentar que o número de compiladores que geram código Assembly é quase nulo.
Hoje em dia, praticamente todos os compiladores para binários passam pelo C, pra depois passarem pelo Assembly e por fim chegarem no código de máquina.
[10] Comentário enviado por mslomp em 15/04/2009 - 09:39h
para o caso do gcc, o código assembly é gerado no back-end do compilador (cc1), e então montado pelo gnu assembler (as), e finalmente ligado pelo realocador (collect2) e pelo gnu linker (ld). no fundo no fundo, o que determinará uma boa saída assembly é o tratamento das linguagens intermediárias. no gcc, para o exemplo de um código em c, a ordem de linguagens intermediárias até o código assembly final é:
c -> generic -> gimple -> rtl -> assembly
a mágica acontece especialmente nas fases gimple (otimizações ssa) e no rtl (otimizações rtl), que é um 'pseudo baixo nível' para uma máquina hipotética com infinitos registradores.
como implícito no comentário do colega chicoBento, a partir daí o compilador nada mais tem a ver com o processo, então também é preciso levar isso em conta ao interpretar benchmarks.
[11] Comentário enviado por andre_asn em 16/04/2009 - 23:13h
Boa noite chicobento tive o seguinte problema no final da instalação :
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking for dlfcn.h... yes
checking for objdir... .libs
checking if gcc supports -fno-rtti -fno-exceptions... no
checking for gcc option to produce PIC... -fPIC -DPIC
checking if gcc PIC flag -fPIC -DPIC works... yes
checking if gcc static flag -static works... yes
checking if gcc supports -c -o file.o... yes
checking if gcc supports -c -o file.o... (cached) yes
checking whether the gcc linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes
checking whether -lc should be explicitly linked in... no
checking dynamic linker characteristics... GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... no
checking for flex... no
checking for lex... no
configure: error: flex not found but required
download@Matrix:~/vala-0.7.0$ make
make: *** Nenhum alvo indicado e nenhum arquivo make encontrado. Pare.
download@Matrix:~/vala-0.7.0$ make install
make: *** Sem regra para processar o alvo `install'. Pare.
download@Matrix:~/vala-0.7.0$
pode me dar uma ajuda estou começando a faculdade e la usam o C# com Windows mas em casa meu micro e o note rodam Debian 5
[14] Comentário enviado por jntesteves em 21/07/2009 - 01:31h
A documentação tem crescido exponencialmente à medida que aumenta o número de usuários da linguagem. Confira o último "draft" e muitos exemplos (em inglês) no site oficial. http://live.gnome.org/Valahttp://live.gnome.org/Genie
.
Para os que ainda procuram por um benchmark, tem no site http://code.google.com/p/vala-benchmarks/ Inclusive existe uma página lá com alguns resultados. Como era de se esperar, programas escritos em Vala (ou Genie) rodam quase tão rápido quanto C puro, ganhando até de C++ em vários testes, com a grande vantagem de ser escrita num dialeto muito mais simples e moderno que C e C++.
.
C#, é claro, é muito mais lenta que essas linguagens na hora da execução.
.
Resumindo, Vala e Genie são simples e limpas como C# e Python na hora de escrever o código, mas rápidas como C na hora de executar!
.
A versão final estável de Vala está prevista para ser lançada junto com o Gnome 2.8, ainda este ano. Quem quiser já pode ir migrando para Vala (ou Genie) em todas as plataformas que suportam C + GObject.
.
Vala é o futuro! Abraços e bom aprendizado.