<?xml version="1.0"?>
<rss xmlns:php="http://php.net/xsl" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>Premiers pas avec Vala - Chicoree</title><link>http://www.chicoree.fr/w/Premiers_pas_avec_Vala</link><atom:link href="http://www.chicoree.fr/w/Premiers_pas_avec_Vala?action=toFeed" rel="self" type="application/rss+xml"/><description><![CDATA[Ceux qui me connaissent savent que je suis un partisan des solutions libres. Mais il faut savoir ne pas être sectaire et reconnaître quand d'autres modèles économiques donnent naissance à des choses intéressantes. C'est ce dont on peut gratifier Microsoft, qui, en développant C#, a conçu un langage clair et élégant.
Une option pour faire du C# sous Linux est d'utiliser Mono. Ce projet reprend non seulement le langage C#, mais aussi les bibliothèques et l'environnement pour développer et utiliser des applications .NET sous Linux. Seulement, pour intéressante que soit cette solution, la FSF émet des réserves quand à l'utilisation de Mono pour le développement de logiciels libres.
Une alternative pour ceux qui trouvent la syntaxe de C# intéressante est de se tourner vers le langage Vala, un sous-projet de Gnome. Si celui-ci reprend quelques idées de C# et s'inspire de sa syntaxe, il ne nécessite aucune run-time spécifique et ne dépend d'aucune bibliothèque estampillée Microsoft. Je ne suis pas légiste, et je ne vous dirai donc pas qu'il est certain qu'aucun élément de syntaxe repris par Vala ne soit couvert par un brevet Microsoft. Malgré tout, le risque est tout de même bien moindre qu'avec une vraie mise en oeuvre de .NET.
Mais se contenter de comparer Vala à C# est sans doute une vision réductrice. En effet, il ne s'agit pas juste d'un clone ou d'une imitation: À l'usage, il se révèle un vrai langage, sympa à utiliser, et bien intégré avec le modèle de développement de Gnome/GObject/Gtk/GLib/Gio/...
]]></description><item><title>1 Principe de fonctionnement</title><link>http://www.chicoree.fr/w/Premiers_pas_avec_Vala#Principe_de_fonctionnement</link><description><![CDATA[<p>Peut-être parmi vous certains ont connu les temps <i>héroïques</i> de la naissance du C++. Cette époque n'est pas si loin de nous que ça: et, même si je ne suis pas encore un <i>vétéran</i>, je me souviens avoir utilisé <a>Cfront</a> pour mes premiers programmes C++ – ou plutôt « C avec classes » comme on disait alors. En fait, <i>Cfront</i> était un convertisseur qui transformait le source C++ en C. La compilation à proprement parler étant dévolue au compilateur C <i>conventionnel</i>.
</p>]]></description></item><item><title>2 Installation</title><link>http://www.chicoree.fr/w/Premiers_pas_avec_Vala#Installation</link><description><![CDATA[<p>Sous Debian, Vala est disponible dans les paquets officiels. Malheureusement, sous Lenny, la version fournie est assez ancienne, puisqu'il s'agit de Vala 0.8.1 – alors qu'au moment d'écrire ce texte, la version 0.10.3 vient de sortir sur le site officiel (voir <a>Vala Releases</a> sur Gnome.org).
</p>]]></description></item><item><title>3 Hello World</title><link>http://www.chicoree.fr/w/Premiers_pas_avec_Vala#Hello_World</link><description><![CDATA[<p>Comme il se doit, le premier programme que nous écrirons sera le fameux <i>Hello World</i>:
</p>]]></description></item><item><title>3.1 Éléments de syntaxe</title><link>http://www.chicoree.fr/w/Premiers_pas_avec_Vala#.C3.89l.C3.A9ments_de_syntaxe</link><description><![CDATA[<p>Habitués du C ou d'un de ses dérivés, ce code source devrait vous sembler familier. Ainsi, comme ses aînés, Vala utilise <tt>/* ... */</tt> pour les commentaires multilignes (et <tt>//</tt> pour les commentaires sur une ligne). Les <i>blocs</i> sont délimités par des <i>accolades</i> (<tt>{ ... }</tt>). Les instructions se terminent par un <i>point virgule</i> (<tt>;</tt>).
</p>]]></description></item><item><title>3.2 Compilation</title><link>http://www.chicoree.fr/w/Premiers_pas_avec_Vala#Compilation</link><description><![CDATA[<p>Un programme source Vala se termine avec l'extension <i>.vala</i>. Une fois le code source précédent enregistré dans le fichier <i>hello.vala</i>, la compilation se réduit à la ligne suivante:
</p>]]></description></item><item><title>3.3 Examiner le code source généré</title><link>http://www.chicoree.fr/w/Premiers_pas_avec_Vala#Examiner_le_code_source_g.C3.A9n.C3.A9r.C3.A9</link><description><![CDATA[<p>Si vous le souhaitez, vous avez la possibilité de demander au compilateur <i>valac</i> de ne faire que la phase de <i>traduction</i> en C. Considérons le code du programme Vala suivant:
</p>]]></description></item><item><title>3.4 Appeler Vala à partir de C</title><link>http://www.chicoree.fr/w/Premiers_pas_avec_Vala#Appeler_Vala_.C3.A0_partir_de_C</link><description><![CDATA[<p>De façon un peu complémentaire, vous avez aussi la possibilité de demander la compilation <i>sans</i> édition de lien (option <i>-c</i> minuscule) et la génération d'un fichier d'en-tête <i>.h</i> (option <i>-H nom_de_fichier.h</i>) pour interfacer votre code Vala avec du code C:
</p>]]></description></item><item><title>4 Programmation orientée objets</title><link>http://www.chicoree.fr/w/Premiers_pas_avec_Vala#Programmation_orient.C3.A9e_objets</link><description><![CDATA[<p>Vala supporte un modèle de programmation orientée objets basé sur des classes et similaire à celui utilisé en C++, Java ou C#. En plus de la notion de classe, Vala utilise aussi des <i>interfaces</i> (comme en Java), et les <i>mixins</i> à la manière de Scala. Mais nous laisserons cela de côté pour cette introduction <a>[3]</a>.
</p>]]></description></item><item><title>4.1 Encapsulation, héritage</title><link>http://www.chicoree.fr/w/Premiers_pas_avec_Vala#Encapsulation.2C_h.C3.A9ritage</link><description><![CDATA[<p>Vala supporte un modèle de programmation orientée objets basé sur des classes et similaire à celui utilisé en C++, Java ou C#. En plus de la notion de classe, Vala utilise aussi des <i>interfaces</i> (comme en Java), et les <i>mixins</i> à la manière de Scala. Mais nous laisserons cela de côté pour cette introduction <a>[3]</a>.
</p>]]></description></item><item><title>4.2 Polymorphisme</title><link>http://www.chicoree.fr/w/Premiers_pas_avec_Vala#Polymorphisme</link><description><![CDATA[<p>Comme beaucoup de langages orientés objets, Vala supporte le <a>polymorphisme</a>. C'est à dire qu'un même appel de méthode peut donner lieu à l'exécution d'un code différent selon l'objet sur lequel il est effectué. On parle parfois aussi de résolution dynamique des appels, puisque le code exact à exécuter est déterminé à l'exécution et non pas à la compilation. Sauf que ... comme C++, pour des raisons d'efficacité, Vala laisse au programmeur le choix d'utiliser soit la résolution dynamique des appels de méthode (à l'exécution). Soit la résolution statique (à la compilation). À l'inverse, en Java la résolution est <i>toujours</i> dynamique. Concrètement, quelle est la différence? Un exemple sera plus clair pour tout le monde. Tout d'abord, définissons deux classes: <i>Animal</i> qui sera la classe de base et <i>Dog</i> une classe dérivée. Comme vous le verrez dans le code qui suit, chacune de ces classes introduit deux définitions de méthodes:
</p>]]></description></item><item><title>5 Gestion automatique de la mémoire</title><link>http://www.chicoree.fr/w/Premiers_pas_avec_Vala#Gestion_automatique_de_la_m.C3.A9moire</link><description><![CDATA[<p>Je l'ai dit un peu plus haut, Vala possède un opérateur <i>new</i> pour instancier de nouveaux objets. Mais (en temps normal) le programmeur n'a pas à se charger d'appeler <i>delete</i> pour les détruire explicitement. Parfait, vont me dire les programmeurs Java: il y a un ramasse-miette (<i>garbage collector</i>) chargé de libérer les objets quand c'est nécessaire. Et bien non, pas tout à fait...
</p>]]></description></item><item><title>5.1 En C++</title><link>http://www.chicoree.fr/w/Premiers_pas_avec_Vala#En_C.2B.2B</link><description><![CDATA[<p>Avant d'apporter plus d'explications, permettez moi de faire un retour rapide sur certaines stratégies d'allocation des objets utilisées dans différents langages. Ainsi, en C++, les objets peuvent être créés sur la <i>pile</i>. À la manière des variables locales:
</p>]]></description></item><item><title>5.2 En Java</title><link>http://www.chicoree.fr/w/Premiers_pas_avec_Vala#En_Java</link><description><![CDATA[<p>L'<i>oubli</i> du <i>delete</i>, son utilisation multiple sur un seul objet ou encore son utilisation sur un objet encore susceptible d'être utilisé par le programme entraînent des bugs difficiles à localiser. Fort de cette constatation, en développant Java, Sun a préféré doter son langage d'un mécanisme de gestion automatique de la mémoire:
</p>]]></description></item><item><title>5.3 Et pour Vala?</title><link>http://www.chicoree.fr/w/Premiers_pas_avec_Vala#Et_pour_Vala.3F</link><description><![CDATA[<p>Après cette longue digression, qu'en est-il pour Vala? Le choix fait par les développeurs de ce langage est d'essayer d'obtenir le meilleur des deux mondes. A savoir garantir l'appel d'un destructeur dès qu'un objet est inaccessible, et donc permettre l'utilisation du modèle de conception RIIA. Tout en donnant la liberté d'étendre la durée de vie d'un objet au dela du bloc où il est alloué (allocation dynamique avec <i>new</i>). Et enfin en dispensant le programmeur d'appeler explicitement <i>delete</i> lorsque l'objet n'est plus accessible.
</p>]]></description></item><item><title>6 Multiparadigme</title><link>http://www.chicoree.fr/w/Premiers_pas_avec_Vala#Multiparadigme</link><description><![CDATA[<p>Vala fait parti de la mouvance des langages <i>multiparadigmes</i> – à la manière de <a>Scala</a>, par exemple. C'est  à dire que si Vala supporte un style de <i>programmation impérative orientée objets</i>, le langage ne l'impose pas. Il est tout à fait possible de faire de la <i>programmation procédurale</i> en Vala, comme on le ferait en C.
</p>]]></description></item><item><title>6.1 Fonctions anonymes et delegate</title><link>http://www.chicoree.fr/w/Premiers_pas_avec_Vala#Fonctions_anonymes_et_delegate</link><description><![CDATA[<p>Dans l'introduction de cette section, je faisais référence à l'utilisation de fermeture pour comparer deux valeurs. Prenons un exemple. Le code suivant – qui ne contient pas encore de fermeture – créé deux objets qui représentent deux enfants, avec leur âge et leur taille:
</p>]]></description></item><item><title>6.2 Fermetures</title><link>http://www.chicoree.fr/w/Premiers_pas_avec_Vala#Fermetures</link><description><![CDATA[<p>Mais les <i>fermetures</i> dans Vala ne sont pas que du sucre syntaxique autour des pointeurs de fonctions du C. Ce sont de <i>véritables</i> fermetures – avec l'accès aux variables locales du contexte de la définition:
</p>]]></description></item><item><title>7 Performances</title><link>http://www.chicoree.fr/w/Premiers_pas_avec_Vala#Performances</link><description><![CDATA[<p>Pour conclure ce tour d'horizon de Vala, un mot sur les performances du langage. C'est souvent un sujet prétexte à d'interminables discutions, et je ne veux pas trop entrer dans le débat ici. Vous trouverez sur internet quelques comparatifs entre Vala et d'autres langages proches <a>[5]</a> <a>[6]</a> <a>[7]</a>. Globalement, les résultats montrent que les performances sur la partie <i>opérationelle</i> du code (calcul intensif) sont très proches de celles d'un programme écrit en C. À l'inverse, Vala semble pénalisé sur les opérations liées au langage (création/destruction d'objets, appel de méthode d'interface, vérification de type, déclenchements de signaux). Une partie de ces résultats peuvent être imputé à l'infrastructure <b><a>GObject</a></b> (<i>GLib Object System</i>) sur laquelle Vala s'appuie. Un autre projet Gnome, <b><a>Dova</a></b> permettrait en principe d'améliorer ces aspect des choses. 
</p>]]></description></item><item><title>8 Ressources</title><link>http://www.chicoree.fr/w/Premiers_pas_avec_Vala#Ressources</link><description/></item><item><title>8.1 Vala</title><link>http://www.chicoree.fr/w/Premiers_pas_avec_Vala#Vala</link><description/></item><item><title>8.2 Mono</title><link>http://www.chicoree.fr/w/Premiers_pas_avec_Vala#Mono</link><description/></item></channel></rss>
