aboutsummaryrefslogtreecommitdiff
path: root/content/Informatique/vala.rst
diff options
context:
space:
mode:
Diffstat (limited to 'content/Informatique/vala.rst')
-rwxr-xr-xcontent/Informatique/vala.rst121
1 files changed, 57 insertions, 64 deletions
diff --git a/content/Informatique/vala.rst b/content/Informatique/vala.rst
index 7ca8e8e..55d83f3 100755
--- a/content/Informatique/vala.rst
+++ b/content/Informatique/vala.rst
@@ -13,20 +13,20 @@ 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
+Vala comme un moyen de mettre un pied dans le C. Je vais essayer 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
+Le langage Vala a é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
+quelque 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
+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.
@@ -35,45 +35,40 @@ 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 ) :
+on y retrouve des *interface* (pour pouvoir moduler le code facilement), des
+*delegate* (qui permettent 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 ne 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) :
::
@@ -87,7 +82,7 @@ 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.
+correspondants, 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…
@@ -97,7 +92,7 @@ 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
+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
@@ -122,12 +117,12 @@ 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 ) :
+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 )
+ embarquement de bibliothèques qui ne nous intéressent pas forcément.
+ (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
@@ -137,17 +132,15 @@ limitations ( qui ne sont bien sûr pas insurmontable ) :
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.
+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 prends 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.