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/