summaryrefslogtreecommitdiff
path: root/content/Informatique/vala.rst
diff options
context:
space:
mode:
Diffstat (limited to 'content/Informatique/vala.rst')
-rwxr-xr-xcontent/Informatique/vala.rst153
1 files changed, 153 insertions, 0 deletions
diff --git a/content/Informatique/vala.rst b/content/Informatique/vala.rst
new file mode 100755
index 0000000..7ca8e8e
--- /dev/null
+++ b/content/Informatique/vala.rst
@@ -0,0 +1,153 @@
+.. -*- mode: rst -*-
+.. -*- coding: utf-8 -*-
+
+Présentation de Vala
+####################
+
+:date: 2010-06-11
+:tags: Libre, Programmation
+
+J'ai découvert une présentation du langage dans GLMF n°127 qui
+l'utilisait pour se brancher sur le pare-feu. Cela ayant aiguisé ma
+curiosité, j'ai cherché à en savoir davantage sur le langage. Le langage
+C m'a toujours paru difficile à aborder. Non pas au niveau de sa
+syntaxe, mais au sujet de l'accès à sa documentation et aux librairies
+disponibles. Pour moi qui suis habitué à Java ou à Python, j'ai regardé
+Vala comme un moyen de mettre un pied dans le C. Je vais essayé de
+présenter ma manière de le voir, après avoir fait une petite plongée
+dedans…
+
+Présentation
+~~~~~~~~~~~~
+
+Le langage Vala à été créé par les développeurs de Gnome pour qu'ils
+puissent disposer d'un langage de haut niveau. Gnome ayant eu pendant
+quelques temps un pied ( dansant ) dans mono, Vala en est très inspiré.
+( Je ne connais pas mono et ne peux donc pas lancer de comparatif, je
+vous renvoie donc à celui présenté par Gnome `par rapport à
+C# <http://live.gnome.org/Vala/QuickIntroForCSharpProgrammers>`_, et
+pour `Java <http://live.gnome.org/Vala/ValaForJavaProgrammers>`_ ). Le
+langage est ensuite compilé en C, et GCC est utilisé pour la compilation
+d'un exécutable. On est donc dans un langage intermédiaire, qui reste
+très proche du C comme nous allons le voir par la suite.
+
+Analyse
+~~~~~~~
+
+Langage objet haut niveau Vala est tout d'abord un langage haut niveau :
+on y retrouve des *interface* ( pour pouvoir moduler le code facilement
+), des *delegate* ( qui permettent de de définir un type de fonction
+pour un callback ), une gestion *événementielle* ( gérer le
+déclenchement de plusieurs méthodes dans le code par un appel unique ) …
+On dispose donc d'un langage objet assez riche pour éviter d'avoir
+passer du temps sur des détails et se concentrer sur le programme et son
+déroulement. Il est pensé objet et l'on retrouve vite ses marques, tout
+comme l'on sent qu'il est assez facile d'« abstraire » le code pour
+faire une application qui n'en reste pas un simple script… Je n'ai pas
+envie de détailler la syntaxe du langage et tout ce qu'il intègre car
+vous pourrez trouver tout cela en ligne. Je vous renvoie au
+`tutoriel <http://live.gnome.org/Vala/Tutorial>`_ qui explique la
+structure du langage en détail, qui présentent des exemples détaillés.
+La GLib Le langage est basé sur la GLib, la librairie standard utilisé
+dans les applications GTK. La plupart des types primitifs ( int… ) sont
+donc en réalités des types issus de cette librairie ( gint…). On accède
+ainsi à l'ensemble des méthodes de la GLib, diffusées sous formes de
+classes objets et bien documentées ( la
+`valadoc <http://valadoc.org/index.html>`_ ). Cela rejoint l'histoire de
+Vala puisque La GLib est tout utilisée par les développeurs Gnome ( on
+constate d'ailleurs que la plupart des composants Gnome ont une entrée
+dans cette Valadoc ). Il ne faut cependant pas croire que l'on dispose
+avec cette bibliothèque standard d'un ensemble de routines aussi riche
+que dans le package standard d'un Java ou d'un Python : la GLib est
+avant tout destinée à des développeurs C, et beaucoup des méthodes
+standard du C n'y sont pas disponibles. Pour parer cela, Vala propose
+une classe POSIX[LIEN] proposant les méthodes standard du C, mais
+celle-ci n'est pas exhaustive et il nous arrive souvent de tomber sur
+une fonction qui ne nous est pas accessible via le langage haut niveau
+qu'est Vala. Les Bindings Pour répondre à cela, propose la possibilité
+de mettre en place un binding vers une libraire C de manière native. (
+Normal me direz vous, le code en sortie de Vala est du C ! ) On peut
+donc très facilement utiliser n'importe quelle libraire existante. Vala
+étant un langage objet, il devient donc possible d'utiliser les
+librairies standard au sein d'un code objet de haut niveau. Cela ne
+demande que quelques lignes, demandant au minimum le fichier dans lequel
+se trouve la définition de la méthode, et sa signature. Exemple du
+binding définissant la méthode execl ( issue du fichier
+/usr/share/vala/vapi/posix.vapi ) :
+
+::
+
+ [CCode (cheader_filename = "unistd.h")]
+ public int execl (string path, params string[] arg);
+
+et voici la signature de la méthode C correspondante :
+
+::
+
+ extern int execl (__const char *__path, __const char *__arg, ...) __THROW __nonnull ((1));
+
+Les types primitifs de la GLib étant basés sur les types primitifs C
+correspondant, il n'y a pas de problème de cast dans la plupart de cas.
+Toutefois, Vala utilise des char\* pour définir ses string : il est
+parfois nécessaire de mettre en place faire un cast quand une méthode
+nous un char[] : même dans le code haut niveau, le C n'est jamais loin…
+C'est souvent frustrant de devoir mettre en place un binding pour une
+fonction disponible en standard dans la libc. Je pense qu'il manque la
+possibilité d'inclure directement du code C dans le code vala, tout
+comme il est possible directement de l'assembleur dans du C. Cela
+permettrait un confort dans l'utilisation qui n'est pas disponible
+actuellement. À noter qu'un outil permet de mettre en place ces bindings
+pour les composants basés sur GObjet ( Gnome toujours… ). De plus de
+nombreux bindings sont disponibles pour les composants Gnome. Attention,
+cela n'empêchera pas d'avoir à installer les headers C correspondants !
+Les profils Il est possible d'utiliser des profils de compilation. Cette
+option encore expérimentale a été mise en place pour répondre à des
+réclamations de la part des utilisateurs qui voulaient programmer en
+Vala sans avoir de dépendances envers la GLib. Ainsi, il est possible
+d'appeler le compilateur avec la syntaxe suivante :
+
+::
+
+ valac --profile posix
+
+ce qui a pour conséquence de réduire le jeu de bibliothèque par défaut à
+celles disponibles dans la classe POSIX. Cela permet de limiter les
+dépendances du programmes, mais beaucoup de types standard de Vala
+deviennent de ce fait indisponible; on sent bien que le langage n'a pas
+été pensé pour ça.
+
+Conclusion
+~~~~~~~~~~
+
+Pour résumer, je dirais que Vala correspond à ce qu'il annonce : un
+langage haut niveau pour faciliter la création d'applications Gnome. Dès
+que l'on cherche à sortir de ce cadre, on se retrouve confronté à des
+limitations ( qui ne sont bien sûr pas insurmontable ) :
+
+- Pour ceux qui ne cherche pas à travailler sur du code Gnome,
+ embarquement de bibliothèques qui ne nous intéressent pas forcement.
+ ( Bien que sur ce point, la GLib est plutôt standard sur les PCs
+ ayant X d'installés )
+- Pour ceux qui cherchent un langage de haut niveau, le C est encore
+ trop présent entre les lignes pour pouvoir l'oublier complètement.
+ D'un autre côté, l'intégration du code C n'est pas toujours évidente
+ puisqu'elle oblige à déclarer des bindings pour des fonctions
+ standards.
+- Mais surtout, le fait que l'ensemble des fonctions de la libc ne
+ soient pas encore disponibles oblige à mettre le doigt dans les
+ bindings régulièrement.
+
+Le langage est bien sûr encore amené à évoluer, et les points que je
+cite ici ne sont pas pour autant rédhibitoires. D'un point de vue
+totalement subjectif Je trouve le langage simple mais sans trop de
+saveur. Ça reste un langage objet qui n'est bien sûr pas
+révolutionnaire; on sent qu'il ne fait que reprendre les concepts des
+langages qui l'ont inspiré, mais le produit est cohérent, et d'après les
+benchs génère un code plutôt optimisé ( en rapport avec le temps que
+l'on pourrait passer à produire le même code en C ). Après, je ne prend
+pas le même plaisir à programmer en Vala qu'en python ( j'avais bien dit
+que j'étais subjectif ^^ ). Cela dit, pour moi, qui ne suis pas un
+développeur Gnome, je suis plus intéressé par la possibilité d'avoir un
+langage haut niveau qui reste très proche du C, avec les performances
+qui vont avec; si le prix pour cela est une dépendance vers la GLib, ça
+reste un coût sommes toutes assez faible.