Borsalino News - 28 octobre 1999
Bonjour à tous,
Voici un nouveau point sur le projet Borsalino :
1- L'utilisation de la mailing list
Concernant l'utilisation de la mailing list, j'aimerais introduire
une petite amélioration. Ne serait-il pas intéressant de signaler le
thème des messages grâce à des balises très simples ? Cela permettrait
aux personnes ne souhaitant pas se plonger dans des textes très
techniques de pouvoir mettre ces messages de côté.
Je suggère dans un premier temps de rajouter en tête de sujet le
mot [DEV] (entre crochets) pour signaler les messages intéressants
UNIQUEMENT les développeurs. Les autres messages peuvent contenir
le mot clé [GEN] en tête du sujet. Si plusieurs thèmes sont abordés,
ou en cas de doute choisir le mot clé [GEN]. Le mot clé [ANN] est
réservé pour les annonces officiels (Borsalino News, Release de code,
etc).
Qu'en pensez-vous ?
2- La conférence des utilisateurs Erlang
Le 30 septembre dernier s'est tenue en Suède la conférence des
utilisateurs d'Erlang. Je n'y étais hélas pas, mais je peux tout de
même vous signaler les éléments importants pour le projet
Borsalino:
Tout d'abord, la nouvelle version de l'environnement de
développement Erlang est annoncé pour le 10 novembre 1999. Cette
version est désormais la même que celle distribuée et commercialement
supportée par Ericsson. Les améliorations concernent essentiellement
la base de données Mnesia, qui a été optimisée et peut désormais gérer
des tables "fragmentées" (pour augmenter la capacité de stockage).
D'autre part, un nouveau module d'accès aux bases ODBC sera inclus
dans cette mise à jour, mais hélas, mais qui semble hélas ne
fonctionner que sous Windows ou Solaris. A confirmer cependant.
Des nouvelles versions de certains modules sont également
attendues. Pour les connaisseurs, le module de gestion graphique de
table (TV) a été amélioré et permet maintenant d'écrire directement
dans les bases (pratique pour créer des jeux de test).
Les conférences ont également mis en avant les expériences
commerciales de certaines entreprises s'appuyant sur le langage
Erlang, et notamment celle de la société Bluetail, spécialisée dans
des outils de hautes disponibilités pour les fournisseurs d'accès
Internet. Elle utilise Erlang, comme un outil stratégique pour
acquérir un avantage compétitif sur ses concurrents. Allez voir le
site http://www.bluetail.com/
pour plus de détails.
Enfin, une équipe de chercheurs a présenté son projet de
développement d'un langage graphique de modélisation des programmes
Erlang (Event Modeling Language). Leur texte décrit les
caractéristiques du langage et propose des moyens de formaliser
l'analyse. Intéressant.
Pour les anglophones (et philes ?) vous pouvez jeter un oeil sur
le résumé des conférences :
http://www.ericsson.se/cslab/projects/euc99/
3- Carte de France des "Borsaliniens"
Sylvain Amrani a developpé une carte de France destinée à
localiser les membres du projet Borsalino en France.
Vous pouvez vous enregistrez, si ce n'est pas déjà fait, et suivre
la manière dont se peuple la carte en allant jeter un oeil sur le
site :
http://www.multimania.com/sylvainamrani/borsalino/
4- L'atelier Erlang : Exercices
Ca y est. Nous y revoilà. J'espère que vous disposez désormais sur
votre machine votre environnement Erlang pleinement fonctionnel.
Avant de créer notre premier programme nous allons d'abord continer
notre découverte du shell Erlang. Lancer le shell Erlang par la
commande :
erl
Vous arrivez sur l'écran suivant :
Erlang (BEAM) emulator version 47.4.1
Eshell V47.4.1 (abort with ^G)
1>
Nous allons d'abord assigner un nombre à une variable. Saisissez la
commande :
Var = 10.
N'oubliez pas le '.' en fin de ligne pour terminer la commande. Si
vous l'omettez, le shell Erlang crée une nouvelle ligne pour
continuer la saisie de la commande. Cette caractéristique est utile
pour entrer des commandes complexes.
1> Var=10.
10
2>
Le shell vous renvoie la valeur de retour de la commande que vous
venez d'entrer (ici la valeur affectée à la variable: 10).
Il est possible que vous n'obteniez pas le même résultat que nous,
mais plutôt quelque chose ressemblant à cela :
2> var=10.
** exited: {{badmatch,10},{erl_eval,expr,3}} **
3>
Les deux lignes paraissent à première vue identiques mais elles ne
le sont pas. En fait, en Erlang, une variable commence toujours par
une majuscule. Dans le premier cas, nous demandons de lier la variable
Var à la valeur 10. Dans le second cas, nous déclenchons un processus
de correspondance (Pattern Matching) entre la constante alphanumérique
'var' et le nombre 10. La correspondance (matching) n'est pas
réalisée, et le shell d'Erlang renvoie une erreur. Ne vous préoccupez
pas encore de la signification exacte de la deuxième commande et
retenez simplement pour le moment que si vous souhaitez affecter
une variable vous devez la faire commencer par une majuscule.
Continuons notre dialogue... Essayons de changer la valeur de la
variable Var avec la commande :
Var=20.
Le shell nous renvoie la réponse suivante :
3> Var=20.
** exited: {{badmatch,20},{erl_eval,expr,3}} **
4>
Que se passe-t-il ? La majuscule est présente et nous obtenons le
même message d'erreur que précédemment, lorsque nous avons essayé de
faire "correspondre" la constante 'var' avec la constante numérique
10.
En réalité, le mécanisme de correspondance appelé "Pattern
Matching" est au coeur du fonctionnement d'Erlang. Nous allons donc
l'approfondir pour comprendre comment le shell réagit.
L'utilisation du signe "égal" est un des moyens de déclencher le
Pattern Matching. Par ce mécanisme simple, on peut assigner des
valeurs aux variables. Une variable dont la valeur a déjà été
assignée est dite "liée" (bound). Si elle n'a jamais été assignée
elle est dite "non liée" (unbound en anglais ! Des suggestions
pour une meilleure traduction ?). Dès qu'une valeur a été assignée
à une variable, elle ne peut plus être changée.
Je vous entend d'ici manifester votre étonnement (voire votre
révolte). Quel est donc ce langage dans lequel on ne peut pas
changer la valeur des variables ?
Cette caractéristique du langage est appelé assignement unique
("single assignment"). Elle s'oppose à l'assignement "destructif"
des langages comme le C, le Pascal ou Java. Ce mode de fontionnement
s'appuie sur une approche mathématique de la programmation.
Revenons sur le "pattern matching". La commande :
Pattern = expression
permet d'évaluer l'expression et d'essayer de faire correspondre le
résultat avec notre schéma (Pattern). Le mécanisme de correspondance
peut soit échouer, soit réussir. S'il réussit toutes les variables
non liées contenues dans notre schéma deviennent liés. Si des
variables liés sont présentes dans notre figure (Pattern), alors le
programme essaiera de les faire correspondre.
Les commandes suivantes devraient éclairer notre exemple précédent
de manipulation de 'Var' :
4> 20=20.
20
5> 10=20.
** exited: {{badmatch,20},{erl_eval,expr,3}} **
6>
Le pattern matching réussit dans l'expression de la ligne 4, alors
qu'il échoue dans l'expression de la ligne 5. Avec la valeur 10
liée à notre variable Var (ligne 3), nous provoquons une erreur de
"matching" lorsque nous la confrontons à l'expression 20.
Tout simplement...
Les structures de données principales en Erlang :
Je vais briévement introduire les structures de données principales
en Erlang.
Nous avons découvert la constante. Elle peut-être un nombre ou une
chaîne de caractère. On peut noter qu'une variable commence
toujours par une majuscule. Une chaîne commençant par un caractère minuscule
est en revanche une constante. Par exemple :
borsalino
le_projet_borsalino
sont des constantes.
En utilisant des délimiteurs, on peut créer des constantes
commençant par une majuscule, comportant des espaces et des caractères
spéciaux :
'Le projet Borsalino'
'Le \t projet \t Borsalino'
Les nombres peuvent être écrits de différentes façons. Les formes
suivantes sont toutes correctes :
123
-12345
12.3456
-27.23e-05
A partir de ces formes simples, deux structures composées peuvent
être manipulées en Erlang : Les tuples et les listes. Les tuples sont
utilisées pour stocker et manipuler un nombre déterminé
d'éléments. Ils sont représentés par une séquence d'éléments entre
accolades :
{a, b, c, d}
{1, 2, 3}
Les éléments peuvent être une constante, ou une structure composées
(tuples ou liste) :
{a, {1, 2, 3}, b, c}
Les listes permettent de stocker un nombre variable d'éléments.
Elles sont représentées comme une suite d'éléments entre
crochets :
[1, 2, 3, 4, 5]
[a, b, c]
Les éléments d'une liste peuvent bien sûr également être des
structures composées (tuples / listes) :
[{1, 2}, 3, {1, 2}, [a, b]]
Revenons une dernière fois en arrière sur le pattern matching et
appliquons le à nos structures composées. Analyser la commande
suivante et son résultat :
6> {A, B, C} = {10, 20, a}.
{10,20,a}
7> A.
10
8> B.
20
9> C
9> .
a
Nous avons en fait assigné aux variables A, B et C les différentes
valeurs composant notre tuple. A vaut 10; B vaut 20 et C contient
la constante 'a'.
A vous maintenant de faire votre propre expérience et de la
partager sur la mailing list. Essayez par exemple les commandes :
{X, Y, Z} = {{7, 14}, A, [a, b, c]}.
puis
[L, M, N] = Z.
et amusez vous à trouvez de nouveaux cas tordus.
En conclusion, je vous recommande d'effectuer des expériences de
pattern matching dans le shell d'Erlang. N'hésitez pas à
expérimenter et à poser des questions. Il faut que vous compreniez
bien ce mécanisme car il est central dans le développement de
programmes en Erlang.
Bon courage et à bientôt.
Mickael Rémond