Vala: Alternativa a C++ basada en C
Nota: artículo largo (1100 palabras, ~5 min).
No voy a empezar una guerra santa sobre lenguajes de programación. Uno debe utilizar la herramienta que mejor se acomode al problema o situación. Para mi uno de los mejores lenguajes siempre ha sido C, pero desde que uso lenguajes orientados a objeto he dejado un poco de lado la programación en este lenguaje. Y como muchos, no disfruto de C++. Pues para nosotros es que existe un nuevo lenguaje: VALA. Tiene las ventaja de la orientación a objetos junto con el desempeño de C.
Aprende más sobre este lenguaje después del salto.
Porqué VALA?
Vala es fue diseñado para todos aquellos programadores que quieren desarrollar para la plataforma GNOME pero por una u otra razón no pueden usar lenguajes de Alto nivel como Python, Java o C#. La desventaja de estos últimos es que todas las librerías creadas usando esos lenguajes no pueden ser usadas por el resto de los lenguajes; por ejemplo, una librería de Python no puede ser fácilmente usada por un programa en C.
La ventaja de Vala es que puedes programar con toda la flexibilidad de un lenguaje orientado a objetos y luego el compilador convertirá tus clases y tus librerías a código C estándar. Así, una librería escrita en Vala puede ser usada fácilmente en Python, Java, C#.
En el resto del artículo vemos algunas de las características del lenguaje, pero no todas. Para ver más en profundidad la sintaxis y ejemplos, pueden ir a leer el tutorial de VALA (ingles)
Como conseguirlo
Si tienes Ubuntu, es tan sencillo como hacer:
desde un terminal. Si usas otro sistema, la sintaxis debe ser muy similar, por ejemplo, yum install valac para sistemas fedora.
Despues de esto tendrás instalado el compilador de Vala y las librerías estandar.
Ya lo tengo... ahora un ejemplo
Por supuesto, Hola Mundo
public class Test.HelloObject : GLib.Object {
public static void main(string[] args) {
stdout.printf("Hello, World");
}
}
La sintaxis es bastante parecida a la de C#
using GLib es el equivalente a import o include de otros lenguajes. Así hemos importando la librería GLib para usarla. En realidad la primera línea es irrelevante pues GLib se importará por default.
En el ejemplo creamos una nueva Clase llamada HelloObject que hereda del objecto Object (perteneciente a GLib). La función main es básicamente la misma de lenguajes como Java o C#, una función estática que será llamada cuando al iniciar el programa. Stdout es un objeto que simboliza la salida estándar.
Propiedades de un objeto
En los lenguajes comunes los metodos de obtención y modificación son métodos normales. Vala provee varias maneras de definir las propiedades de un objeto.
Así dejamos que Vala decida como manejar esta variable. Además definimos que puede ser leído y modificado.
En esta, hemos hecho funciones especiales que modifican la propiedad interna (privada)
_prop_2
public int prop_2 {
get {
return this._prop_2;
}
set {
this._prop_2 = value;
}
}
Este ejemplo es básicamente igual al primero pero podemos asignar un valor por defecto a la propiedad. Además, el método set es privado a la clase.
Funciones anónimas
Las funciones anónimas nos permiten crear trozos de código para manipularlos luego sin tener que definirlos formalmente. En este ejemplo
la variable f contendrá una función que recibe un parámetro (a) y lo imprime por la pantalla.
Funciones delegadas
Las funciones delegadas son un tipo de dato que nos permitirá pasar código por parámetro. Veamos un pequeño ejemplo
void f2(DelegateType d, int a) {
d(a);
}
f2(a => { stdout.printf("%d\n", a); }, 5);
Lo primero que hicimos fue crear un tipo delegado (DelegateType) que recibe como parámetro un entero (a). La función "f2" recibe como parámetros un objeto de tipo DelegateType (d) y un entero. Luego ejecuta "d" usando a como parámetro. Para el que sabe C, sabe que por detrás solo son punteros a funciones, pero es una sintaxis muy limpia y sin tanto paréntesis y punteros a void.
Compilando y convirtiendo a C
Para compilar tus programas, el compilador es "valac", el cual puede generar un ejecutable directamente o generar el código en c. Para compilar un ejemplo llamado "holamundo.vala" solo debes ejecutar
Y te dejará un ejecutable llamado holamundo. Para obtener el código C sólo debes usar la opción -C y dejara en el directorio los archivos .c y .h
Otras características avanzadas
Vala tiene muchas otras características que uno espera de lenguajes orientados a objetos:
- interfaces: Puedes crear muchas clases que implementen la misma interfaz. Con esto aseguras que un conjunto de clases provean los mismos métodos
- constructores: Un clase en vala sólo puede tener un constructor, pero existen técnicas para modificar la cantidad de parámetros que puede recibir
- herencia: la herencia se comporta de manera similar a otros lenguajes pero existen un par de excepciones en donde el orden de ejecución no es el normal. Les recomiendo leer el manual con atención
- polimorfismo: el clásico polimorfismo.
- genericos: Permite crear clases especializadas para manejar tipos de datos, como listas de algún objeto en particular.
Tiene además incorporado el sistema de "señales" de GTK mediante el cual un trozo de código genera una señal y otro trozo es capaz de reaccionar a esta señal y ejecutarse. Este sistema recuerda en algún sentido a los event listener de Java o los eventos de C++.
Tiene un sistema de errores basado en excepciones pero utilizando espacios de nombres. Vala presenta una mejora pues su sistema de errores permite una mejor separación en los dominios de los errores, en otras palabras, agrupa mejor los distintos tipos de error según categorías.
Vala posee además algo que otros lenguajes dan por sentado pero que C no posee: un sistema estándar de tipos de datos abstractos. Libgee, incorporado con vala, da acceso a listas, tablas de hash, mapas y sets. Algo muy similar a java.util en Java pero que C++ no posee (al menos que yo sepa)
Y de aquí a donde?
Vala todavía está en desarrollo. Puede que algunas cosas cambien mucho antes de la versión 1.0, pero ya es un lenguaje que funciona bastante bien y algunos desarrolladores de Gnome y GTK están empezando a usarlo como lenguaje principal debido a lo fácil que es integrarlo con otros programas escritos en C.
Si estás interesado en este lenguaje, te recomiendo que revises el tutorial y hagas algunos ejemplos.
- Alejo's blog
- 2109 lecturas
-
Recomendados por los lectores de Manzana Mecánica
- Blogger, Twittero: ayuda a informar con fotos y videos libres — 1 Mar 2010. 1.519 lecturas.
- El Dominio Público — 3 Mar 2010. 277 lecturas.
- Privacidad: las tres extensiones imprescindibles para Firefox — 26 Feb 2010. 464 lecturas.
- Ayuda a Chile desde el Extranjero — 5 Mar 2010. 438 lecturas.
- ¡Es la semana de leer ebooks! — 8 Mar 2010. 188 lecturas.
- (Telefónica de) España no quiere redes de Wi-Fi públicas — 24 Feb 2010. 414 lecturas.
- El mercado de la educación superior en acción — 1 Mar 2010. 275 lecturas.
Noticias: tag #mmecanica en Twitter
- Parlamento europeo exige transparencia en negociaciones de tratado ACTA sobre propiedad intelectual #mmecanica http://ping.fm/ZcXOG
- EU parl. passes resolution that "deplores the calculated choice" of not negotiating ACTA transparently #mmecanica http://ping.fm/Kct41
- EU parl. will ask for transparency in ACTA negotiations #mmecanica http://ping.fm/jsn2F






Comentarios
Titulo inapropiado
El título de este pinche artículo está mal, es inapropiado. Vala es una alternativa a C#, no a C++. Es más parecido a C# y Java que a otros lenguajes, se caracteriza por que no usa una máquina virtual y puede ser compilado en Win/Unix/Linux/etc.
http://www.dearwatches.com
replica watch
replica watches
Rolex watches
replica Piaget
Breitling replica
Montblanc watch for sale
Christian Louboutin Pumps
Tiffany 1837 LOCK TRIPLE BANGLE Bracelet
movado replica
Rolex Explorer replica
Fuera de Gnome y GTK
Me pregunto si se podrá usar fuera de Gnome y sin GTK. Tengo entendido que usa gobject para los objetos.
que es bala
que es bala
Bala se escribe con uve!
Bala es lo que dispara la pistola...
C++ si tiene tipos de datos abstractos en su biblioteca
De hecho tiene una maravillosa STL con TAD's y algoritmos para operar con ellos, brindando un framework excelente con el que desarrollar proyectos de cualquier escala. Es por eso por lo que se utiliza tanto. Algunas implementaciones incluyen tablas hash, pero realmente eso no es tan importante puesto que el lenguaje te proporciona las herramientas para construirlas eficientemente y genéricamente.
Igualmente C++ puede ser también compilado a C (así es como se hacía antes), de modo que no entiendo los problemas que genera. Por otra parte creo que a D le falta mucho para llegar a ser una alternativa adecuada.
Vala parece un lenguaje muy adecuado para el desarrollo de interfaces basadas en GTK y para gente con inclinaciones sintácticas heredadas de C (C++, Java, C#), pero ¿tiene algún ámbito de aplicación más aparte de éste? ¿Es estándar?
Espero que alguien tenga la amabilidad de contestarme porque me gustaría conocer más pros y contras.
Un saludo
C++ si soporta colecciones
Al igual que Java, C++ soporta para colecciones. Comparto el entusiasmo por un lenguaje tan potente como C sin la complejidad innecesaria de C++, tal como D o Vala.
C es el nuevo assembler
Esto confirma lo que varios han dicho antes: C es el nuevo assembler. En vez de compilar directamente a lenguaje de máquina para un procesador, la compilación se hace en dos pasos: uno a C y otro a lenguaje de máquina, con compiladores optimizados para cada una de estas tareas.
—ChaTo
Enviar un comentario