Borsalino

 
 

 

Borsa

Borsa News - 28/09/1999
Borsa News - 16/07/1999
Borsa News - 09/07/1999
Borsa News - 02/07/1999
Borsa News - 25/06/1999
Borsa News - 18/06/1999
Borsa News - 11/06/1999
Borsa News - 28/05/1999
Borsa News - 21/05/1999


Pour approfondir

Erlang.org
Comptabilité
Club-Compt@ble

Sites utiles

Linux-France
Open Source.org
Slashdot
Freshmeat.net


Copyright © 1999-2000
Mickaël Rémond

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

 
 
 

Dernière modification : 07 Oct 2008