Disclaimer: This is a personal web page. Contents written here do not represent the position of my employer.

Saturday, August 11, 2007

 

Vala: ¿lo mejor de los dos mundos (C & C#)?

Charlando con mi colega José Ramón, me comentó algo sobre un proyecto que iba a ser considerado como el "asesino" de Mono. La verdad, si algún proyecto iba a tener tamaña tarea, me pregunto cómo no escogieron un nombre más "vistoso".

Y es que "Vala" es un nuevo proyecto de Gnome que pretende coger lo mejor de los dos mundos entre un lenguaje nativo, sin orientación a objetos, con aritmética de punteros y rápido (C) y un lenguaje administrado, orientado a objetos, sin aritmética de punteros, y en el que la eficiencia suele considerarse como algo menor (por tener un JIT que lo compila al iniciar, y un runtime que lo gestiona, y lo monitoriza con un recolector de basura).

¿Qué coge Vala de cada uno?

Y cualquiera se preguntaría, ¿cómo es posible? Pues porque Vala tiene un compilador cuya salida no es código máquina ni código intermedio, sino código C, lo que es muy interesante.

También es interesante la discusión que ha suscitado el tema en OSNews, de la que destaco este comentario por si no ha quedado del todo claro de lo que este proyecto es capaz.

Y yo me pregunto lo siguiente:

Hay una cosa que no me gusta de Vala: al parecer es estáticamente tipado para tipos primitivos, pero es dinámicamente tipado para clases/objetos. ¿Volvemos al Lazy Programming? :(

Lo que yo haría si fuera Miguel de Icaza, es contratar a esta gente para que hicieran un compilador similar a Vala, pero para C#. Con eso podrían hacer que Gnome y otros detractores de lenguajes de alto nivel, usasen una API tan establecida y útil como la de Mono, además de ofrecer interoperabilidad con este lenguaje. O mejor aún, que hicieran un compilador que convirtiese IL a C. Y me repito ¿no es esto el AOT? (No digo que sea lo mismo que el AOT, sino que el AOT consigue lo mismo.)

Aunque ahora que lo pienso, ¿por qué el AOT soporta tan pocas arquitecturas? Porque compila directamente a nativo, en lugar de a C. A lo mejor habría que reescribir el AOT de Mono con este nuevo approach de manera que se reutilizara el tan estable y poderoso GCC.

Actualizacion 25-MAY-2008: Antes de nada quería agradecer a los que han publicado comentarios en esta entrada, pues han sido muy reveladores.

Y ahora queria rectificar algunas cosas que he dicho (y que sin embargo ningún comentario me había advertido):
a) Ahora que he estado trabajando unos meses con gcc (para hacer ciertas cosas de bajo nivel en mi nuevo proyecto en Novell) voy a dejar de considerar "todo poderoso" al gcc porque le he encontrado bugs graves (de parseo y de análisis semántico).
b) Resulta que Vala no es dinámicamente tipado, ¡es estáticamente tipado! Lo que ocurrió es que confundí su inferencia de tipos con la dinamicidad de tipos al ver un ejemplo de codigo. Pero gracias a esta entrada he salido de mi error (y aquí un ejemplo de codigo que recibe un Gtk.TreeView como parámetro de un método).
c) Con lo descubierto en el punto (b) me he quedado bastante entusiasmado con el proyecto. Aun asi, creo que sigue siendo interesante un runtime que gestione tu flujo de codigo, por lo que seguiré usando Mono en general. Sin embargo, para cualquier pieza de software que requiera permanecer en el nivel bajo (bien por rendimiento, o bien para ser "wrapeado" por otros lenguajes) consideraré seriamente empezar a usar Vala, y dejar de usar C de una vez por todas. De hecho opino que la industria debería empezar a reescribir todo lo que esta hecho en C a este lenguaje.

Labels: , , , ,


Comments:
Hola Andrés.

Escribimos posts similares casi al mismo tiempo :P

La diferencia con AOT de Mono es que el código compilado con AOT igual sigue requiriendo del runtime de Mono. El codigo compilado sigue requiriendo del recolector de basura y de toda la abstracción que crea el entorno de ejecución de Mono.

Vala simplemente traduce código a C. Esto tiene muchas ventajas, aunque también tiene varias desventajas, por ejemplo no me imagino depurando código Vala, debe ser bastante difícil si no conoces bien C, GObject, Glib, etc. Por otro lado con un sistema como el de vala difícilmente se va a poder utilizar un lenguaje dinámico como Ruby o Python cosa que si hace Mono/.NET.

Un saludo.

Manuel.
 
"¿Por qué no escogieron hacer un compilador de C# a C, en lugar de crear un lenguaje nuevo?"

El lenguaje Vala sigue la sintaxis de C# donde puede, sólo hay diferencias cuando hay que cambiar algo para generar código C con gobjects. Por ejemplo, en los constructores. Si te miras la parte de sintaxis en la página del wiki de gnome, podrás leer las (pocas) diferencias y su explicación.
 
Vala es un lenguaje separado de C para que sea más consistente con como funcionan las clases en gobject, que no es 100% lo que se acostumbra en los lenguajes OOP.
 
Saludos:
Bueno hace tiempo empeze a Programar en C# con mono ya que is aplicaciones corren bien en Win como en Linux.
Ahora por eso de las patentes, etc, etc etc, quisiera utilizar otro lenguaje de programacion que sea multiplataforma.
Un compilado en VALA corre en Windows o hay alguna forma de hacerlo correr en esa plataforma?
He utilizado PHP pero no quisiera utilizar nungun lenguaje que sea interpretado.
JAVA me parece muy pesado.
 
Hi knocte,

non-english posts on opensuse planet are a little but unfair ...

;)

Your non-speaking __your_language_here__ friend
 
Anónimo: sí que parece funcionar en Windows, echa un vistazo a http://live.gnome.org/Vala/ValaOnWindows

saLOUt: I'm so sorry, this is actually a pretty old post, but I found some typos on it and saved it; I didn't know it would get posted on top of planet suse, I'll be more careful about updating posts in the future!
 
Post a Comment

Links to this post:

Create a Link



<< Home

This page is powered by Blogger. Isn't yours?

Categories

RSS of the category Gnome
RSS of the category Mono
RSS of the category C#
RSS of the category Programming
RSS of the category Mozilla
RSS of the category Web Development
RSS of the category Security
RSS of the category Open Source
RSS of the category Engineering
RSS of the category Misc
RSS of the category Politics

Contact with me:
aaragonesNOSPAMes@gnNOSPAMome.org

Archive
My Photo
Name:
Location: Hong Kong, Hong Kong
Follow me on Twitter