Académique Documents
Professionnel Documents
Culture Documents
Le langage Erlang
1 / 30
Erlang
Disponibilit
Open Source depuis n 1998 Fonctionne sur Unix, Windows et systmes embarqus Utilise un bytecode compact et ecace et/ou du code natif
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
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).
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]
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
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).
Le langage Erlang
10 / 30
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).
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).
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).
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
Le langage Erlang
18 / 30
Listes
Dans toute unication, _ peut tre utilis pour une correspondance russissant toujours
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]).
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
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.
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.
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.
Le langage Erlang
30 / 30