From e7b1d8b488c0a61c04a6bdae817020e1b3014356 Mon Sep 17 00:00:00 2001 From: Sébastien Dailly Date: Sun, 9 Feb 2014 12:05:40 +0100 Subject: 3 ways to use gtk with ocaml --- content/Informatique/vala.rst | 75 +++++++++++++++++++++++++++---------------- 1 file changed, 47 insertions(+), 28 deletions(-) (limited to 'content/Informatique/vala.rst') diff --git a/content/Informatique/vala.rst b/content/Informatique/vala.rst index 55d83f3..05aeeb7 100644 --- a/content/Informatique/vala.rst +++ b/content/Informatique/vala.rst @@ -7,6 +7,8 @@ Présentation de Vala :date: 2010-06-11 :tags: Libre, Programmation +.. default-role:: literal + 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 @@ -34,7 +36,10 @@ 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 : +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 définir un type de fonction pour un callback), une gestion *événementielle* (gérer le déclenchement de plusieurs méthodes dans @@ -46,10 +51,15 @@ 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 `_ qui explique la structure du langage en -détail, qui présentent des exemples détaillés. La GLib Le langage est basé sur +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, +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 `_). Cela rejoint l'histoire de Vala puisque La GLib est tout utilisée par les développeurs Gnome (on constate d'ailleurs que @@ -60,7 +70,11 @@ Python : la GLib est avant tout destinée à des développeurs C, et beaucoup de 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 +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 @@ -68,7 +82,8 @@ 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) : +définissant la méthode `execl` (issue du fichier +`/usr/share/vala/vapi/posix.vapi`) : :: @@ -83,30 +98,34 @@ et voici la signature de la méthode C correspondante : Les types primitifs de la GLib étant basés sur les types primitifs C 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… -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 +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 : + +.. code-block:: console + + $ 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 +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. -- cgit v1.2.3