Gambas, c'est quoi ?
Introduction
 |
La nouvelle mascotte de Gambas 2 |
Gambas est un langage orienté objet dont l'environnement de développement est construit sur un interpréteur BASIC. Il est disponible sous la licence publique générale GNU.
Son architecture s'inspire largement de celle de Java. Ainsi Gambas est constitué:
- D'un compilateur.
- D'un interpréteur.
- D'un archiveur.
- D'un scripteur.
- D'un environnement de développement.
- De nombreux composants.
Le compilateur est un petit exécutable rapide écris en C:
- Il arrive à compiler environ 128000 lignes de codes par seconde sur mon Athlon 2000. Cela permet un développement incrémental (coder, compiler, tester) rapide.
- Il n'optimise quasiment pas le code pour le moment, l'optimisation reposant essentiellement sur l'interpréteur lors de l'exécution.
- Il gère et compile les traductions en utilisant les outils GNU gettext.
L'interpréteur est un petit exécutable écrit lui-aussi en C qui pèse moins de 180 ko:
- Il fournit toutes les fonctionnalités natives du langage en permettant un accès indirect à pratiquement toutes les fonctionnalités natives de la glibc POSIX.
- Il charge les classes à la demande, en optimisant le "bytecode" la première fois qu'il est exécuté.
- Les liaisons entre classes sont faites entièrement à l'exécution, et le plus tard possible. De cette façon, un gros exécutable démarre quand même rapidement.
Enfin, l'archiveur est un programme qui créé un exécutable Gambas à partir d'un répertoire projet de Gambas.
 |
Notez qu'un exécutable Gambas est simplement une archive non compressée d'un projet. Il peut inclure n'importe quel type de fichier, pas seulement du bytecode compilé. L'interpréteur y accède en interne comme à un système de fichier.
|
Le langage Gambas
Les caractéristiques principales du langage BASIC de Gambas sont:
- Environ 250 mots-clefs et fonctions natives pour gérer a peu près tout: arithmétique, chaînes de caractères, entrées-sorties, fichiers, gestion du temps...
- Gestion complète des erreurs.
- Gestion des processus et des pseudo-terminaux.
- Support pour surveiller les descripteurs de fichiers d'entrée-sortie.
- Support des boucles d'évènements avec des timers.
- Support natif de l'UTF-8.
- Internationalisation complète et gestion de la traduction.
- Possibilité d'appeler les fonctions des bibliothèques partagées du système.
Mais Gambas est aussi un véritable langage orienté objet, possédant:
- Objets et classes.
- Propriétés, méthodes, constantes et évènements.
- Des symboles publics et privés.
- Des appels de méthodes virtuels.
- Un héritage simple.
- Constructeurs et destructeurs.
- Accesseurs de tableaux, énumérateurs, et objets triables.
Le mécanisme d'héritage de gambas est entièrement dynamique et vous permet de:
- Créer une version plus spécialisée d'une classe déjà existante.
- Réimplémenter une classe et l'étendre.
- Surcharger les méthodes ou les propriétés d'une classe.
N'importe quelle classe peut être héritée, réimplémentée ou surchargée, même les classes natives écrites en C/C++.
Finalement, il existe une classe native appelée Observer, qui vous permet d'intercepter tous les évènements générés par n'importe quel objet.
Un langage extensible
Le coeur de Gambas, l'interpréteur, est un programme en ligne de commande. Toutes les autres fonctionnalitées sont fournies par les composants,
qui sont un ensemble de classes écrites en C/C++, ou bien directement en Gambas.
Ces composants fournissent entre autres:
- L'accès à de nombreux systèmes de base de données: MySQL, PostgreSQL, SQLite, Firebird, ODBC.
- L'interface graphique à partir des toolkits QT ou GTK+.
- La programmation réseau avec la gestion des protocoles Internet: HTTP, FTP, SMTP, DNS.
- La programmation SDL.
- La programmation OpenGL.
- La programmation XML.
- La programmation CGI avec une gestion des sessions.
 |
Au jour d'aujourd'hui, l'ensemble de ces fonctionnalitées est couverte par 351 classes et 4197 symboles seulement.
Il y a donc un petit nombre de concepts à apprendre lorsque l'on compare avec d'autres langages. De plus, nous essayons de rendre les noms de ces symboles aussi cohérents que possible.
Tout cela rend Gambas relativement simple à apprendre.
|
Les composants écrits en C/C++ sont stockés dans des bibliothèques partagées, et les composants écrits en Gambas sont simplement des projets Gambas tout ce qu'il y a de normaux.
Ils sont chargés par l'interpréteur au démarrage du programme ou à la demande pendant l'exécution.
Développer un composant en C/C++ est un peu comme développer un pilote matériel pour le noyau Linux:
- Le code source du composant est situé dans l'arbre de source de Gambas.
- Le composant et l'interpréteur communiquent au moyen d'une interface de programmation (API).
- Ils sont exécutés dans l'environnement de l'interpréteur et ne peuvent pas faire tout ce qu'ils veulent.
La documentation traitant de l'écriture des composants n'est pas encore terminée, mais toute l'aide nécessaire sera apportée sur la mailing-list des développeurs.
Un langage de script
Gambas est depuis peu utilisable en tant que langage de script.
Cette fonctionnalité est fournie par le scripteur, un petit exécutable Gambas qui vous permet d’envoyer n'importe quel code Gambas dans un fichier texte.
Voici un petit exemple de script :
#!/usr/bin/env gbs2
' Ce script retourne la mémoire réellement utilisée par le système, le cache et le swap sont exclus.
FUNCTION GetUsedMemory() AS Integer
DIM sRes AS String
DIM aRes AS String[]
DIM cVal AS NEW Collection
DIM sVal AS String
EXEC ["cat", "/proc/meminfo"] TO sRes
FOR EACH sVal IN Split(sRes, "\n", "", TRUE)
aRes = Split(sVal, " ", "", TRUE)
cVal[Left$(aRes[0], -1)] = CInt(aRes[1])
NEXT
RETURN cVal!MemTotal - cVal!MemFree - cVal!Buffers - cVal!Cached + cVal!SwapTotal - cVal!SwapFree - cVal!SwapCached
END
PRINT Subst("Mémoire utilisée: &1 Kb", GetUsedMemory())
Indépendance avec les bases de données, l'interface graphique et le bureau
Les composants de Gambas ne se contentent pas d'être de simple "bindings" de bibliothèque. Ils fournissent autant que possible une abstraction de l'interface des bibliothèques sous-jacentes, afin de gagner en cohérence et en simplicité.
Par conséquent, avec Gambas, vous pouvez écrire des programmes qui sont:
- Indépendants du système de base de données sous-jacent: toute les bases de données sont accédées à travers la même API.
- Indépendants du toolkit graphique: le composant QT et le composant GTK+ ont la même interface.
Ainsi, Gambas fournit un outil de gestion de base de données qui vous permet :
- D'éditer et gérer n'importe quelle base de données, du moment qu'il y a un composant pour celle-ci.
- D'utiliser le toolkit QT quand on l'exécute à partir de KDE, et le toolkit GTK+ quand on le lance à partir de Gnome ou XFCE.
 |
 |
| Le gestionnaire de base de données sous KDE |
Le gestionnaire de base de données sous XFCE |
De plus, nous essayons de fournir aussi une indépendance vis-à-vis des différent bureaux, par :
- L'utilisation de thèmes d'icônes accordés à l'environnement de bureau courant (KDE, Gnome ou XFCE).
- Un composant, gb.desktop, basé sur les scripts shell provenant du projet Portland.
L'Environnement de Développement
Gambas fournit un environnement de développement intégré complet, lui-même écrit en Gambas.
Vous pouvez créer des formulaires, insérer des contrôles simplement en les dessinant, éditer votre code, et faire de multiples autres chose comme n'importe quel autre système de développement rapide.
 |
 |
| L'IDE en mode création |
L'IDE en mode déboguage |
L'environnement de développement de Gambas fournit les fonctionnalités suivantes:
- Coloration syntaxique du code Gambas, de l'HTML et des CSS.
- Autocomplétion.
- Éditeur de formulaires.
- Débogueur intégré.
- Éditeur d'icones.
- Traducteur de chaînes de caractère.
 |
 |
 |
| L'éditeur de code source |
L'éditeur d'icones |
La boite de dialogue de traduction |
- Support de Subversion.
- Gestionnaire de base de données
- Documentation en ligne provenant directement de la documentation wiki.
- De nombreux programmes d'exemple.
 |
 |
 |
|
Les trois premiers onglets de la boite de dialogue des propriétés d'un projet.
|
De plus, il peut générer les paquets d'installation de nombreuses distributions, ainsi que des paquets d'installation tar.gz basés sur les "autotools" de GNU.
Les distributions GNU/Linux suivantes sont supportées:
- Debian.
- Fedora.
- Mandriva.
- SuSE.
- Slackware.
- Ubuntu.
 |
Les paquets générés par l'IDE fonctionnent seulement si la distribution cible a correctement empaqueté Gambas comme indiqué sur la page How To Package Gambas du wiki. Ce n'est malheureusement pas toujours le cas pour le moment.
|
Enfin, même si l'environnement de développement est très lié au langage Gambas, il n'est formellement pas nécessaire de l'utiliser pour créer des programmes Gambas.
Problèmes
Afin que personne ne puisse dire que cet essai ressemble à de la publicité :-), nous devons mentionner qu'il y a encore quelques limitations à Gambas.
Les principales sont:
Gambas est seulement une application 32 bits, et donc ne s'exécute pas nativement sur les systèmes 64 bits. Ce n'est plus vrai !
- Certaines fonctionnalités sont manquantes dans le langage: déclaration d'énumération et support des structures.
- Le composant GTK+ n'est pas complètement terminé, et par conséquent l'indépendance vis-à-vis du toolkit graphique n'est pas parfaite.
Heureusement, le but est de résoudre ces problèmes pour la prochaine version.
Le Futur
...n'est pas prévisible, et encore moins celui de Gambas.
Grâce a un script Perl utilisant les modules Positronic::Variables et Quantum::Superposition, nous avons réussi à savoir ce que la prochaine version devrait apporter:
- Le support de DBus.
- L'intégration du gestionnaire de base de donnée dans l'environnement de développement.
- Un éditeur de rapports intégré à l'EDI.
- Le support de QT4 et Cairo.
- Le support de KDE4.
- Un meilleur composant gb.desktop.
- La génération de documents OpenOffice.
 |
Gambas est un logiciel libre. Donc, contrairement aux logiciels propriétaires, ce qui est promis peut ne pas être toujours délivré à temps, voire pas du tout. :-)
|
Téléchargement de Gambas et autres liens
Vous pouvez télécharger Gambas à http://gambas.sourceforge.net/download.html.
Pour plus d'informations sur Gambas, voici quelques liens:
Vous pouvez rapporter les problèmes et les bogues sur les mailing-lists ou sur le bug tracker à
http://gambasrad.org.
Nous espérons que vous éprouverez autant de plaisir avec Gambas que nous ! :-)
Benoît Minisini
"Lorsque vous voulez faire quelque chose, vous avez contre vous tous les gens qui font la même chose, tous ceux qui font le contraire, et la très grande majorité des gens qui ne font rien." - Confucius.
Version française: Fabien Bodard, Laurent Carlier, Benoît Minisini.
Document original en anglais, et autres traductions: http://gambasdoc.org/help/doc/release?en