OpenScheme
Par :
Guilhem de Wailly (gdw@erian-concept.com)

et :
Fernand Boéri (boeri@unice.fr)

Résumé
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 important du langage et tenté d'illustrer cela par des exemples, comme un moteur base de donnée 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 CDROM 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'existance de ce rapport permet d'homogénéiser les implémentations Scheme et de les classifier. L'autre avantage majeur est la déconnection 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 macro 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 macro 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 était 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âtit sur les tables de hachages 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 plateformes 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 permier 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 ou l'article est rédigé, la version est 1.3 et la version 1.3.1 est dans le four ! 
Ceci ramène le fichier chez vous. Puis 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 CDROM 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 lier ce serveur facilement dans votre navigateur, cliquer 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 garder 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 :
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ée 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 la distribution du CDROM 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é :

Figure 1 : écran principal de l'installateur.
Les copies d'écran présentées ici ont été créées dans l'environnement Windows, car le programme d'installation fonctionne exactement de la même manière dans tous les environnements supportés par OpenScheme.
Ceci est en fait dû à sombre un problème de carte vidéo qui tombe en panne juste au moment des copies d'écran et dont la remplaçante sortie de la poubelle n'a pas assez de mémoire pour permettre les copies d'écran sous Linux. Obligation d'utiliser l'autre machine !
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 à é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électionner <OK> et appuyer sur [ENTER]. Pour revenir au panneau précédent, sélectionner <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, donc, il faut laisser le répertoire point.
Le panneau suivant demande le répertoire de destination :

Figure 2 : Répertoire de destination. Sous Linux, /usr/local/osm-1.3 est proposé.
Vous pouvez aller dans la zone d'édition avec les touches fléchées et entrer le répertoire choisi. Valider avec [ENTER], puis sélectionner <OK>.
Eléments principaux
L'étape suivante consiste à sélectionner les principaux éléments d'OpenScheme, comme les exécutables ou la documentation :

Figure 3 : Sélection des éléments.
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, presser [SPACE]. Lorsque la sélection est effectuée, aller sur <OK> et presser [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 :

Figure 4 : Le système d'exploitation.
La version actuelle d'OpenScheme support aussi BeOS et FreeBSD. La portabilité des programmes OpenScheme est absolue est immédiate : par exemple, le programme d'installation est identique pour tous les systèmes d'exploitation supportés.
L'un des points crucial 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 :

Figure 5 : Sélection des types de binaires.
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. Les binaires optimisés ont leur nom qui se termine par le caractère _.
Le second type de binaires effectue le control 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. Le binaires de ce type se terminent par _c (pour check).
Enfin, le troisième type de binaire 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 quel type de bibliothèques installer :

Figure 6 : type de liaisons.
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 limites 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 :

Figure 6 : première sélection de plugins.
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 liste, 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é :

Figure 6 : première sélection de plugins.
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ée 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 :

Figure 6 : documentation.
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 à installé on été sélectionnés, l'installateur commence à copier les fichiers dans le répertoire de destination :

Figure 6 : installation.
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, taper :
$ source dest/Linux-i586/bin/set-env.sh
Pour vérifier que l'environnement a bien été modifié, taper 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êts 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.
Les auteurs

Guilhem de Wailly, directeur de la société Erian Concept : support, formations, configurations, administration, développements Linux. Environnement OpenScheme.
http://www.erian-concept.com

Fernand Boéri, Professeur à l'Université de Nice - Sophia-Antipolis, membre de l'unité SPORTS du laboratoire I3S, spécialiste en modélisation, évaluation de performances et architectures parallèles.
http://www.i3s.unice.fr
Références
Scheme
¨	Structure et Interprétation des programmes informatiques
H. Abelson, GJ. Sussman
InterEdition
¨	The Scheme Programming Languages - Ansi Scheme 
R. Kent Dybvig
Prentice Hall
¨	Les langages Lisps -  Christian Queinnec
InterEdition
¨	Programmer avec Scheme - J. Chazarin
Thomson Publishing
¨	Revised4 Report on the Algorithmic Language Scheme
W. Clinger, J. Rees
ftp://ftp.nj.nec.com/pub/kelsey
Environnements Scheme
¨	Scm - A. Jaffer
http://www-swiss.ai.mit.edu/~jaffer
La référence des interprètes Scheme. Très petit, rapide, pour beaucoup de plates-formes, extensible.
¨	PCScheme - Texas Instrument
ftp://cui.unige.ch/public/pcs/pcscheme.exe
Un très bon environnement de programmation Scheme pour DOS, avec éditeur intégré.
¨	DrScheme - Rice University
http://www.cs.rice.edu/CS/PLT/
Environnement Scheme libre très avancé.
¨	ChezScheme - Cadence, Inc
http://www.scheme.com/
Environnement Scheme très performant.
¨	Inlab Scheme - Inlab Software GmbH
http://www.munich.net/inlab/scheme/
Environnement commercial
¨	EdScheme, 3Dscheme - Scheme, Inc
http://www.schemers.com/
Environnement de programmation Scheme pour Windows.
¨	OpenScheme - Erian Concept
http://www.open-scheme.com
Environnement professionnel de programmation Scheme comprenant un interprète, un compilateur et un débogueur symbolique. 
Existe en version libre et commerciale, pour Windows et Linux.