03.01.2015 Views

Programmer en Erlang Francesco Cesarini et Simon ... - Pearson

Programmer en Erlang Francesco Cesarini et Simon ... - Pearson

Programmer en Erlang Francesco Cesarini et Simon ... - Pearson

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!