Depuis plusieurs mois, nous décrivons dans ces colonnes le langage Scheme. Cette description était générale et s'appuyait sur le standard de fait appelé
Revised4 Report On The Algoritmic Language Scheme.
Nous avons présenté les éléments importants du langage et tenté d'illustrer
cela par des exemples, comme un moteur base de données reposant sur les tables de hachage ou un simulateur de circuits électroniques logiques.
Nous entamons une nouvelle série d'articles qui sera plus spécifique à l'environnement de programmation OpenScheme. Dans ce premier article,
nous décrivons l'environnement au travers de son programme d'installation.
L'environnement OpenScheme est disponible sur le CD-ROM de Linux Magazine.
Introduction
Le standard de fait du langage Scheme est un rapport édité au MIT appelé Révisedx Repport on the Algoritmic Language Scheme, ou RxRS, où x est le numéro de la version. Actuellement, le rapport en est à sa cinquième évolution.
L'existence de ce rapport permet d'homogénéiser les implémentations Scheme et de les classifier. L'autre avantage majeur est la déconnexion entre la spécification du langage et les implémentations : Scheme n'appartient à personne et personne ne peut imposer des déviations au langage.
La norme la plus utilisée est la version R4RS. La dernière version ajoute principalement un système de macros extrêmement puissant que l'on ne trouve que dans Scheme. Les macros permettent d'ajouter des formes spéciales au langage, comme la forme classique do.while.
L'inconvénient de ce système de macros est qu'il est difficile à réaliser et qu'il ralentit la lecture des fichiers sources par l'interprète. C'est la raison principale qui explique pourquoi les environnements Scheme sont pour la plupart restés au R4RS, mais cela change !
Les neuf articles précédents sur le langage Scheme étaient une présentation générale du langage. Elle s'adressait à un public ne connaissant pas ce langage mais ayant des connaissances dans les langages de programmation.
Les articles étaient compatibles avec la norme R4RS. Les exemples présentés donnaient la mesure du langage : un moteur de base de données bâti sur les tables de hachage et un simulateur de circuits électroniques logiques.
La norme R4RS a le mérite d'unifier et de standardiser le langage dans son essence. Cependant, elle reste minimaliste. C'est pourquoi les articles s'orientent maintenant sur l'environnement de programmation OpenScheme. Ceci permettra d'aborder des points plus spécifiques comme la programmation orientée objet, les macros R5RS, l'affichage semi-graphique sur console ou bien la programmation graphique.
OpenScheme est un logiciel librement utilisable pour un usage personnel. Il fonctionne sur plates-formes Intel sous Linux, FreeBSD, BeOS et Windows et permet le portage immédiat des applications. D'autres systèmes sont planifiés dans l'année qui vient, comme PowerPC, Alpha et Sparc.
Ce premier article est consacré à l'installation de l'environnement.
Obtenir OpenScheme
OpenScheme est librement accessible sur le site Web de Erian Concept à l'adresse www.open-scheme.com.
Dans la section [download], choisissez osm-Linux-i586-x.x.tgz où x.x est le numéro de la version. Au moment de la rédaction de cet article, la version disponible est la 1.3 (la version 1.3.1 est dans le four !).
Ceci ramène le fichier chez vous. Ensuite, il faut ramener le fichier osm-common-x.x.tgz, qui rassemble la partie commune à tous les environnements.
Placez les archives dans un répertoire initialement vide et décompactez-les avec la commande
$ tar xvfz osm*.tgz
Une fois que les archives sont décompactées, il vous faut obtenir un numéro de licence (voir section suivante).
Le CD-ROM de Linux Magazine possède aussi une version d'OpenScheme déjà décompactée.
Pour obtenir des informations, vous pouvez consulter le forum inews.netultra.net : c'est un serveur de news utilisé pour les annonces non officielles et pour le support. Pour ajouter ce serveur facilement dans votre navigateur, cliquez sur le lien dans la page Web.
Numéro de licence
OpenScheme demande un numéro de licence pour fonctionner, même en mode démonstration.
Le numéro de licence a été introduit avec la version 1.3 pour conserver l'adresse e-mail des utilisateurs de l'environnement. Cette adresse sera utilisée par la suite pour envoyer des informations importantes et ne sera pas exploitée commercialement, sous aucune forme.
Ce numéro de licence est généré à partir d'un formulaire à remplir sur le Web, à l'adresse suivante :
http://www.open-scheme.com/register.htm
La version livrée avec Linux Magazine n'a pas besoin de numéro de licence.
Le numéro de licence est généré à partir d'un script CGI écrit . en OpenScheme. Ce script maintient une base de données sur le site et gère le courrier envoyé aux utilisateurs. Nous aurons l'occasion de revenir sur les CGI.
Maintenant, l'installation peut commencer !
Installation
Démarrage
L'installation est lancée avec la commande :
$ ./install.sh numéro
dans le répertoire où les archives ont été décompactées. Le numéro à donner en argument est le numéro de licence obtenu sur le Web ou 0, pour ce qui est de la distribution du CD-ROM de Linux Magazine.
Si vous avez un problème d'affichage, vous pouvez lancer l'installateur en mode ligne de commande en tapant :
$ ./install.sh -term numéro
Dans ce mode, l'affichage semi-graphique n'est pas utilisé et l'interface est en mode ligne de commande.
Hello
Le premier écran de l'installateur est affiché :
Ce programme d'installation est livré en Scheme et il est interprété. Il aurait tout aussi bien pu être compilé sous la forme d'un binaire, mais de cette manière, il peut servir d'exemple.
C'est un programme sophistiqué utilisant le système orienté objets d'OpenScheme, l'interface console, les timers pré-emptifs et les fichiers d'initialisation. Le programme est install.osm, dans la racine du répertoire d'installation.
La configuration de l'installation est effectuée à partir du fichier install.ini. C'est un fichier reprenant le format des anciens fichiers de configuration .ini de Windows. Cependant, ce format a été étendu afin de permettre d'y écrire du code Scheme.
Ce fichier contient toutes les informations à afficher et les fichiers à installer. Il peut être modifié à loisir. Dans la version actuelle, les fichiers ne sont pas compressés dans l'archive et l'installateur se contente de les copier dans le répertoire de destination. Les versions futures permettront l'usage d'archives compressées.
La navigation entre les boutons et les options, quand il y en a, se fait à l'aide des touches fléchées.
A tout moment, il est possible de terminer l'installation en sélectionnant le bouton <CANCEL>. Pour valider un panneau, sélectionnez <OK> et appuyez sur [ENTER]. Pour revenir au panneau précédent, sélectionnez <BACK>.
Répertoire source et destination
Le panneau suivant demande de sélectionner le source. En général, vous avez lancé install.sh depuis le répertoire où les archives ont été décompactées ; il faut donc laisser le répertoire point.
Le panneau suivant demande le répertoire de destination :
Vous pouvez aller dans la zone d'édition avec les touches fléchées et entrer le répertoire choisi. Validez avec [ENTER], puis sélectionnez <OK>.
Eléments principaux
L'étape suivante consiste à sélectionner les principaux éléments d'OpenScheme, comme les exécutables ou la documentation :
Les éléments à sélectionner se présentent sous la forme d'une liste verticale. Pour sélectionner ou désélectionner un élément, pressez [SPACE]. Lorsque la sélection est effectuée, allez sur <OK> et pressez [ENTER].
La sélection effectuée à ce moment de l'installation conditionne les panneaux suivants.
Système d'exploitation
La sélection suivante propose de choisir la version des exécutables à installer, par rapport au système d'exploitation :
La version actuelle d'OpenScheme supporte aussi BeOS et FreeBSD. La portabilité des programmes OpenScheme est absolue et immédiate : par exemple, le programme d'installation est identique pour tous les systèmes d'exploitation supportés.
L'un des points cruciaux est le portage de la bibliothèque graphique, qui diffère complètement d'un OS à l'autre. Lorsqu'OpenScheme est porté dans un nouvel environnement, c'est en général l'interface graphique qui est traduite en dernier. C'est le cas maintenant pour BeOS. Cependant, l'interface graphique repose sur un module écrit en C, assez restreint, appelé OK, qui est seul à porter. Le reste de la librairie graphique écrite en Scheme Objet est alors immédiatement disponible.
Type de binaires
L'installateur propose ensuite de sélectionner le type des binaires à installer :
Trois types de binaires existent. La première version est optimisée et n'effectue aucune vérification de typage. La vitesse est optimale. Cette version est à utiliser en phase terminale d'un développement. Le nom des binaires optimisés se termine par le caractère _.
Le second type de binaires effectue le contrôle dynamique des types de données. Cette version est un peu plus lente que la précédente et on l'utilisera en phase intermédiaire d'un développement. Les binaires de ce type se terminent par _c (pour check).
Enfin, le troisième type de binaires permet le débogage symbolique avec le débogueur ligne de commande intégré d'OpenScheme. C'est la version la plus lente, à n'utiliser que lors de la mise au point des programmes. Les binaires de ce type ont comme suffixe _cd (pour check, debug).
Type de liaison
Les bibliothèques d'extension d'OpenScheme peuvent être liées de deux manières, soit statiquement, soit dynamiquement. Le panneau suivant propose de sélectionner le type de bibliothèques à installer :
Lorsque les bibliothèques sont liées statiquement, l'exécutable est plus volumineux et ses fonctionnalités sont fixées une fois pour toutes. Pour ajouter des fonctionnalités, il est nécessaire de lier à nouveau, avec le linker, les bibliothèques et les fichiers objets pour obtenir un nouvel exécutable. Les binaires statiques commencent par le caractère _. Sous Windows, ils s'appellent dosm_*.
Les fonctionnalités de la version dynamique d'OpenScheme peuvent être étendues sans fin par l'adjonction de nouvelles bibliothèques, qui seront liées dynamiquement à l'exécutable. Les modules d'extension, ou plugins, sont chargés et liés dynamiquement dans l'environnement, sur demande.
Le démarrage de la version dynamique est un peu plus lent et il nécessite la définition de variables d'environnement comme LD_LIBRARY (Unix) ou PATH (Windows).
Bibliothèques à installer
OpenScheme est composé de trois éléments distincts :
- la bibliothèque de bas niveau libgdw, qui contient les interactions avec le système d'exploitation ;
- la bibliothèque libosm, qui implémente les fonctions des normes R4RS, R5RS et qui contient le compilateur, le codeur et le débogueur ;
- les bibliothèques d'extension ou plugins, comme le système orienté objet ou la bibliothèque graphique. En général, les sources des plugins sont données.
Les plugins permettent l'extension sans limite de l'environnement. Ils sont écrits en Scheme et peuvent utiliser du code C ou tout autre langage pouvant être lié au C.
Les deux panneaux suivants permettent de sélectionner les plugins à installer :
Les plugins proposés sont :
- OF : La bibliothèque OF permet d'importer les fonctions d'un module dynamique (DLL), quel que soit le langage utilisé pour l'écrire.
- OO : Moteur Orienté Objet de l'environnement. Il est basé sur le Common Lisp Object System (CLOS), mais en beaucoup plus simple.
- OC : Cette bibliothèque rassemble les fonctions nécessaires à l'affichage semi-graphique sur une console. Elle ressemble à la bibliothèque conio de Borland.
- OOC : Couche orientée objet de OC implémentant des gadgets semi-graphiques.
- OK : C'est la bibliothèque graphique de bas niveau. Elle rassemble les fonctionnalités essentielles pour gérer les fenêtres graphiques.
- OOK : Cette librairie repose sur la précédente. Elle est entièrement écrite en Scheme Objet et implémente les gadgets usuels comme les boutons, les listes, etc.
- OE : Permet de lancer plusieurs processus OpenScheme et établit les communications et les synchronisations avec eux. Pour l'instant, les processus sont lancés sur la même machine. Cette bibliothèque peut aussi être utilisée pour lier OpenScheme à un programme C.
Le second panneau de sélection des plugins est alors affiché :
Les plugins maintenant proposés sont :
- OP : Permet la gestion des fichiers d'initialisation .ini.
- OR : Bibliothèque comprenant un compilateur d'expressions régulières.
- OS : Interface unifiée avec le système d'exploitation. Permet de copier / déplacer / supprimer des fichiers ou des hiérarchies ou de modifier les droits. L'accès aux fichiers se fait selon le format Unix, quel que soit le système d'exploitation.
- OSD : Moteur base de données relationnelle basé sur les index b+tree. Permet de gérer des fichiers de plus de 4Go, des objets de taille variable, des index répartis sur plusieurs champs, etc.
- OT : Bibliothèque des Timers. Un timer permet d'exécuter une fonction à intervalle régulier. Les timers d'OpenScheme sont compatibles avec les threads. C'est-à-dire que le système est entièrement ré-entrant. La bibliothèque est actuellement en test.
- NET : Accès aux fonctions réseau, comme les sockets, le mail, les CGI, etc.
Documentation et suivants
Le panneau suivant permet la sélection de la documentation à installer :
La page de manuel explique les options de la ligne de commande des exécutables.
Le manuel de référence et le guide de l'utilisateur sont en anglais et totalisent 450 pages. Le tutorial est en français. C'est une concaténation des articles sur Scheme parus dans Linux Magazine.
Le panneau qui suit permet de sélectionner les formats de documentation à installer. Les formats disponibles pour les livres sont PostScript, HTML, texte et PDF. Dans les versions de démonstration, seuls les formats texte et HTML sont accessibles.
Le panneau suivant permet la sélection des outils liés à l'environnement à installer sur le disque. Pour l'instant, seuls l'installateur et l'éditeur de texte JED sont disponibles. Par la suite, on y trouvera les composants de l'environnement de programmation intégré d'OpenScheme.
Copie des fichiers
Lorsque les éléments à installer ont été sélectionnés, l'installateur commence à copier les fichiers dans le répertoire de destination :
Les fichiers copiés défilent dans la partie haute de la fenêtre et les curseurs indiquent la progression de l'installation.
Démarrage
Pour lancer OpenScheme après l'installation, il est nécessaire de positionner un certain nombre de variables d'environnement.
Cela est fait de manière automatique par un Shell qui se situe dans le répertoire dest/Linux-i586/bin/set-env.sh, où dest est le répertoire de destination. Pour positionner les variables, tapez :
$ source dest/Linux-i586/bin/set-env.sh
Pour vérifier que l'environnement a bien été modifié, tapez alors :
$ echo $PATH
La liste des chemins doit contenir dest/Linux-i586/bin.
Pour automatiser cette opération, vous pouvez placer la commande source dans votre fichier .profile, qui se trouve dans votre répertoire, ou dans le fichier /etc/profile pour tous les utilisateurs.
Vous pouvez alors taper la commande suivante qui lance OpenScheme, lié statiquement, en mode check et fait afficher des informations sur le démarrage. :
$ _osm_c --verbose
Vous êtes alors prêt pour les prochains articles !
Avertissement
Malgré tout le soin apporté à la réalisation d'OpenScheme, il se peut que des erreurs subsistent.
Si vous détectez des anomalies, n'hésitez pas à nous en faire part, soit par courrier, à l'adresse osm.support@erian-concept.com ou sur le forum à l'adresse inews.netultra.net.