Vala est un langage de programmation assez récent (2006) visant à simplifier l’écriture de programmes en C avec la bibliothèque GObject en fournissant une surcouche complète au C ; en utilisant une syntaxe proche de celle du C#.
Le programme Vala sera traduit en C avant d’être compilé par un compilateur C standard, le code résultant étant du C pur utilisant uniquement un lot de bibliothèques supplémentaires.
Cependant, Vala n’est pas vraiment un préprocesseur C puisque il va bien au delà de l’automatisation de l’écriture des classes GObject : il fournit une syntaxe orientée objet complète et une gestion de la mémoire automatique via le compte de référence des objets.
L’avantage majeur de Vala par rapport à d’autres langages orientés objet connus comme le C#, Java ou même le C++ est de n’être qu’une « façon d’écrire du C » : l’ABI est entièrement compatible avec le C. Un autre avantage est une rapidité proche de celle du C pur, bien que la gestion automatique de la mémoire via le compte de références et l’impossibilité d’effectuer certaines optimisations manuelles freine un peu le programme, mais pas de façon significative en général.
De plus, de par sa compatibilité binaire avec le C, il n’est pas étonnant d’apprendre qu’un assez grand nombre de bibliothèques sont disponibles pour Vala, rendant ce langage tout à fait viable.
Comme Vala est traduit en C, il est intéressent de remarquer qu’il est tout à fait possible de combiner des parties écrites en Vala et d’autres en C au sein d’un même programme, et même d’un même objet binaire. De plus, le code généré a une API propre, semblable à la plupart des bibliothèques basées sur GObject, le rendant parfaitement utilisable au sein d’un code C.
Le plus intéressent étant bien sûr de programmer certaines parties sensibles directement en C et de créer une interface pour Vala, chose assez aisée via les fichiers d’API Vala (.vapi).
Du côté obscur, Vala souffre encore de quelques imperfections de jeunesse, comme un manque de documentation pour certaines choses.
De plus, je ne pense pas que soit actuellement un langage de premier choix pour quelqu’un ne connaissant pas le C (il ne tirera pas partie des avantages de compatibilité de Vala) et voulant simplement un langage proposant une syntaxe orientée objet ; car les principaux avantages de Vala se situent justement dans sa compatibilité avec le C et sa rapidité.
Salut,
Une info sur la popularité de Vala ? Car s’il est peu répandu et peu connu/utilisé, son intérêt devient relativement mince pour le développement d’une bibliothèque malgré ses avantages, que je trouve fort appréciables par ailleurs.
Chouette article, mais il manque peut-être d’un code en Vala pour l’exemple ? 🙂
Salut,
Vala n’est pas (encore) très populaire à ma connaissance, mais je ne comprends pas trop ta remarque : comme je le dis dans l’article, Vala est traduit en C et compilé par un compilateur C ; il est donc tout à fait possible d’utiliser une bibliothèque écrite en Vala au sein d’une application en C. Bon, dans la pratique mieux vaut que l’application en C utilise elle aussi GObject, mais ce n’est pas obligatoire.
Pour l’exemple, tu as raison, ça manque ; je vais essayer d’en concocter un un tantinet intéressent. Sinon en attendant, voici le lien vers les exemples sur le site officiel : http://live.gnome.org/Vala#head-9c728d151a2a0483d4f3b5837e5b545df9d8499d
Hum, disons que je ne suis pas très au courant sur la qualité du code C généré, je supposais que c’était imbouffable… ? Si en plus le code généré est utilisable et offre une syntaxe sympathique (cohérente avec le code source Vala initial), ça peut devenir déjà plus intéressant.
Le code généré par Vala est assez imbuvable, mais l’API est très propre. Comprendre que tant que l’on ne va pas lire les fichiers, tout va bien. 😀
Et, oui, l’API du code généré ressemble beaucoup à celle de Vala. Ceux qui connaissent GTK+ par exemple ne seront pas du tout déroutés pas l’API générée.
J’ai rajouté ça dans l’article 🙂