Vous êtes sur la page 1sur 17

Le langage Erlang

Brique ROSE Samuel Tardieu sam@rfc1149.net


cole Nationale Suprieure des Tlcommunications

Samuel Tardieu (ENST)

Le langage Erlang

1 / 30

Erlang

Langage de programmation cr par ricsson


Pour les autocommutateurs (centraux tlphoniques) Adapt pour les applications rparties temps-rel mou Doit permettre une mise jour de lapplication sans interruption Doit permettre une rpartition de la charge et une migration de service

Disponibilit
Open Source depuis n 1998 Fonctionne sur Unix, Windows et systmes embarqus Utilise un bytecode compact et ecace et/ou du code natif

Samuel Tardieu (ENST)

Le langage Erlang

2 / 30

Caractristiques

Caractristiques du langage
Langage fonctionnel Paralllisation grce des processus concurrents Faiblement typ Bas sur lunication (pattern matching )

Interprteur et outils
Interprteur interactif Outils de gestion graphiques Base de donnes intgre avec langage de requte Permet de booter un nud sur le rseau

Samuel Tardieu (ENST)

Le langage Erlang

3 / 30

Langage fonctionnel

Pas de procdure, uniquement des fonctions renvoyant quelque chose Les fonctions sont des objets du langage part entire et peuvent tre manipules Aucune structure de boucle imprative nexiste Pas de limite sur la taille des entiers manipuls Lunication permet une expression claire :
fact (0) -> 1; fact (N) -> N * fact (N-1).

Samuel Tardieu (ENST)

Le langage Erlang

5 / 30

Types de donnes

Types de base
Atomes (commencent par une minuscule ou entre guillements simples) : foo, Bar, 123 Entiers : 1, 2 Flottants : 1.0, 2.5

Types composites
Tuples : {2, 1.0, a} Listes : [2.4, 1, 2, 3, [xyz, "foobar"]]

Un caractre est reprsent par un entier, une chane de caractres par une liste dentiers : "abc" = [97, 98, 99]

Samuel Tardieu (ENST)

Le langage Erlang

6 / 30

Variables

Une variable
a un nom qui commence par une majuscule est accessible dans les scopes imbriqu nest lie quune fois

Lunication permet
daecter une valeur une variable de tester la valeur dune variable

Exemple :
A = 3. A = 3. A = 4. % Affectation % Unification: succes % Echec

Samuel Tardieu (ENST)

Le langage Erlang

8 / 30

Modules et fonctions

Un module
est dclar par la construction -module (name ). dclare les fonctions exportes avec leur arit : -export([f/1, g/2]). seules les fonctions exportes peuvent tre appeles de lextrieur du module -module (math). -export ([fact/1]). fact (0) -> 1; fact (N) -> N * fact (N-1).

Samuel Tardieu (ENST)

Le langage Erlang

10 / 30

Construction dune fonction

Une fonction possde


une partie gauche (clause) qui sera unie lors de lappel une partie droite (corps)

Une dclaration se termine par un . (point), une clause par un ; (point-virgule) si dautres clauses suivent
fact (0) -> 1; fact (N) -> N * fact (N-1).

Samuel Tardieu (ENST)

Le langage Erlang

12 / 30

Rcursivit terminale

Erlang gre la rcursivit terminale La rcursivit terminale est prfrable la rcursivit non-terminale (mmoire consomme en O(1)) Exemple :
-module (math). -export ([fact/1]). fact (0, A) -> A; fact (N, A) -> fact (N-1, A*N). fact (N) -> fact (N, 1).

Samuel Tardieu (ENST)

Le langage Erlang

14 / 30

Gardes

Les gardes permettent de tester les paramtres Une garde ne peut contenir que des oprations simples
-module (math). -export ([fact/1]). fact (0, A) -> A; fact (N, A) -> fact (N-1, A*N). fact (N) when integer (N), N >= 0 -> fact (N, 1).

Samuel Tardieu (ENST)

Le langage Erlang

16 / 30

Lambda expressions

Une expression lambda est une fonction anonyme Lenvironnement (fermeture) est captur Exemple :
-module (lambda). -export ([adder/1]). adder (N) -> fun (X) -> N + X end.

% "Capture" N

Samuel Tardieu (ENST)

Le langage Erlang

18 / 30

Listes

Une liste non-vide possde


une tte une queue (qui est une liste)

[1, 2, 3] = [1 | [2 | [3 | []]]] Exemple :


length ([]) -> 0; length ([_ | T]) -> 1 + length (T).

Dans toute unication, _ peut tre utilis pour une correspondance russissant toujours

Samuel Tardieu (ENST)

Le langage Erlang

20 / 30

Comprhensions

Permet dexprimer un ltrage sur les lments dune liste Exemple : [X || X <- L, X > 5] reprsente la liste des lments de L suprieurs 5 Exemple : [(X,Y) || X <- L1, cartsien des listes L1 et L2 Tri rapide (quicksort) : Y <- L2] construit le produit

sort ([]) -> []; sort ([P | L]) -> sort ([X || X <- L, X < P]) ++ [P] ++ sort ([X || X <- L, X >= P]).

Samuel Tardieu (ENST)

Le langage Erlang

22 / 30

Processus

Un processus Erlang est une entit autonome dot dun PID unique Il peut avoir un ou plusieurs noms symboliques Il possde une bote lettres
tout processus peut envoyer un message un autre processus en plaant linformation dans la bote du destinataire tout processus peut attendre, dans sa bote, avec un timeout ventuel, un message qui vrierait certaines proprits

Samuel Tardieu (ENST)

Le langage Erlang

24 / 30

Exemple de processus
Compteur srialis :
start () -> spawn (?MODULE, counter, [1]). counter (N) -> receive Sender -> Sender ! N end, counter (N+1). get (PID) -> PID ! self (), receive Answer -> Answer end.

Samuel Tardieu (ENST)

Le langage Erlang

26 / 30

Processus nomm

start () -> register (cnt, spawn (?MODULE, counter, [1])). counter (N) -> receive Sender -> Sender ! N end, counter (N+1). get () -> cnt ! self (), receive Answer -> Answer end.

Samuel Tardieu (ENST)

Le langage Erlang

28 / 30

Limite de temps

start () -> register (cnt, spawn (?MODULE, counter, [1])). counter (N) -> receive Sender -> Sender ! N, counter (N+1) after 1000 -> counter (N*2) end. get () -> cnt ! self (), receive Answer -> Answer end.

Samuel Tardieu (ENST)

Le langage Erlang

30 / 30