Como se describe en su pagina, Vala es un lenguaje moderno para el desarrollo de aplicaciones para el ambiente Gnome, el cual compila el codigo a C, permitiendo el uso directo de las librerias de Gnome escritas en C, sin la necesidad de una maquina virtual para la ejecucion del codigo - tal y como lo hace C# o Python -.
Vala esta basada en el sistema de tipos GObject, pero la pregunta es ¿porque Vala es un lenguage moderno de programacion?, bueno porque su sintaxis esta basada, nada menos que en C#!
Asi es Vala soporta caracteristicas existentes en C# 2.0 como pueden ser:
- Interfaces
- Ciclos foreach
- Señales o eventos
- Generics
- Propiedades
- Tipos no nulos
- Manejo automatico de memoria, bueno usa "Reference counting"
- Soporta manejo de excepciones con los bloques Try-Catch
- Expresiones Lambda
- Inferecia de tipos (variables de tipo var)
Para poder utilizar las librerias nativas de Gnome en Vala, es necesario crear "bindings" que son una capa que permite la comunicacion entre las librerias y el lenguage Vala, actualmente hay "hackers" que estan enfocados en esta tarea y se espera que un futuro proximo al menos las librerias basicas de Gnome cuenten con bindings para poder ser utilizadas con Vala.
Aqui muestro un par de ejemplos, el primero es interesante porque muestra el uso de: Propiedades, Eventos, Expresiones Lambda y ciclo foreach
El segundo ejemplo muestra como crear una aplicacion grafica con el toolkit Gtk+
// Para compilar, teclear: valac -o sample1 sample1.vala
using GLib;
public class Sample1
{
private string name {get; set;}
public Sample1 (construct string! name){}
public signal void Display();
public void run()
{
Display += s => {
stdout.printf ("Expresion Lambda %s!\n", name);
};
Display();
}
static int main(string[] args)
{
foreach(string arg in args)
{
var sample = new Sample1(arg);
sample.run();
}
}
}
//valac --pkg gtk+-2.0 -o sample sample.valaEl listado de la sintaxis de Vala se encuetra aqui.
using GLib;
using Gtk;
public class Sample : Window {
construct {
title = "Sample Window";
create_widgets ();
}
public void create_widgets () {
destroy += Gtk.main_quit;
var button = new Button.with_label ("Hello World");
button.clicked += btn => {
title = btn.label;
};
add (button);
}
static int main (string[] args) {
Gtk.init (out args);
var sample = new Sample ();
sample.show_all ();
Gtk.main ();
return 0;
}
}
Me llama la atencion que hallan decido implementar Vala con una sintaxis mas parecida a C# en lugar de Java, y me llama la atencion porque generalmente en el mundo OSS cualquer cosa que venga de Microsoft es maligna, en fin veremos que futuro le depara a Vala en el mundo Gnome.
Por cierto no existen paquetes de instalacion, asi que aqui estan las instrucciones de como compilarlo, ya que Vala se autocompila, pero lo tant es necesario contar con un compilador Vala para poder compilarse a si mismo, ok, ok se escucha complejo, pero es muy simple.
Primero hay que descargar algunos de los archivos tar liberados - el mas reciente es el mejor - de esta liga: Releases. Despues de descomprimirlo lo compilamos y lo instalamos:
$ tar xvfj vala*.bz2
$ ./configure --prefix=/usr/local
$ make
$ sudo make install
Despues se puede bajar el codigo fuente de Vala desde el repositorio - recomendable ya que agrega nueva funcionalidad y corrige bugs - con compilarlo e instalarlo:
$ svn co http://svn.gnome.org/svn/vala/trunk
$ ./configure --prefix=/usr/local
$ make
$ sudo make install
$ make distclean
$ ./configure --prefix=/usr/local
$ make
$ sudo make install
Listo, ya podemos empezar a programar en Vala.
2 comentarios:
Haber , también puedes programar con mono y decirle al compilador que te lo pase a código nativo del pc, es decir no necesitas de la máquina virtual echale un ojo a mkbundle.
Salu2
|AhIoRoS|
mkbundle "empaqueta" las librerias necesarias por el ejecutable, pero aun sigue siendo CIL.
Aqui en punto no es que este en contra de C#, pero me parece interesante la propuesta de Vala de usar un dialecto de C# para programar directamente en C.
Vala no convierte el codigo a C, simplemente "genera" toda la "plomeria" necesaria para C y compila en C
Publicar un comentario