Programmer en Erlang Francesco Cesarini et Simon ... - Pearson
Programmer en Erlang Francesco Cesarini et Simon ... - Pearson
Programmer en Erlang Francesco Cesarini et Simon ... - Pearson
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>Programmer</strong><br />
<strong>en</strong> <strong>Erlang</strong><br />
<strong>Francesco</strong> <strong>Cesarini</strong> <strong>et</strong> <strong>Simon</strong> Thompson<br />
Traduit par Éric Jacoboni,<br />
avec la contribution technique de Samuel Tardieu<br />
© 2010 <strong>Pearson</strong> France – <strong>Programmer</strong> <strong>en</strong> <strong>Erlang</strong> – <strong>Francesco</strong> <strong>Cesarini</strong>, <strong>Simon</strong> Thompson
<strong>Pearson</strong> Education France a apporté le plus grand soin à la réalisation de ce livre afin de vous<br />
fournir une information complète <strong>et</strong> fiable. Cep<strong>en</strong>dant, <strong>Pearson</strong> Education France n’assume de<br />
responsabilités, ni pour son utilisation, ni pour les contrefaçons de brev<strong>et</strong>s ou atteintes aux droits<br />
de tierces personnes qui pourrai<strong>en</strong>t résulter de c<strong>et</strong>te utilisation.<br />
Les exemples ou les programmes prés<strong>en</strong>ts dans c<strong>et</strong> ouvrage sont fournis pour illustrer les<br />
descriptions théoriques. Ils ne sont <strong>en</strong> aucun cas destinés à une utilisation commerciale ou<br />
professionnelle.<br />
<strong>Pearson</strong> Education France ne pourra <strong>en</strong> aucun cas être t<strong>en</strong>u pour responsable des préjudices<br />
ou dommages de quelque nature que ce soit pouvant résulter de l’utilisation de ces exemples ou<br />
programmes.<br />
Tous les noms de produits ou marques cités dans ce livre sont des marques déposées par leurs<br />
propriétaires respectifs.<br />
Publié par <strong>Pearson</strong> Education France<br />
47 bis, rue des Vinaigriers<br />
75010 PARIS<br />
Tél. : 01 72 74 90 00<br />
www.pearson.fr<br />
Mise <strong>en</strong> pages : TyPAO<br />
ISBN : 978-2-7440-2445-0<br />
Copyright © 2010 <strong>Pearson</strong> Education France<br />
Tous droits réservés<br />
Titre original : <strong>Erlang</strong><br />
Traduction : Éric Jacoboni, avec la contribution<br />
technique de Samuel Tardieu<br />
ISBN original : 978-0-596-51818-9<br />
Copyright © 2009 by <strong>Francesco</strong> and<br />
<strong>Simon</strong> Thompson<br />
Tous droits réservés<br />
Published by O’Reilly Media, Inc.<br />
1005 Grav<strong>en</strong>stein Highway North,<br />
Sebastopol, CA 95472<br />
Aucune représ<strong>en</strong>tation ou reproduction, même partielle, autre que celles prévues à l’article L. 122-5 2˚ <strong>et</strong> 3˚ a) du code de<br />
la propriété intellectuelle ne peut être faite sans l’autorisation expresse de <strong>Pearson</strong> Education France ou, le cas échéant,<br />
sans le respect des modalités prévues à l’article L. 122-10 dudit code.<br />
All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or<br />
mechanical, including photocopying, recording or by any information storage r<strong>et</strong>rieval system, without permission from<br />
<strong>Pearson</strong> Education, Inc.<br />
© 2010 <strong>Pearson</strong> France – <strong>Programmer</strong> <strong>en</strong> <strong>Erlang</strong> – <strong>Francesco</strong> <strong>Cesarini</strong>, <strong>Simon</strong> Thompson
Table des matières<br />
Avant-propos.................................................................................................................................... XVII<br />
À propos des auteurs......................................................................................................................<br />
XIX<br />
Préface................................................................................................................................................ 1<br />
Pourquoi <strong>Erlang</strong> ................................................................................................................... 1<br />
Public visé .............................................................................................................................. 2<br />
Structure de l'ouvrage............................................................................................................ 3<br />
Conv<strong>en</strong>tions typographiques ............................................................................................... 4<br />
Remerciem<strong>en</strong>ts....................................................................................................................... 5<br />
1 Introduction............................................................................................................................ 7<br />
Pourquoi utiliser <strong>Erlang</strong> .................................................................................................... 7<br />
Historique................................................................................................................................ 9<br />
Caractéristiques d'<strong>Erlang</strong> ..................................................................................................... 10<br />
Constructions de haut niveau ...................................................................................... 10<br />
Processus concurr<strong>en</strong>ts <strong>et</strong> <strong>en</strong>voi de messages .......................................................... 11<br />
Concurr<strong>en</strong>ce supportant la montée <strong>en</strong> charge, sûre <strong>et</strong> efficace .......................... 12<br />
Temps réel souple........................................................................................................... 13<br />
Robustesse........................................................................................................................ 13<br />
Informatique distribuée ................................................................................................ 14<br />
Intégration <strong>et</strong> ouverture................................................................................................. 15<br />
<strong>Erlang</strong> <strong>et</strong> les processeurs multicœurs.................................................................................. 16<br />
Études de cas........................................................................................................................... 17<br />
Le commutateur ATM AXD301................................................................................. 17<br />
CouchDB.......................................................................................................................... 18<br />
Comparaison d'<strong>Erlang</strong> <strong>et</strong> de C++............................................................................... 19<br />
Comm<strong>en</strong>t utiliser <strong>Erlang</strong> ................................................................................................... 21<br />
© 2010 <strong>Pearson</strong> France – <strong>Programmer</strong> <strong>en</strong> <strong>Erlang</strong> – <strong>Francesco</strong> <strong>Cesarini</strong>, <strong>Simon</strong> Thompson
IV <strong>Programmer</strong> <strong>en</strong> <strong>Erlang</strong><br />
2 Bases d’<strong>Erlang</strong>....................................................................................................................... 23<br />
Entiers .................................................................................................................................. 23<br />
Le shell <strong>Erlang</strong>........................................................................................................................ 24<br />
Flottants .................................................................................................................................. 25<br />
Opérateurs mathématiques........................................................................................... 25<br />
Atomes .................................................................................................................................. 27<br />
Boolé<strong>en</strong>s.................................................................................................................................. 28<br />
Tuples .................................................................................................................................. 30<br />
Listes .................................................................................................................................. 31<br />
Caractères <strong>et</strong> chaînes..................................................................................................... 31<br />
Atomes <strong>et</strong> chaînes........................................................................................................... 32<br />
Construction <strong>et</strong> traitem<strong>en</strong>t des listes.......................................................................... 33<br />
Fonctions <strong>et</strong> opérations sur les listes......................................................................... 34<br />
Comparaisons de termes....................................................................................................... 37<br />
Variables.................................................................................................................................. 39<br />
Types de données composés ................................................................................................ 41<br />
Pattern Matching.................................................................................................................... 43<br />
Fonctions................................................................................................................................. 47<br />
Modules .................................................................................................................................. 50<br />
Compilation <strong>et</strong> machine virtuelle <strong>Erlang</strong>.................................................................. 51<br />
Directives des modules................................................................................................. 51<br />
Exercices ................................................................................................................................. 53<br />
3 Programmation séqu<strong>en</strong>tielle <strong>en</strong> <strong>Erlang</strong>........................................................................... 57<br />
Évaluations conditionnelles.................................................................................................. 58<br />
La structure case ............................................................................................................ 58<br />
Portée des variables ...................................................................................................... 61<br />
La structure if ................................................................................................................. 62<br />
Gardes .................................................................................................................................. 63<br />
Fonctions prédéfinies............................................................................................................. 65<br />
Accès <strong>et</strong> exam<strong>en</strong> des obj<strong>et</strong>s ........................................................................................ 66<br />
Conversion de type ........................................................................................................ 67<br />
Traitem<strong>en</strong>t des dictionnaires ....................................................................................... 68<br />
Métaprogrammation...................................................................................................... 68<br />
Processus, port, distribution <strong>et</strong> informations système........................................... 69<br />
Entrées/sorties................................................................................................................. 69<br />
© 2010 <strong>Pearson</strong> France – <strong>Programmer</strong> <strong>en</strong> <strong>Erlang</strong> – <strong>Francesco</strong> <strong>Cesarini</strong>, <strong>Simon</strong> Thompson
Table des matières V<br />
Récursivité............................................................................................................................... 72<br />
Fonctions récursives terminales ................................................................................. 77<br />
Optimisation des appels récursifs terminaux ......................................................... 80<br />
Itérations vs. fonctions récursives............................................................................... 81<br />
Erreurs d'exécution ............................................................................................................... 82<br />
Traitem<strong>en</strong>t des erreurs........................................................................................................... 84<br />
Utilisation de try ... catch............................................................................................. 84<br />
Utilisation de catch........................................................................................................ 88<br />
Modules de la bibliothèque ................................................................................................. 91<br />
Docum<strong>en</strong>tation................................................................................................................ 91<br />
Modules utiles................................................................................................................. 93<br />
Le débogueur ......................................................................................................................... 94<br />
Exercices ................................................................................................................................. 96<br />
4 Programmation concurr<strong>en</strong>te.............................................................................................. 103<br />
Création des processus.......................................................................................................... 104<br />
Envoi de messages................................................................................................................. 106<br />
Réception des messages........................................................................................................ 109<br />
Réceptions sélectives <strong>et</strong> non sélectives .................................................................... 112<br />
Un exemple d'écho......................................................................................................... 114<br />
Processus <strong>en</strong>registrés............................................................................................................. 116<br />
Délais d'expiration................................................................................................................. 119<br />
Tests de performances........................................................................................................... 121<br />
Squel<strong>et</strong>tes de processus......................................................................................................... 122<br />
Récursion terminale <strong>et</strong> fuites mémoire .............................................................................. 123<br />
Étude de cas de programmation concurr<strong>en</strong>te ................................................................... 124<br />
Race conditions, interblocages <strong>et</strong> famine des processus................................................. 127<br />
Le gestionnaire de processus................................................................................................ 128<br />
Exercices ................................................................................................................................. 130<br />
5 Patrons de conception des processus................................................................................ 133<br />
Modèles cli<strong>en</strong>t/serveur.......................................................................................................... 134<br />
Exemple de cli<strong>en</strong>t/serveur............................................................................................ 135<br />
Exemple de patron processus .............................................................................................. 141<br />
Machines à états finis ........................................................................................................... 143<br />
© 2010 <strong>Pearson</strong> France – <strong>Programmer</strong> <strong>en</strong> <strong>Erlang</strong> – <strong>Francesco</strong> <strong>Cesarini</strong>, <strong>Simon</strong> Thompson
VI <strong>Programmer</strong> <strong>en</strong> <strong>Erlang</strong><br />
Exemple de FSM............................................................................................................ 143<br />
Sémaphore mutex........................................................................................................... 145<br />
Gestionnaires d'événem<strong>en</strong>ts <strong>et</strong> traitem<strong>en</strong>ts d'événem<strong>en</strong>ts............................................... 147<br />
Exemple de gestionnaire d'événem<strong>en</strong>ts générique ................................................ 149<br />
Traitem<strong>en</strong>ts d'événem<strong>en</strong>ts ........................................................................................... 152<br />
Exercices ................................................................................................................................. 154<br />
6 Traitem<strong>en</strong>t des erreurs des processus.............................................................................. 157<br />
Li<strong>en</strong>s <strong>en</strong>tre processus <strong>et</strong> signaux exit ................................................................................. 157<br />
Blocage des exit.............................................................................................................. 160<br />
La BIF monitor............................................................................................................... 162<br />
Les BIF exit...................................................................................................................... 163<br />
BIF <strong>et</strong> terminologie ....................................................................................................... 164<br />
Sémantique de la propagation..................................................................................... 166<br />
Systèmes robustes.................................................................................................................. 167<br />
Surveillance des cli<strong>en</strong>ts................................................................................................. 168<br />
Exemple de superviseur................................................................................................ 170<br />
Exercices ................................................................................................................................. 173<br />
7 Enregistrem<strong>en</strong>ts <strong>et</strong> macros................................................................................................. 175<br />
Enregistrem<strong>en</strong>ts...................................................................................................................... 176<br />
Introduction aux <strong>en</strong>registrem<strong>en</strong>ts............................................................................... 176<br />
Utilisation des <strong>en</strong>registrem<strong>en</strong>ts .................................................................................. 177<br />
Fonctions <strong>et</strong> pattern matching sur les <strong>en</strong>registrem<strong>en</strong>ts......................................... 178<br />
Manipulation d'<strong>en</strong>registrem<strong>en</strong>ts dans le shell.......................................................... 179<br />
Implém<strong>en</strong>tation des <strong>en</strong>registrem<strong>en</strong>ts......................................................................... 181<br />
BIF pour les <strong>en</strong>registrem<strong>en</strong>ts ...................................................................................... 183<br />
Macros .................................................................................................................................. 183<br />
Macros simples .............................................................................................................. 183<br />
Macros paramétrées....................................................................................................... 184<br />
Débogage <strong>et</strong> macros....................................................................................................... 185<br />
Fichiers inclus................................................................................................................. 187<br />
Exercices ................................................................................................................................. 187<br />
8 Mises à jour logicielles......................................................................................................... 191<br />
Mise à jour des modules....................................................................................................... 191<br />
© 2010 <strong>Pearson</strong> France – <strong>Programmer</strong> <strong>en</strong> <strong>Erlang</strong> – <strong>Francesco</strong> <strong>Cesarini</strong>, <strong>Simon</strong> Thompson
Table des matières VII<br />
En coulisse............................................................................................................................... 194<br />
Chargem<strong>en</strong>t du code...................................................................................................... 197<br />
Le serveur de code......................................................................................................... 198<br />
Mise à jour des processus .................................................................................................... 201<br />
Le fichier .erlang.................................................................................................................... 205<br />
Exercice .................................................................................................................................. 205<br />
9 Autres types de données <strong>et</strong> constructions de haut niveau.......................................... 207<br />
Programmation fonctionnelle <strong>en</strong> pratique.......................................................................... 207<br />
Funs <strong>et</strong> fonctions du premier ordre .................................................................................... 208<br />
Fonctions <strong>en</strong> paramètres............................................................................................... 209<br />
Fun expressions ............................................................................................................. 210<br />
Fonctions comme résultats........................................................................................... 211<br />
Utilisation de fonctions déjà définies ....................................................................... 213<br />
Fonctions <strong>et</strong> variables.................................................................................................... 213<br />
Fonctions du premier ordre prédéfinies ................................................................... 214<br />
Évaluation paresseuse <strong>et</strong> listes.................................................................................... 215<br />
Listes <strong>en</strong> int<strong>en</strong>sion.................................................................................................................. 216<br />
Premier exemple ............................................................................................................ 216<br />
Syntaxe des listes <strong>en</strong> int<strong>en</strong>sion.................................................................................... 217<br />
Générateurs multiples.................................................................................................... 218<br />
Fonctions standard......................................................................................................... 219<br />
Binaires <strong>et</strong> sérialisation......................................................................................................... 220<br />
Binaires ............................................................................................................................ 220<br />
La syntaxe bit.................................................................................................................. 222<br />
Pattern matching sur les bits........................................................................................ 224<br />
Bitstring <strong>en</strong> int<strong>en</strong>sion..................................................................................................... 225<br />
Exemple de syntaxe bit : décodage de segm<strong>en</strong>ts TCP.......................................... 225<br />
Opérateurs bit à bit......................................................................................................... 227<br />
Sérialisation..................................................................................................................... 228<br />
Référ<strong>en</strong>ces............................................................................................................................... 229<br />
Exercices ................................................................................................................................. 230<br />
10 Tables ETS <strong>et</strong> D<strong>et</strong>s................................................................................................................ 233<br />
Tables ETS.............................................................................................................................. 233<br />
Implém<strong>en</strong>tations <strong>et</strong> compromis................................................................................... 234<br />
© 2010 <strong>Pearson</strong> France – <strong>Programmer</strong> <strong>en</strong> <strong>Erlang</strong> – <strong>Francesco</strong> <strong>Cesarini</strong>, <strong>Simon</strong> Thompson
VIII <strong>Programmer</strong> <strong>en</strong> <strong>Erlang</strong><br />
Création de tables........................................................................................................... 236<br />
Traitem<strong>en</strong>t des élém<strong>en</strong>ts d'une table.......................................................................... 238<br />
Exemple : construction d'un index, acte I................................................................. 238<br />
Parcours des tables......................................................................................................... 241<br />
Exemple : construction d'un index, acte II............................................................... 242<br />
Extraction d'informations : match.............................................................................. 243<br />
Extraction d'informations : select............................................................................... 245<br />
Autres opérations sur les tables.................................................................................. 247<br />
Enregistrem<strong>en</strong>ts <strong>et</strong> tables ETS.................................................................................... 247<br />
Visualisation des tables................................................................................................. 248<br />
Tables D<strong>et</strong>s.............................................................................................................................. 249<br />
Exemple de base de données d'abonnés mobiles ............................................................. 252<br />
Opérations du back<strong>en</strong>d.................................................................................................. 253<br />
Le serveur de base de données.................................................................................... 259<br />
Exercices.................................................................................................................................. 264<br />
11 Programmation distribuée <strong>en</strong> <strong>Erlang</strong>.............................................................................. 267<br />
Systèmes distribués <strong>en</strong> <strong>Erlang</strong>.............................................................................................. 267<br />
Informatique distribuée <strong>en</strong> <strong>Erlang</strong> : les bases.................................................................... 270<br />
Noms des nœuds <strong>et</strong> visibilité....................................................................................... 271<br />
Communication <strong>et</strong> sécurité.......................................................................................... 272<br />
Communication <strong>et</strong> messages....................................................................................... 274<br />
Connexions des nœuds.................................................................................................. 275<br />
Appels de procédures distantes................................................................................... 278<br />
Le module rpc.................................................................................................................. 280<br />
Modules principaux pour la programmation distribuée ...................................... 281<br />
Le processus epmd................................................................................................................. 282<br />
<strong>Erlang</strong> distribué <strong>et</strong> pare-feux ...................................................................................... 283<br />
Exercices ................................................................................................................................. 284<br />
12 Comportem<strong>en</strong>ts OTP........................................................................................................... 285<br />
Introduction aux comportem<strong>en</strong>ts OTP................................................................................ 285<br />
Serveurs génériques............................................................................................................... 288<br />
Lancem<strong>en</strong>t du serveur................................................................................................... 288<br />
Envoi de messages.......................................................................................................... 290<br />
Arrêt du serveur ............................................................................................................. 292<br />
© 2010 <strong>Pearson</strong> France – <strong>Programmer</strong> <strong>en</strong> <strong>Erlang</strong> – <strong>Francesco</strong> <strong>Cesarini</strong>, <strong>Simon</strong> Thompson
Table des matières IX<br />
L'exemple compl<strong>et</strong> ........................................................................................................ 293<br />
Exécution de g<strong>en</strong>_server............................................................................................... 296<br />
Superviseurs............................................................................................................................ 299<br />
Spécifications des superviseurs................................................................................... 300<br />
Spécifications des fils ................................................................................................... 300<br />
Exemple de superviseur................................................................................................ 301<br />
Fils dynamiques.............................................................................................................. 302<br />
Applications............................................................................................................................ 303<br />
Structure des répertoires............................................................................................... 304<br />
Fichiers de ressource des applications ..................................................................... 305<br />
Démarrage <strong>et</strong> arrêt des applications........................................................................... 307<br />
Le moniteur d'applications........................................................................................... 310<br />
Gestion de la publication...................................................................................................... 311<br />
Autres comportem<strong>en</strong>ts <strong>et</strong> lectures complém<strong>en</strong>taires........................................................ 313<br />
Exercices ................................................................................................................................. 314<br />
13 Prés<strong>en</strong>tation de Mnesia........................................................................................................ 317<br />
Utilisation de Mnesia............................................................................................................. 317<br />
Configuration de Mnesia....................................................................................................... 319<br />
Création du schéma ....................................................................................................... 319<br />
Lancem<strong>en</strong>t de Mnesia.................................................................................................... 320<br />
Tables de Mnesia............................................................................................................ 321<br />
Transactions............................................................................................................................ 323<br />
Écriture ............................................................................................................................ 324<br />
Lecture <strong>et</strong> suppressions ................................................................................................ 325<br />
Indexation......................................................................................................................... 326<br />
Dirty operations ............................................................................................................. 328<br />
Réseaux partitionnés.............................................................................................................. 330<br />
Pour aller plus loin... ............................................................................................................ 330<br />
Exercices ................................................................................................................................. 331<br />
14 Programmation d’interfaces graphiques avec wx<strong>Erlang</strong>........................................... 333<br />
wxWidg<strong>et</strong>s............................................................................................................................... 333<br />
wx<strong>Erlang</strong> : un binding <strong>Erlang</strong> pour wxWidg<strong>et</strong>s................................................................ 335<br />
Obj<strong>et</strong>s <strong>et</strong> types................................................................................................................. 335<br />
© 2010 <strong>Pearson</strong> France – <strong>Programmer</strong> <strong>en</strong> <strong>Erlang</strong> – <strong>Francesco</strong> <strong>Cesarini</strong>, <strong>Simon</strong> Thompson
X <strong>Programmer</strong> <strong>en</strong> <strong>Erlang</strong><br />
Traitem<strong>en</strong>t des événem<strong>en</strong>ts, id<strong>en</strong>tifiants d'obj<strong>et</strong>s <strong>et</strong> types d'événem<strong>en</strong>ts ......... 336<br />
Récapitulatif .................................................................................................................... 338<br />
Premier exemple : MicroBlog.............................................................................................. 338<br />
Second exemple : MiniBlog................................................................................................. 341<br />
Installation <strong>et</strong> exécution de wx<strong>Erlang</strong>................................................................................. 345<br />
Exercices.................................................................................................................................. 345<br />
15 Programmation des sock<strong>et</strong>s................................................................................................ 347<br />
UDP : User Datagram Protocol.......................................................................................... 347<br />
TCP : Transmission Control Protocol................................................................................ 351<br />
Exemple TCP................................................................................................................... 353<br />
Le module in<strong>et</strong>........................................................................................................................ 356<br />
Pour aller plus loin................................................................................................................. 357<br />
Exercices ................................................................................................................................. 358<br />
16 Lier <strong>Erlang</strong> avec d’autres langages de programmation............................................. 361<br />
Prés<strong>en</strong>tation du problème .................................................................................................... 362<br />
Interagir avec Java.................................................................................................................. 363<br />
Nœuds <strong>et</strong> boîtes aux l<strong>et</strong>tres ......................................................................................... 363<br />
Représ<strong>en</strong>tation des types <strong>Erlang</strong>................................................................................. 364<br />
Communication............................................................................................................... 364<br />
Récapitulatif : RPC revisité......................................................................................... 365<br />
Interactions....................................................................................................................... 366<br />
Notes de bas de page..................................................................................................... 367<br />
Pour aller plus loin......................................................................................................... 368<br />
Nœuds C.................................................................................................................................. 368<br />
Pour aller plus loin......................................................................................................... 372<br />
<strong>Erlang</strong> à partir du shell Unix : erl_call............................................................................... 372<br />
Programmes ports.................................................................................................................. 373<br />
Commandes <strong>Erlang</strong> pour les ports ............................................................................ 374<br />
Communication des données vers ou à partir d'un port ....................................... 376<br />
Bibliothèques de communication........................................................................................ 377<br />
<strong>Programmer</strong> <strong>en</strong> Ruby : erlectricity............................................................................. 377<br />
Pilotes liés <strong>et</strong> FFI.................................................................................................................... 379<br />
Exercices ................................................................................................................................. 379<br />
© 2010 <strong>Pearson</strong> France – <strong>Programmer</strong> <strong>en</strong> <strong>Erlang</strong> – <strong>Francesco</strong> <strong>Cesarini</strong>, <strong>Simon</strong> Thompson
Table des matières XI<br />
17 BIF de traces, dbg <strong>et</strong> spécifications de capture ............................................................ 381<br />
Introduction............................................................................................................................. 381<br />
Les BIF de trace..................................................................................................................... 383<br />
Options de trace des processus.................................................................................... 384<br />
Héritage des options...................................................................................................... 387<br />
Ramasse-mi<strong>et</strong>tes <strong>et</strong> étiqu<strong>et</strong>tes temporelles ............................................................. 388<br />
Trace des appels avec la BIF trace_pattern....................................................................... 389<br />
L'outil dbg............................................................................................................................... 392<br />
Prés<strong>en</strong>tation de dbg........................................................................................................ 393<br />
Fonctions de trace <strong>et</strong> de profilage............................................................................... 395<br />
Trace des appels de fonctions locaux <strong>et</strong> globaux .................................................. 396<br />
Environnem<strong>en</strong>ts distribués........................................................................................... 398<br />
Redirection des sorties.................................................................................................. 398<br />
Spécifications de capture : syntaxe fun.............................................................................. 401<br />
Production de spécifications avec fun2ms............................................................... 402<br />
Différ<strong>en</strong>ces <strong>en</strong>tre les spécifications de capture <strong>et</strong>s <strong>et</strong> dbg.................................... 410<br />
Spécifications de capture <strong>en</strong> détail ..................................................................................... 410<br />
Tête ............................................................................................................................ 410<br />
Conditions........................................................................................................................ 412<br />
Corps ............................................................................................................................ 415<br />
Sauvegarde des spécifications de capture ................................................................ 418<br />
Pour aller plus loin ................................................................................................................ 419<br />
Exercices ................................................................................................................................. 420<br />
18 Types <strong>et</strong> docum<strong>en</strong>tation....................................................................................................... 423<br />
Types <strong>en</strong> <strong>Erlang</strong>...................................................................................................................... 423<br />
Exemple : <strong>en</strong>registrem<strong>en</strong>ts avec champs typés ...................................................... 423<br />
Notation des types <strong>Erlang</strong>............................................................................................ 424<br />
TypEr : types succès <strong>et</strong> infér<strong>en</strong>ce de types ....................................................................... 426<br />
Dialyzer : DIscrepancy AnaLYZer for ERlang programs.................................... 429<br />
Docum<strong>en</strong>tation avec EDoc................................................................................................... 430<br />
Docum<strong>en</strong>tation de bd_abos.erl................................................................................... 431<br />
© 2010 <strong>Pearson</strong> France – <strong>Programmer</strong> <strong>en</strong> <strong>Erlang</strong> – <strong>Francesco</strong> <strong>Cesarini</strong>, <strong>Simon</strong> Thompson
XII <strong>Programmer</strong> <strong>en</strong> <strong>Erlang</strong><br />
Lancem<strong>en</strong>t d'EDoc......................................................................................................... 433<br />
Types dans EDoc............................................................................................................ 436<br />
Aller plus loin avec EDoc............................................................................................ 437<br />
Exercices.................................................................................................................................. 438<br />
19 EUnit <strong>et</strong> développem<strong>en</strong>t guidé par les tests.................................................................... 439<br />
Développem<strong>en</strong>t guidé par les tests...................................................................................... 439<br />
EUnit .................................................................................................................................. 440<br />
Utilisation d'EUnit.......................................................................................................... 441<br />
Exemple de test fonctionnel : sérialisation d'un arbre .......................................... 442<br />
Infrastructure d'EUnit............................................................................................................ 445<br />
Macro d'assertions.......................................................................................................... 445<br />
Générateurs de tests....................................................................................................... 445<br />
Représ<strong>en</strong>tation de tests EUnit..................................................................................... 446<br />
Test des systèmes à états....................................................................................................... 447<br />
Fixtures : initialisation <strong>et</strong> n<strong>et</strong>toyage .......................................................................... 447<br />
Test des programmes concurr<strong>en</strong>ts....................................................................................... 448<br />
Exercices ................................................................................................................................. 449<br />
20 Style <strong>et</strong> efficacité.................................................................................................................... 451<br />
Applications <strong>et</strong> modules........................................................................................................ 451<br />
Bibliothèques................................................................................................................... 452<br />
Code sale........................................................................................................................... 453<br />
Interfaces.......................................................................................................................... 453<br />
Valeurs des résultats ...................................................................................................... 454<br />
Structures de données internes.................................................................................... 456<br />
Processus <strong>et</strong> concurr<strong>en</strong>ce...................................................................................................... 456<br />
Conv<strong>en</strong>tions de style.............................................................................................................. 461<br />
Stratégies de codage.............................................................................................................. 467<br />
Efficacité.................................................................................................................................. 469<br />
Programmation séqu<strong>en</strong>tielle........................................................................................ 469<br />
Listes ............................................................................................................................ 470<br />
Récursivité terminale <strong>et</strong> non terminale .................................................................... 472<br />
Concurr<strong>en</strong>ce..................................................................................................................... 472<br />
Enfin... ................................................................................................................................. 474<br />
© 2010 <strong>Pearson</strong> France – <strong>Programmer</strong> <strong>en</strong> <strong>Erlang</strong> – <strong>Francesco</strong> <strong>Cesarini</strong>, <strong>Simon</strong> Thompson
Table des matières XIII<br />
Annexe. Utilisation d’<strong>Erlang</strong>........................................................................................................ 477<br />
Débuter avec <strong>Erlang</strong> ............................................................................................................. 477<br />
Installation du système.................................................................................................. 477<br />
Utilisation du shell <strong>Erlang</strong>............................................................................................ 477<br />
Outils pour <strong>Erlang</strong>.................................................................................................................. 479<br />
Éditeurs ............................................................................................................................ 479<br />
Autres outils..................................................................................................................... 480<br />
Pour aller plus loin ................................................................................................................ 481<br />
Index................................................................................................................................................... 483<br />
© 2010 <strong>Pearson</strong> France – <strong>Programmer</strong> <strong>en</strong> <strong>Erlang</strong> – <strong>Francesco</strong> <strong>Cesarini</strong>, <strong>Simon</strong> Thompson