martes, agosto 07, 2007

C# codigo intermedio, Vala C puro

Hace unos dias en el mundo Gnome encontre un proyecto interesante, el cual parace que esta ganando "momento", aun y cuando el proyecto se inicio alla por el 2006, este proyecto se llama Vala.

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
Pero ademas implementa caracteristicas de C# 3.0 como son:
  • Expresiones Lambda
  • Inferecia de tipos (variables de tipo var)
El rasonamiento de Vala es que en Gnome existen programadores que no quieren/pueden usar lenguajes como C# o Java y estan "condenados" a utilizar C y la complejidad de programar para GObject, ahora van a poder usar un lenguaje que se encargue de la "plomeria" para seguir creando aplicaciones en un lenguaje moderno y sin tener que depender de una maquina virtual.

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

// 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();
}
}
}
El segundo ejemplo muestra como crear una aplicacion grafica con el toolkit Gtk+

//valac --pkg gtk+-2.0 -o sample sample.vala

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;
}
}
El listado de la sintaxis de Vala se encuetra aqui.

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:

Anónimo dijo...

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|

Mario Alberto Chavez dijo...

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