www.erlang-projects.org
Mickaël Rémond <mickael.remond@erlang-fr.org>
!
" !
# $
L'informatique moderne s'appuie sur une analyse
du monde pour en déduire un modèle
informatique
Cette analyse repose traditionnellement sur
l'« orienté objet »
Le modèle est déduit de la décomposition conceptuelle
du monde réel en objet
% & ' $ $
L'analyse objet se penche sur une analyse statique du
système, ne prennant pas en compte la dimension
temporelle
Le modèle objet est au final différent du modèle
d'implémentation après l'introduction des classes
techniques et des motifs de développement (Design
Pattern)
Les contraintes de performances peuvent contraindre à
amender son modèle objet
Au final, la découverte des objets est complexe
% ( & )
Le monde est concurrent
Le monde est distribué
Les choses peuvent échouer
Notre cerveau comprend intuitivement le paralèllisme
Développer une application réelle revient à observer les
motifs de parallèlisme. Pas de présupposé. Observation
et acquisition de la bonne granularité.
Les programmes sont ainsi automatiquement parallèle et
tolérant aux pannes. L'ajout d'un processeur augmente
donc naturellement la puissance.
$
*
Les applications peuvent aujourd'hui toutes être
conçues de manière parallèle et/ou distribuée
Serveurs en tout genre,
Interfaces utilisateur,
Systèmes téléphonique,
Systèmes de supervision,
...
Un exemple: client HTTP
$ &
# + %
Processus indépendants (en terme de structure de
donnée)
Le niveau de parallélisme de l'application ne pénalise
pas les performances
La distribution de l'application ne pénalise pas ses
performances (hormis réseau)
Le comportement du programme doit être identique
sur tous les systèmes d'exploitation
Mécanisme de gestion des échecs
, % - $ % *
En quelques mots:
Un language de développement
Un language de développement orienté concurrence
Un environnement de développement d'applications:
Framework de développement
Base de données
Corba
ASN.1
Serveur Web, ...
$
Langage fonctionnel
Processus légers
Passage de messages asynchrones
Indépendance du système d'exploitation
Mécanisme sophistiqué de gestion d'erreur
Typage dynamique
Gestion de la mémoire par ramasse-miette
Temps réel logiciel
Distribution des traitements transparentes
" +
Programmation séquentielle
Programmation concurrente
Programmation distribuée
Programmation tolérante aux pannes
$
"- .
! " # $ " % % " & " '
! %
%
$
- /
( ) * ) %
+'
( ) * ) !,$ %
, - .) / 0 0$.* ) *
( ) 1 * ) !,$
%
) /
) /
$
!-
, , $ " ( 2 %
, , $ " ( 2*
, , $ * 3 2 %
3 2 '
, , $ " ( 4" ( 2 * 3 2 %
, , $ " ( 2* 3 2 1 " (
%
$
0- 1 )
, 5 , 2 % +'
, 5 , 2 !, 4!, 2 %
6" * 7 $ * 89 : / !, *
, - ." - 0 0$7 ;$ - 0 0$89 - 0 0$ 0$.*
" * 7 $ * 89 *
, 5 , 2 !, 2
% ! " # $
! % & %%' ($
( $
2-
% 8 / $ " % $ < % < 1 " $
$
=! $
% > / 8
=! $
% >
3-
7, / 2 #$ $ % $
4-
7, ? @ 22 9 *
,A
@ 22 9 % 8 , $2 '
@ 22 9 % 8 , $2 '
B, % B, C 8 , $2
$
&
5- 6 &
7, / 2 #$ ! $D"
,A "
$ 5 ,A "
7 + 8
9- 7 :
2 8* E
6 ($ 5 2 * F: %
6 G<HB * C 2: %
) %
$ *
8* E %
# 6 ($ 5 2 * :
7 + 8
" - 1 %
225 9 5 , * *
7, / 2 #$5 ,$+ $ % $ *
,A
6 G<HB * 7, * I J: %
$
# : ; 7
Implémentation de « design patterns » les plus
courant Erlang
Permet de normaliser des développements
Sendmail Meets Erlang: Experiences Using Erlang for
Email Applications: http://www.erlang.se/euc/00/euc00-
sendmail.pdf
The migration from Erlang to OTP: A Case Study of a
Heavy Duty TCP/IP Client-server System written in
Erlang:
http://www.erlang.se/euc/01/remond_cesarini2001.ppt
OTP in server farms:
http://www.erlang.se/workshop/2002/Snyder.pdf
$ #
$ #
< & =
&
# ( )
( + < % $
> ? % & #
-& ; =
$ @ +=) A
+ & ;)
: & B :
C
Le développement en Erlang est indissociable de
l'utilisation de certaines pratiques d'eXtreme
Programming:
Langage faiblement typé: Cette lacune doit être
compensé par les tests et l'intégration continue
(http://www.sectra.se/spin/dailybuildreport.pdf)
Productivité accrue: permet de mettre en oeuvre le Pair
Programming
(http://www.erlang.se/publications/Ulf_Wiger.pdf)
D %
#
Erlang propose une approche temps réel logiciel
pour développer des applications tolérantes aux
pannes et capables de monter en charge
Erlang est utilisé pour des projets stratégiques
chez Ericsson, Nortel, Cellicium, ...
Il est a l'étude dans d'autres organisations
Erlang est un des rares exemples de langage qui
permet de se démarquer des concurrents
Voir paulgraham.com
, $
Eddieware
Rei
IDX-Tsunami
Yaws
Bluetail Ticket Tracker
%
Aucun marketing particulier du langage:
Le langage et l'environnement tiennent leurs
promesses
Ils sont utilisés dans des projets industriels
Faiblesses:
Vient du monde industriel, mais communauté qui
commence seulement à décoller
L'adoption doit se dégager de l'image purement
« Ericsson » et « suèdoise »
%
Un essor probable dans le domaine du web:
La robustesse est nécessaire à la croissance du
web,
XML et les services web induisent une approche
fonctionnelle du développement
Rei
Jeu massivement multi-joueur
, % - $ E *
Rei est un projet de réalisation d'un framework de développement
de jeux multi-joueurs.
Des applications de ce framework sont réalisées pour la création
de jeu vidéo.
Le framework souhaite apporter plusieurs réponses aux problèmes
des serveurs de jeu massivement multi-joueurs:
Montée en charge,
Haute-disponibilité et tolérance aux pannes,
Mise à jour de code « à chaud »
7
) *+
" (
K11
7J $
, %- % *+
G $9
" (
)
)
)
Cluster REI serveur
, %-
.
/ '
%- % *+
, %-
)
, %-
.
/ '
%- % *+
Internet
(
Le dernier prototype publié est la milestone 4
La milestone 5 en cours de développement amène:
Le chat,
L'architecture clusterisée sur le serveur,
Migration du client de Ogre vers Nebula.
0
#
Erlang programmation, Mickaël Rémond,
Editions Eyrolles, 2003
http://www.erlang-projects.org/
http://www.erlang.org/
http://rei.vawis.net/