Revision 1 as of 2009-08-11 09:39:17

Clear message

Vala, Lenguaje de programación

Relator: Alberto Ruiz (aruiz)

Moderador: Sergio Infante (neosergio)

Domingo 09 de agosto de 2009, 17:00 horas UTC

irc.gnome.org #gnome-hispano


Siendo las 17 Horas UTC con 02 minutos empezamos

Bienvenidos amigos, fans y curiosos Gnomeros

neosergio, no vas a necesitar @ para cambiar el modo del canal?

aruiz, apelemos a la civilización ;-)

;-)

pues si bueno, neosergio adelante, haz los honores pues

El dia de hoy la charla programada es sobre Vala

http://live.gnome.org/Vala

y tenemos el placer, gusto, agrado y quizas honor de tener a Alberto Ruiz para que nos hable del asunto

:) neosergio, empiezo pues?

antes para aquellos que no conozcan a aruiz , aqui pueden leer un poco sobre el

http://www.grancanariadesktopsummit.org/node/343

pues dale entonces aruiz

doile pues

pues bueno

bienvenidos a todos y gracias por atender

como bien ha comentado Sergio, hoy vamos a hablar del lenguaje de programacion Vala

les voy a rogar me disculpen si no utilizo acentuaciones o uso nh en lugar de enhe

pero es que no tengo teclado en castellano

:)

de entrada, les ruego que vayan instalandose los paquetes valac y libgtk2.0-dev en ubuntu jaunty

estoy asumiendo las versiones del compilador y las utilidades de esa distro pues es la que tengo en

casa voy a dar una breve introduccion sobre el proyecto y luego voy a pasar a comentar unos ejemplos que he empaquetado en

http://www.gnome.org/~aruiz/tutorialvala-gh-1.0.tar.gz

les ruego lo descargen y lo descompriman

tiene varios directorios con los capitulos del tutorial

Pues bien Vala es un lenguaje de programacion inspirado en C# cuyo proposito es proporcionar un lenguaje de alto nivel para la paltaforma de desarrollo de GNOME en concreto, para el sistema de objetos GObject y GLib

La pregunta es, existiendo Mono, cual es el proposito de Vala?

Pues la respuesta viene dada por la pecularidad de este compilador y es que en lugar de utilizar una maquina virtual, transforma las fuentes a C y luego utiliza GCC (u otros compiladores de C) para pasar a codigo maquina

esto permite crear librerias y aplicaciones con exactamente el mismo rendimiento que si lo hubieramos escrito todo en C nosotros mismos

ademas de ello Vala proporciona varias caracteristicas muy interesantes aprovechando el potencial de GObject

como por ejemplo, hace conteo de referencias automatico, con lo cual no nos tenemos que preocupar de liberar memoria en ningun momento (salvo casos un poco particulares, de los que no voy a hablar hoy) para la explicacion de los ejemplos, voy a asumir ciertas nociones de programacion orientada a objetos y C/C#, aunque tratare de explicar todos los conceptos de la forma mas generica posible

bueno

http://www.gnome.org/~aruiz/tutorialvala-gh-1.0.tar.gz

si nos descargamos y descomprimimos el paquete nos vamos a encontrar con varios directorios

TutorialVala/01_HolaMundo es el directorio que contiene la primera serie de ejemplos

Una breve pausa: Los asistentes a la charla pueden enviarme las preguntas por privado, desde ahora.

ah, si, no tengo problemas con recibir preguntas en tanto las envien a traves del moderador

pues bien nos situamos ahora en TutorialVala/01_HolaMundo

el primer ejemplo, es HolaMundo1.vala

http://pastebin.valadoc.org/69.html

de forma alternativa, voy a utilizar el pastebin de valadoc.org para comentar trozos de codigo

pues bien, esta aplicacion, es la minima expresion de una aplicacion escrita en vala es basicamente el equivalente a una funcion main que devuelve 0 en C

para compilar esta aplicacion debemos invocar el compilador de vala, el comando valac y utilizar el nombre del fichero .vala como argumento

aruiz@dopamine:~/TutorialVala/01_HolaMundo$ valac HolaMundo1.vala

aruiz@dopamine:~/TutorialVala/01_HolaMundo$

cuando la compilacion de una aplicacion es satisfactoria, no hay mensajes de salida ahora observaremos que hay un ejecutable llamado HolaMundo1

si lo ejecutamos, veremos que no ocurre nada, como es esperado

bien, con respecto a C, en la declaracion de esa funcion podemos observar un par de cosas un poco "raras", para aquellos que no esten familiarizados con C#

public static, significa, que la funcion es publica, y que ademas es estatica

el concepto de estatico es diferente al static de C

significa que la funcion puede utilizarse sin tener que instanciar ningun objeto (veremos mas adelante esto con detalle en los ejemplos de declaracion de clases)

bien, ahora que ya tenemos un ejemplo basico veamos HolaMundo2.vala

aruiz: una pregunta que hace hhlp, es que IDE puede usar para Vala

dime

oh, muy buena pregunta

hay varias opciones hoy en dia aunque ninguna es lo suficientemente madura como para compararla con los IDEs disponibles para otros lenguajes y plataformas

yo personalmente uso GEdit y la linea de comandos pero por ejemplo, Anjuta y Monodevelop tienen ambos plugins para Vala

tambien hay un proyecto llamado Valide http://www.valaide.org/

hasta donde se hace cosas muy basicas

y luego tenemos http://code.google.com/p/vtg/

Vala toys for gedit

que tienen autocompletion y otras cosas interesantes prosigamos

:)

HolaMundo2.vala

http://pastebin.valadoc.org/70.html

podemos ver el codigo fuente aqui

este si es el clasico hola mundo

voy a explicar un poco la linea numero 2

vala trata de ofrecer un entorno lo mas orientado a objetos posible asi que normalmente no nos vamos a encontrar con las funciones sueltas como en C como por ejemplo, printf

en cambio, tenemos algo mucho mas interesante

la salida estandard, esta representada por el objeto global stdout y este objeto tiene un metodo, printf, que funciona exactamente como la llamada printf de C de toda la vida (o fprintf con stdout como buffer de salida)

para compilarlo, lo de siempre:

aruiz@dopamine:~/TutorialVala/01_HolaMundo$ valac HolaMundo2.vala

aruiz@dopamine:~/TutorialVala/01_HolaMundo$ ./HolaMundo2

Hola mundo!

Bien

ahora vamos a ver por encima, como se declaran variables

para ello, he anhadido dos ejemplos en HolaMundo3

http://pastebin.valadoc.org/71.html

en la linea 2 podemos observar lo siguiente:

string hola = "Hola";

esta es la tipica declaracion + asignacion de variable en C

definimos una variable hola de tipo string y le asignamos la cadena "Hola"

ahora bien, en la siguiente linea tenemos algo distinto

var mundo = "Mundo";

resulta que vala, al ser un lenguaje de tipado estatico, puede inferir el tipo de una variable si le asignamos un valor en su declaracion

para ello simplemente utilizamos  var

esto es bastante util si no tenemos claro el tipo que nos devuelve una funcion o si queremos hacer casting del tipo mas adelante

en la linea 4 podemos observar como utilizo el formato de argumentos de printf para insertar las dos cadenas en la salida

no se si habran observado, que en el paquete he anhadido un Makefile para facilitar un poco las cosas

aruiz@dopamine:~/TutorialVala/01_HolaMundo$ make HolaMundo3

/usr/bin/valac HolaMundo3.vala

aruiz@dopamine:~/TutorialVala/01_HolaMundo$ ./HolaMundo3

Hola Mundo!

bien ahora pasamos al ultimo ejemplo del capitulo de familiarizacion

http://pastebin.valadoc.org/72.html

este es el fichero HolaMundo4.vala

ahi doy varios ejemplos de las tipicas sentencias de control funcionan exactamente igual que en C excepto por la sentencia foreach

aruiz: una pregunta por parte de ddasd

foreach es una sentencia que recorre aquellos tipos de tipo coleccion, como por ejemplo las listas de GLib (tipo List en vala) adelante :)

pregunta de ddasd: vala tiene una solución al problema de Vulnerabilidad al usar punteros en C?

no estoy familiarizado con ese problema

ddasd, guardate esa pregunta para el final de la charla y lo discutimos luego

;-)

pues bien

foreach

basicamente lo que hacemos es declarar una variable

string arg, en este caso

que va a adquirir el valor de cada uno de los elementos del vector de argumentos de la funcion main

ademas, esta vez, en lugar de imprimir con stdout vamos a usar la llamada de salida de depuracion de GLib

debug(string format, ...)

funciona de forma similar a printf, pero se hace por la salida de depuracion estandard y no necesitamos anhadir el retorno de carro al final

ademas da mas informacion

para compilar simplemente ejecutamos valac HolaMundo4.vala o make HolaMundo4

aruiz@dopamine:~/TutorialVala/01_HolaMundo$ make HolaMundo4

/usr/bin/valac HolaMundo4.vala HolaMundo4.vala:8.18-8.21: warning: unreachable code detected

 . while (false && true) {

                 . ^^^^

Compilation succeeded - 1 warning(s)

como ven, el ejemplo compila satisfactoriamente

pero con una alerta avisando de que la sentencia while siempre es falsa

el compilador de vala hace algunas cosas muy interesantes para detectar posibles fallos en tiempo de compilacion

en muchas ocasiones ayuda a detectar fallos que hubieran tomado horas identificar en C

aruiz, una pregunta de raster

adelante :)

Pregunta de raster: Una pregunta ¿existe la construccion elif? (esto es, un else if , pero todo junto. Suelo usarlo en C (con un #define elif else if) para que, cuando hago varios else if's seguidos, el código quede más claro, aunque a nivel de ejecución no tiene ninguna diferencia

en ese sentido es igual que C# hay que usar "else if"

Vala tiende a ser lo mas compatible posible con C# excepto en contadas excepciones y donde el beneficio supera con creces a andar anhadiendo cosas extranhas al lenguaje bien prosigo

aruiz: otra pregunta, esta vez de diega referente al codigo del ejemplo anterior

oh, adelante :)

pregunta de diega: hay algun motivo por el cual el metodo debug no est? dentro de alg?n objeto como lo est? printf dentro de stdout?

si, la idea es que debug es una funcion del lenguaje

debug no sirve para imprimir en la salida estandard (aunque al final eso sea lo que haga)

debug sirve para emitir salidas para depurar el codigo espero que eso responda la pregunta :)

aruiz@dopamine:~/TutorialVala/01_HolaMundo$ ./HolaMundo4

No se especifico ningun argumento

bien

como vemos, si no especificamos argumentos,  nos sale un mensaje de error, que se ha imprimido a traves de la salida de errores (el objeto stderr)

ls

de tal forma que si hicieramos $ ./HolaMundo4 2> errores.txt

neosergio, je

*mistake

tendriamos ese error en ese fichero

notese que hemos detectado el numero de argumentos con la propiedad length del vector args args.lenght

es por tanto una propiedad del tipo uint

length, que diga

bien aqui se acaba el primer capitulo alguna pregunta hasta aqui?

hasta el momento solo las respondidas

bien

erm

para terminar de dar los otros dos capitulos, se me esta escapando un poco el tiempo

voy a intentar acelerar un poco el asunto

:)

si alguien tiene que irse o se aburre, que lo diga :P

en principio voy a continuar

bien

pasemos al capitulo 02

en el directorio TutorialVala/02_Clases

http://pastebin.valadoc.org/73.html

este es el fichero Clase1.vala

ahi hemos definido la minima expresion de una clase

notese que estamos declarando esta clase dentro de un espacio de nombres determinado

un espacio de nombres, no acaba siendo otra cosa que un prefijo en las funciones

por ejemplo el prefijo gtk_ de las funciones de Gtk+

no acaba siendo otra cosa que el espacio de nombres Gtk en Vala

es simplemente para poder declarar clases con el mismo nombre en librerias distintas y que no hayan conflictos

a continuacion, de claramos una clase publica

las declaraciones de las clases se definen tal y como esta representada en la linea 4

notese que derivamos de la clase Object que basicamente es la clase GObject

las clases, hay que declararlas publicas de forma explicita, dado que  sino no se pueden utilizar desde otros programas (por ejemplo en la funcion principal)

esta clase esta vacia, no hace absolutamente nada

podemos ver en la clase principal, main, como podemos crear un objeto de una clase determinada

var objeto = new Tutorial.Clase1();

esto crea un objeto (llamado objeto) de la clase Clase1 incluida en el espacio de nombres Tutorial

para compilar, make Clase1

/usr/bin/valac Clase1.vala Clase1.vala:12.6-12.35: warning: local variable `objeto' declared but never used

 . var objeto = new Tutorial.Clase1();

  . ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Compilation succeeded - 1 warning(s)

como vemos, Vala ha detectado que despues de asignar la variable, no la hemos utilizado en ningun elemento

esto ayuda a ver si tenemos variables sin usar desperdiciando memoria

pero la compilacion es satisfactoria en cualquier caso y si ejecutamos el programa, veremos como no hace absolutamente nada

;-)

:P bien pasemos a la clase numero 2 Clase2.vala

una pregunta aruiz

adelante

pregunta de gforcada: buenas, una pregunta para alberto: le puedes indicar al compilador que genere el codigo en C en vez de crear el ejecutable?

ah si

pregunta muy buena

si le pasamos la opcion -C puede generar el codigo en C

tambien hay otras opciones para generar las cabeceras .h de las funciones/clases publicas

y tambien hay opciones para generar librerias .so en lugar de programas, entre otras cosas

pero no he querido entrar en esos detalles para este tutorial

bien, prosigo

http://pastebin.valadoc.org/74.html

esta es la clase numero 2

en esta clase podemos ver varias cosas

primero, la sentencia using

using <Espacio de nombres>;

basicamente esto nos permite usar simbolos de un espacio de nombres sin tener que especificarlo expliciamente

como podemos ver en la funcion principal, para referirnos a Clase2, ya no usamos Tutorial.Clase2, sino directamente  Clase2

es algo parecido a "import" en python o a "include" en C, pero no se comporta de la misma manera

pues bien tenemos una clase con dos constructores

un constructor sin parametros

public Clase2 () { ... }

ese es el constructor por defecto

y tenemos un constructor alternativo que acepta un parametro de clase string

llamemmoslo, constructor con gracia

como podemos ver en el cuerpo del constructor con gracia le pasa la cadena que estaba como parametro a la salida de depuracion

compilamos

/usr/bin/valac Clase2.vala

Clase2.vala:21.6-21.27: warning: local variable `objeto' declared but never used

 . var objeto = new Clase2 ();

  . ^^^^^^^^^^^^^^^^^^^^^^

Clase2.vala:22.6-22.79: warning: local variable `chiste' declared but never used

 . var chiste = new Clase2.con_gracia ("Dice que van dos y se cae el del centro");

  . ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Compilation succeeded - 2 warning(s)

como esperabamos la salida del compilador nos avisa de que no estamos usando las variables

** (process:1904): DEBUG: Clase2.vala:9: Clase 2 construida

** (process:1904): DEBUG: Clase2.vala:14: Dice que van dos y se cae el del centro

y bien, aque tenemos la salida de cada constructor

el constructor es llamado, cada vez que se le llama con new, como podemos ver en main

alguna pregunta hasta aqui?

bien

una pregunta aruiz

neosergio, dime

pregunta de diega: a los constructores con par?metros hay que siempre ponerles un nombre? no se puede hacer public Clase2 (string chiste) { ... }?

ah, vale quizas no deje eso claro si, se puede tener un constructor por defecto con parametro

gracias

como decia los constructores por defecto pueden tener parametros

en efecto en el ejemplo trato de decir como tener varios constructores que acepten distintos parametros

podriamos tener

public Clase2 (string chiste) {...}

y luego

public Clase2.desde_un_entero (int entero) {...}

espero que eso aclare la duda

bien

pasamos al ejemplo Clase3 http://pastebin.valadoc.org/75.html

ante esto aruiz, una pregunta mas

neosergio, claro adelante

pregunta de ddasd: ¿El método main, no es necesario que este dentro de una clase como en C#?

jeje ddasd, muy buena observacion

ddasd, no, no hace falta

ddasd, y he tratado de tenerlo separado para que quede claro que no pertenece a la clase

mierda eso ha sido un split ?

neosergio, ?

parece que es del plugin de mibbit

sigo? :?

todos los desconectados han estado usando mibbit claro

ah bien

ddasd, como decia

ddasd, en C#, por definicion, nada puede estar fuera de una clase

ddasd, por eso tienes metodos estaticos

ddasd, en Vala, dado que estamos hablando de GObject, esto es perfectamente posible

ddasd, lo he dejado asi por claridad, para que se vea claramente que main no es un metodo de ninguna clase

ddasd, recuerdo como me confundia ese hecho de Java y C# cuando empeze a aprender esos lenguajes

bueno

prosigo a ver si consigo terminar pronto :)

http://pastebin.valadoc.org/75.html

la clase 3

empezamos a hacer cosas mas interesantes

ahora tenemos una clase que tiene metodos y propiedades

en la linea numero 7 hemos declarado una  propiedad llamada propiedad (que original yo) que es de lectura y escritura

sabemos que es de lectura y escritura pq tiene los metodos {get;set;}

esos son los metodos get, set estandard

podriamos definir otros metodos get, set, alternativos

por ejemplo...

http://pastebin.valadoc.org/76.html

si recargan la pagina veran que he hecho una pequenha modificacion

#

private int _propiedad

#

public int propiedad { # get { return _propiedad }}

se me escapo un ; ahi

pero da igual

ahora la propiedad es de solo lectura dado que solo tiene el metodo get

el valor real de la propiedad se encuentra en el miembro privado _propiedad

dense cuenta que _propiedad no es una propiedad estandard de GObject sino un miembro de la estructura privada de tipo int

basicamente un miembro es una propiedad sin metodos de escritura y lectura pero no quiero entrar en muchos detalles al respecto :)

una pregunta aruiz

adelante

pregunta de xapiens: vala tiene roundtrip? de no tenerlo es posible pasar codigo c directo para q lo genere dentro del codigo generado?

xapiens, que es roundtrip?

vala -> c, c->vala <-- roundtrip

jojojo, no no

xapiens, si quieres hacer c->vala tienes que generar un fichero .vapi, que viene a ser algo asi como un .h

le dice a Vala como generar el codigo a C

lo normal, es generar un .vapi usando las herramientas de GObject-Introspection

y si la API no es GObject, como sqlite3 por ejemplo

el .vapi se genera a mano

pero ese es un tema muy complejo

no puedes poner codigo C directo dentro de vala pero puedes compilar C y Vala juntos

valac fichero.vala fichero.c

tampoco quiero meterme en esos berenjenales

prosigo

http://pastebin.valadoc.org/75.html

volvemos al ejemplo original

otra pregunta aruiz

neosergio, adelante :)

pregunta de raster: Ha hablado de constructores, pero no de destructores. ¿Existen en Vala?

existen los destructores en la ultima version de Vala

public Clase ~Destructor() {...}

pero a dia de hoy y despues de dos anhos, no he tenido que usarlos

se usan normalmente cuando se utilizan objetos que no tienen contadores de referencia dentro de una clase

pero eso suele venir de APIs que no son de GNOME lo cual es inusual

prosigo

http://pastebin.valadoc.org/75.html

volvemos al ejemplo original

neosergio, vamos a intentar pasar las preguntas que no esten relacionadas con los ejemplos para el final? :)

asi avanzamos y luego discutimos abiertamente

perfecto

bien, la Clase3 define una propiedad, y un metodo mostrar_propiedad, que no devuelve nada

pero muestra dicha propiedad por la salida de depuracion

el constructor  de Clase3 asigna un valor por defecto a dicha propiedad

mas adelante, en el procedimiento principal construimos un objeto de dicha clase

utilizamos el metodo y escribimos un valor nuevo en la propiedad

objeto.propiedad = 5;

como vemos, no tenemos que usar metodos de ningun tipo

simplemente asignamos

esto lo que hace es llamar al metodo set; que hemos definido arriba

que como es el metodo set; por defecto, pues simplemente asigna el valor

luego volvemos a mostrar la propiedad

compilemos y ejecutemos el ejemplo

aruiz@dopamine:~/TutorialVala/02_Clases$ make Clase3

/usr/bin/valac Clase3.vala

aruiz@dopamine:~/TutorialVala/02_Clases$ ./Clase3

** (process:2411): DEBUG: Clase3.vala:11: 3

** (process:2411): DEBUG: Clase3.vala:11: 5

como vemos obtenemos los valores antes y despues de cambiarlos

en este ejemplo creamos una clase base (ClaseBase) con una propiedad y un metodo (basicamente igual que la Clase3) y luego creamos una subclase, SubClase

como vemos, para heredar simplemente ponemos el nombre de la clase base tras los dos puntos que van despues del nombre de la clase que queremos crear

public class SubClase : ClaseBase {

no hay mas ciencia

nos acabmos de ahorrar decenas de lineas de codigo en C :)

creamos un constructor que modifica el valor por defecto de la propiedad, le asigna 4

compilemos y ejecutemos para ver el resultado

aruiz@dopamine:~/TutorialVala/02_Clases$ make Herencia1

/usr/bin/valac Herencia1.vala

aruiz@dopamine:~/TutorialVala/02_Clases$ ./Herencia1

** (process:2461): DEBUG: Herencia1.vala:13: Constructor base

** (process:2461): DEBUG: Herencia1.vala:21: Constructor de la subclase

** (process:2461): DEBUG: Herencia1.vala:9: 4

como vemos se ejecuta el constructor base y seguidamente el constructor de la subclase y luego el metodo mostrar_propiedad(), declarado en la clase base muestra el valor, 4, que ha sido asignado en el constructor de la subclase

bueno, con esto termino con el capitulo 3

digo, capitulo 2

:)

llevo hora y media

:)

creo que voy a mostrar el ejemplo mas grafico del capitulo 3 y a acabar que les parece? alguien en contra? :)

no hay respuesta ante esa pregunta, prosigamos entonces :)

http://pastebin.valadoc.org/79.html

bien

pasemos al directorio TutorialVala/03_Gtk

aqui la cosa se pone mas interesante

voy a pasar directamente a la clase SimpleApp2.vala

aqui estoy usando funciones de la libreria Gtk+

el espacio de nombres como comente en su momento, es Gtk

para ver que paquetes estan disponibles para Vala y su documentacion online utilicen www.valadoc.org

el sitio no es perfecto, pero es bastante util

http://references.valadoc.org/gtk+-2.0.html

aqui estan las referencias del paquete gtk+-2.0

la nomenclatura de los paquetes sigue la nomenclatura dada por pkg-config

http://pastebin.valadoc.org/79.html

buen

bien

en ese ejemplo vemos como heredamos de la clase Window (en el ejemplo SimpleApp1.vala pongo direcciones de la referencia de la clase Window y sus propiedades en valadoc)

en el constructor, le asignamos el valor TOPLEVEL a la propiedad type

creamos una etiqueta (aunque el comentario diga boton.... typo) y mas adelante vemos una cosa un poco extranha

delete_event += on_delete_event;

hum...

delete_event, es una senhal del objeto Gtk.Window

las senhales son objetos a los que se les peude conectar Callbacks

las Callbacks son funciones, cuyo prototipo esta definido por la senhal

por ejemplo

http://references.valadoc.org/gtk+-2.0/Gtk.Widget.delete_event.html

public signal bool delete_event (Event event);

esa senhal, pertenece a la clase Gtk.Widget y tiene un parametro Gdk.Event y devuelve un valor booleano

en la documentacion explica que valor debe devolver

pues bien

dicha senhal requiere una retrollamada, o Callback declarada de la siguiente manera

[Callback]

public bool on_delete_event (SimpleApp widget, Gdk.Event event) {...}

[Callback] es un atributo (algo asi como un decorador) de la funcion

basicamente le dice a Vala como debe usar los parametros (pasara la instancia del objeto donde se especifica por el parametro, gpointer data...)

pero ese tipo de detalles es mejor ignorarlos :)

basicamente lo que estamos haciendo aqui es decirle al objeto, que cuando la senhal delete sea emitida ejecute on_delete_event

bien....

compilemos el ejemplo

aruiz@dopamine:~/TutorialVala/03_Gtk$ valac SimpleApp2.vala

SimpleApp2.vala:1.7-1.9: error: The namespace name `Gtk' could not be found using Gtk;

                                                                                . ^^^

uhhhhh

que pasa aqui?

:)

bien, vala no detecta automaticamente que paquetes quieres usar

el espacio de nombres Gtk viene definido en el paquete gtk+-2.0

asi que hay que pasarle al compilador la lista de paquetes que queremos usar con el parametro --pkg

/usr/bin/valac --pkg gtk+-2.0 SimpleApp2.vala

SimpleApp2.vala:32.6-32.34: warning: local variable `aplicacion' declared but never used

 . var aplicacion = new SimpleApp ();

  . ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Compilation succeeded - 1 warning(s)

bien

si cerramos la ventana (tras ejecutar ./SimpleApp2) vemos como el programa termina, dado que la retrollamada, llama a la funcion que finaliza el bucle principal de Gtk

y bueno

con esto termina el tutorial

me hubiera gustado hacerlo mas corto pero por IRC todo se hace mas lento la verdad

:)

podemos abrir el turno de preguntas creo que ddasd tenia una pregunta sobre algo relacionado con los punteros

bueno, ahora si la ronda de preguntas

:)

pregunta de ddasd: vala tiene una solución al problema de Vulnerabilidad al usar punteros en C?

ddasd, puedes elaborar un poco a que problema te refieres? (no creo que haga falta la moderacion ahora)

es que he visto por todos lados, que al usar punteros el programa es poco seguro (en c)

?

ddasd, bueno, no por usar punteros es inseguro

ddasd, es inseguro si se usan mal y sin cuidado

=0

ddasd, con Vala se disminuye el riesgo de cometer errores por un mal uso de punteros (normalmente, no se usan punteros de forma explicita en Vala)

pregunta de raster: ¿Hay alguna diferencia entre definir una propiedad publica con y sin {get:set}? Yo, en las pruebas que hice, no lo puse y pude acceder a ellas sin problemas desde fuera de la clase. ¿Hay alguna ventaja en añadirlo, o se puede eliminar?

si hay una diferencia aunque dentro de Vala no es visible

cuando defines una propiedad publica sin get/set basicamente estas anhadiendo un miembro a la estructura publica lo que en C vendria a ser objeto->propiedad = 5; lo cual es bastante peligroso porque impide cambiar el comportamiento del objeto en el futuro

mientras que una propiedad de GObject es distinta

tiene funciones de get/set y se identifica con una cadena

Entendido. Gracias.

raster, :)

raster, lo contrario es valido para propiedades privadas

raster, no es nada practico definir propiedades privadas (get/set)

raster, ahi si quieres usar la notacion de miembro privado, dado que luego eso no es expuesto en la api publica

neosergio, mas preguntas?

hasta el momento solo las de ddasd y raster

sería una buena poder usar las referencias (bibliotecas) de Mono en Vala? sería una buena idea poder usar las referencias (bibliotecas) de Mono en Vala? perdon

bueno, no creo que sea posible

vamos, directamente, no es posible

Mono/C# y Vala tienen una naturaleza totalmente distinta

Mono es una maquina virtual y Vala es un compilador de C# a C

lo unico que tienen en comun es el lenguaje

lo que si se puede hacer es portar ciertas cosas deC# a Vala con un esfuerzo relativamente bajo

aruiz, la implementación de vala por lo que se menciona, no es completa, está vala en la actualidad listo par ser usado en projectos de mayor envergadura que pequeñas aplicaciones?

pero Mono y Vala son dos mundos aparte fmaq, si y no :)

aclarando pls

fmaq, Vala el lenguaje y su compilador son bastante estable estables*

fmaq, los bindings sin embargo aun no son del todo estables

fmaq, en Codethink utilizamos Vala para proyectos bastante grandes, y en general nos salva dolores de cabeza con respecto a utilizar C, ahorramos mucho tiempo fmaq, pero de vez en cuando tenemos que arreglar bindings porque utilizamos funciones que no se habian probado antes

fmaq, con cosas como Gio/Gtk+ no deberias tener ningun problema 

}}}

fmaq

aruiz, en porcentaje cuanto se estima que es el faltante en materia de estabilidad?

en septiembre sale la 1.0

el lenguaje sera perfectamente estable a partir de ahi

vala utiliza gobject-introspection para generar los bindings

humm, eso es muy prometedor

asi que en parte, la pregunta real seria, cuanto le hace falta a gobject-introspection para estar completo? :)

no se

para cosas muy probadas como Gtk+ o Gio, poppler... Vala es perfectamente valido y estable

para cosas nuevas como Clutter 1.0, es un poco mas complicado

Gio que es?

ddasd, gio, la libreria de acceso a ficheros de glib

a ok

alguien mas presente si desea hacer preguntas, haganlas de frente, recuerden ya no hay moderacion

mas preguntas?

vamos cerca de las 2 horas :)

bueno, llevamos casi 2 horas aqui

jeje

si

si no hay mas preguntas yo me retiro :)

ok. Estuvo muy bien la charla gracias

:)

bueno parece que ya no hay mas preguntas

nada bueno, echenle un ojo a los otros ejemplos

en vala se puede hacer lo mismo que en c#

Excelente Charla

:)

no importa excelente charla

ddasd, hablamos en otro rato, necesito desconectar un poco :)

aruiz, gracias :D clap clap clap clap

oks

El log de la charla estara disponible en unos momentos en

http://es.gnome.org/Eventos/CharlasIRC/CharlaAgosto2009

diegoe, nada

aruiz, muchas gracias, buena charla

jeje

me gusta Vala es mejor que C o C++

frade, vas a tener que esforzarte! ;-)

ok aruiz, muy buena charla

me dejo bastantes cosas en el tintero en realidad no descarto ahcer una segunda parte :)

no es mala idea

=D

es muy bueno que lo de las charlas de Gnome Hispano vuelvan, genial

me alegro mucho que les haya gustado y si hay cosas de los ejemplos que no hayan entendido o no han quedado claras, por favor, diganmelo

ademas todo compiló ;-)

:) jajaja

:) genial aruiz