Erlang
République Algérienne démocratique et populaire.
Université Dr. Tahar Moulay – Saïda
Département d’informatique
Matière : DAMSC
Master 2 RISR
2019/2020
Présenté par : Enseigné par :
• Kamar MEDDAH • Mr. khobzaoui
Plan
I. Historique,
II. Caractéristiques,
III. Langage fonctionnel,
IV. Pourquoi Erlang,
V. Types,
VI. Fonctions,
VII. Conditions,
VIII.Modules,
IX. Conclusion.
I. Historique
I. Historique
▪ Langage de programmation créé par Ericsson (acteur de
l’industrie des télécommunication).
▪ Créé en 1986.
▪ Open Source depuis 1998
▪ Conçu pour les autocommutateurs (centres téléphoniques).
▪ Fonctionne sur Unix, Windows et systèmes embarqués.
▪ Utilise un bytecode compact et efficace et/ou du code natif.
II. Caractéristiques
II. Caractéristiques
▪ Langage simple et épuré.
▪ Gestion de la concurrence très léger.
▪ Pas d’états partagé entre les processus.
▪ Passage des messages asynchrones.
▪ Les processus doivent êtres en mesure de s’exécuter tout le
temps.
▪ Adapté pour les applications réparties temps-réel.
II. Caractéristiques
▪ Permet une mise à jour de l'application sans interruption.
▪ Permet une répartition de la charge et une migration de service.
▪ Pas d’états partage pas de variable mutable.
▪ Langage fonctionnel.
▪ Parallélisassions grâce à des processus concurrents.
▪ Faiblement typé (typage dynamique).
▪ Basé sur « pattern matching ».
II. Caractéristiques
▪ Interpréteur interactif.
▪ Outils de gestion graphiques.
▪ Base de données intégrée avec langage de requête.
▪ Permet de booter un nœud sur le réseau.
II. Caractéristiques
▪ Interpréteur interactif.
▪ Outils de gestion graphiques.
▪ Base de données intégrée avec langage de requête.
▪ Permet de booter un nœud sur le réseau.
ii. Variables
▪ Le nom des variables commencent toujours par une majuscule.
▪ Une variable est affectée une seul fois (immutable).
▪ 1> X = 10.
▪ 12
▪ 2> X = 20.
▪ ** exeption error : no match of right hand side value 20
iii. Ponctuation
▪ Le point suivi d’un espace ou d’un saut de ligne : marque la fin
d’une expression ou d’une fonction.
▪ Le point virgule : sépare les clauses (définition d’une fonction).
▪ La virgule : sépare les éléments d’une structure (liste ou tuples) Ou
les arguments d’une fonction.
III. Langage
fonctionnel
i. Qu’est ce qu’un langage fonctionnel
▪ Pas de procédure uniquement des fonctions renvoyant quelque
chose.
▪ Les fonctions sont des objets du langage à part entière et
peuvent être manipulées.
▪ Aucune structure de boucle impérative n'existe.
▪ Récursivité.
i. Qu’est ce qu’un langage fonctionnel
▪ Une variable est affectée une seul fois (immutable).
▪ Pas de limite sur la taille des entiers manipulés.
▪ L'unification permet une expression claire :
▪ fact (0) -> 1;
▪ fact (N) -> N * fact (N-1).
IV.Pourquoi Erlang
IV. Pourquoi Erlang
▪ Lors d'une mise à jour, on souhaite mettre à jour l'application
sans couper la connexion de tous nos utilisateurs (encore plus
critique dans le cas des websockets).
▪ Dans le cadre d'une application de petite taille, on souhaite
partager le même code pour le serveur HTTP et le serveur de
WebSocket (et ne pas avoir 2 codes / 2 langages à maintenir).
IV. Pourquoi Erlang
▪ Lors d'une montée en charge il faut être capable de distribuer
une partie de notre application pour répondre aux besoins sans
affecter le reste de l'application.
▪ Une requête qui crash ou un processus qui échoue (échec d'un
traitement d'image, d'un envoie d'email...) ne doit pas affecter
toute l'application.
▪ Erlang apporte une solution à toutes ces problématiques grâce
à la structure OTP (Open Telecom Platform).
IV. Pourquoi Erlang
IV. Pourquoi Erlang
IV. Pourquoi Erlang
▪ Cette solution consiste à découper notre application sous forme
de processus ultra légers.
▪ Ces processus vont être capable de communiquer ensemble à
travers un système de message interne à la machine virtuelle.
▪ Les processus seront accompagnés d'un superviseur capable
d'agir en cas d'erreur.
▪ Cette structure donne d'ailleurs lieu à une philosophie propre à
Erlang « Let it crash »
IV. Pourquoi Erlang
IV. Pourquoi Erlang
▪ Si notre processus rencontre une erreur qui n'est pas gérée, le
processus crash et un nouveau processus est démarré pour le
remplacer.
▪ Ce processus redémarre dans un état "stable" et l'application
ne se trouve pas affecté.
IV. Pourquoi Erlang
IV. Pourquoi Erlang
IV. Pourquoi Erlang
▪ Cependant, si un processus crash en boucle le problème sera
alors remonté et pourra affecter l'ensemble de votre application.
▪ Si la base de données est inaccessible par exemple, le
processus n'arrivera pas à se reconnecter lors de son
démarrage et au bout d'un certain nombre de redémarrage, fera
planter le superviseur parent.
VI.Types
VI. Types
▪ Les entiers.
▪ Les réels.
▪ Les atomes.
▪ Les tuples.
VI. Types
▪ Les listes.
▪ Les booléens.
▪ Les chaines de caractères.
▪ Les dictionnaires.
i. Entier
▪ Aucune taille le limite sauf celle de la mémoire.
▪ Par défaut, les entier sont exprimes en base 10.
▪ Possibilité de définir un entier dans une base comprise entre 2 et
16 (Base#value).
i. Entier
▪ Exemple:
▪ Dec = 12345.
▪ Bin = 2#001101.
▪ Hex = 16#FFA68B.
ii. Réel
▪ Présentation 64 bits.
▪ Un numérique est un réel s’il contient un point.
▪ Exemple:
▪ X = 1.2345.
▪ Bin = -2.67e+5.
iii. Atome
▪ Ce n’est pas une constante numérique.
▪ Un atome est un littéral, une constante dont la valeur est le nom.
▪ Un atome commence par une lettre minuscules suivie par des lettre
minuscules ou majuscules ou des chiffre ou ‘_’ ou ‘@’.
▪ Il peut aussi être une suite de caractères délimitée par des simple
quotes.
iii. Atome
▪ Exemple:
▪ A = ok.
▪ B = exemple@test.com.
▪ C = ‘salut tout le monde’.
iv. Tuples
▪ Un ensemble de taille fixe d’éléments.
▪ Exemple:
▪ Tup = {1,2, ’’salut’’,nom}.
v. Listes
▪ Un ensemble de taille variable d’éléments.
▪ Une liste chainer.
▪ Exemple:
▪ Arr = [1,2, ’’salut’’,nom].
vi. Booléen
▪ Les booléens sont un cas particulier d’atomes
▪ Exemple:
▪ T = true.
▪ F = false.
vii. Chaines de caractères
▪ Une chaine de caractères est une liste d’entiers compris entre 0 et 255
(code ASCII).
▪ Délimitée par double quotes.
▪ Possibilité de définition directement sous forme d’une liste.
▪ Support de l'Unicode.
▪ Exemple:
▪ Str = ‘’Salut’‘.
▪ Str2 = [83, 97, 108, 117, 116].
viii. Dictionnaire
▪ Un dictionnaire est représenté par une liste de tuples a deux
éléments.
▪ Exemple:
▪ Dict = [{a, 1}, {b, 2}].
VII.Fonctions
VII. Fonction
▪ Une fonction possède :
▪ une partie gauche (clause) qui sera unifiée alors de l'appel.
▪ une partie droite (corps).
▪ Une déclaration se termine par un . (point).
▪ une clause se termine par un ;(point-virgule) si d'autres clauses
suivent.
VII. Fonction
▪ Exemple:
▪ fact (0) -> 1;
▪ fact (N) -> N * fact (N-1).
VIII.Conditions
i. Guard
▪ Les gardes permettent de tester les paramètres.
▪ Une garde ne peut contenir que des opérations simples.
I. Guard
▪ Exemple:
▪ -module(test).
▪ -export([display/1,start/0]).
▪ display(N) when N > 10 -> io:fwrite("greater then 10");
▪ display(N) when N < 10 -> io:fwrite("Less than 10").
▪ start() -> display(11).
ii. If statement
▪ Les ‘if’ est une séquence des conditions.
▪ Des que une condition est vérifiée on applique le membre droit.
▪ La séquence termine souvent par true.
ii. If statement
▪ Exemple:
▪ If
▪ X>Y -> ’’X est plus grand que Y’’;
▪ true -> ‘’Y est plus grand que X’’
▪ end.
IX.Modules
IX. Modules
▪ Un module est déclaré par la construction -module (name).
▪ Déclare les fonctions exportées avec leur arité : -export([f/1,g/2]).
▪ Seules les fonctions exportées peuvent être appelées de l'extérieur
du module.
IX. Modules
▪ Exemple:
▪ -module (math).
▪ -export ([fact/1]).
▪ fact (0) -> 1;
▪ fact (N) -> N * fact (N-1).
X. Conclusion
X. Conclusion
• Erlang est utilisée pour construire des application temps réel
massivement évolutifs avec des exigences de haute disponibilité.
• Erlang est utiliser pour créer de nombreux technologie populaire
notamment RabbitMQ et couchDB.
• Erlang est un langage un peu trop "simple" qui entraine beaucoup
de boiler plate et de répétition, ce qui peut le rendre frustrant par
moment.
• Elixir un langages basé sur erlang permet une meilleur
organisation du code et offre une série de module afin de travailler
plus simplement avec les outils fournis par erlang.
Références
• http://erlang.org/doc.
• https://info.usherbrooke.ca/GabrielGirard/cours/ift-630-
processus-concurrents-et-parallelisme/projet/exemples-
danciens-projets/Hiver2009/erlang-un-langage-de-
programmation-parallele.
• Programmer en Erlang De Francesco Cesarini, Simon
Thompson.
• https://www.grafikart.fr/tutoriels/presentation-elixir-896.
• https://erlangbyexample.org/
Merci pour votre
attention

Erlang

  • 1.
    Erlang République Algérienne démocratiqueet populaire. Université Dr. Tahar Moulay – Saïda Département d’informatique Matière : DAMSC Master 2 RISR 2019/2020 Présenté par : Enseigné par : • Kamar MEDDAH • Mr. khobzaoui
  • 2.
    Plan I. Historique, II. Caractéristiques, III.Langage fonctionnel, IV. Pourquoi Erlang, V. Types, VI. Fonctions, VII. Conditions, VIII.Modules, IX. Conclusion.
  • 3.
  • 4.
    I. Historique ▪ Langagede programmation créé par Ericsson (acteur de l’industrie des télécommunication). ▪ Créé en 1986. ▪ Open Source depuis 1998 ▪ Conçu pour les autocommutateurs (centres téléphoniques). ▪ Fonctionne sur Unix, Windows et systèmes embarqués. ▪ Utilise un bytecode compact et efficace et/ou du code natif.
  • 5.
  • 6.
    II. Caractéristiques ▪ Langagesimple et épuré. ▪ Gestion de la concurrence très léger. ▪ Pas d’états partagé entre les processus. ▪ Passage des messages asynchrones. ▪ Les processus doivent êtres en mesure de s’exécuter tout le temps. ▪ Adapté pour les applications réparties temps-réel.
  • 7.
    II. Caractéristiques ▪ Permetune mise à jour de l'application sans interruption. ▪ Permet une répartition de la charge et une migration de service. ▪ Pas d’états partage pas de variable mutable. ▪ Langage fonctionnel. ▪ Parallélisassions grâce à des processus concurrents. ▪ Faiblement typé (typage dynamique). ▪ Basé sur « pattern matching ».
  • 8.
    II. Caractéristiques ▪ Interpréteurinteractif. ▪ Outils de gestion graphiques. ▪ Base de données intégrée avec langage de requête. ▪ Permet de booter un nœud sur le réseau.
  • 9.
    II. Caractéristiques ▪ Interpréteurinteractif. ▪ Outils de gestion graphiques. ▪ Base de données intégrée avec langage de requête. ▪ Permet de booter un nœud sur le réseau.
  • 10.
    ii. Variables ▪ Lenom des variables commencent toujours par une majuscule. ▪ Une variable est affectée une seul fois (immutable). ▪ 1> X = 10. ▪ 12 ▪ 2> X = 20. ▪ ** exeption error : no match of right hand side value 20
  • 11.
    iii. Ponctuation ▪ Lepoint suivi d’un espace ou d’un saut de ligne : marque la fin d’une expression ou d’une fonction. ▪ Le point virgule : sépare les clauses (définition d’une fonction). ▪ La virgule : sépare les éléments d’une structure (liste ou tuples) Ou les arguments d’une fonction.
  • 12.
  • 13.
    i. Qu’est cequ’un langage fonctionnel ▪ Pas de procédure uniquement des fonctions renvoyant quelque chose. ▪ Les fonctions sont des objets du langage à part entière et peuvent être manipulées. ▪ Aucune structure de boucle impérative n'existe. ▪ Récursivité.
  • 14.
    i. Qu’est cequ’un langage fonctionnel ▪ Une variable est affectée une seul fois (immutable). ▪ Pas de limite sur la taille des entiers manipulés. ▪ L'unification permet une expression claire : ▪ fact (0) -> 1; ▪ fact (N) -> N * fact (N-1).
  • 15.
  • 16.
    IV. Pourquoi Erlang ▪Lors d'une mise à jour, on souhaite mettre à jour l'application sans couper la connexion de tous nos utilisateurs (encore plus critique dans le cas des websockets). ▪ Dans le cadre d'une application de petite taille, on souhaite partager le même code pour le serveur HTTP et le serveur de WebSocket (et ne pas avoir 2 codes / 2 langages à maintenir).
  • 17.
    IV. Pourquoi Erlang ▪Lors d'une montée en charge il faut être capable de distribuer une partie de notre application pour répondre aux besoins sans affecter le reste de l'application. ▪ Une requête qui crash ou un processus qui échoue (échec d'un traitement d'image, d'un envoie d'email...) ne doit pas affecter toute l'application. ▪ Erlang apporte une solution à toutes ces problématiques grâce à la structure OTP (Open Telecom Platform).
  • 18.
  • 19.
  • 20.
    IV. Pourquoi Erlang ▪Cette solution consiste à découper notre application sous forme de processus ultra légers. ▪ Ces processus vont être capable de communiquer ensemble à travers un système de message interne à la machine virtuelle. ▪ Les processus seront accompagnés d'un superviseur capable d'agir en cas d'erreur. ▪ Cette structure donne d'ailleurs lieu à une philosophie propre à Erlang « Let it crash »
  • 21.
  • 22.
    IV. Pourquoi Erlang ▪Si notre processus rencontre une erreur qui n'est pas gérée, le processus crash et un nouveau processus est démarré pour le remplacer. ▪ Ce processus redémarre dans un état "stable" et l'application ne se trouve pas affecté.
  • 23.
  • 24.
  • 25.
    IV. Pourquoi Erlang ▪Cependant, si un processus crash en boucle le problème sera alors remonté et pourra affecter l'ensemble de votre application. ▪ Si la base de données est inaccessible par exemple, le processus n'arrivera pas à se reconnecter lors de son démarrage et au bout d'un certain nombre de redémarrage, fera planter le superviseur parent.
  • 26.
  • 27.
    VI. Types ▪ Lesentiers. ▪ Les réels. ▪ Les atomes. ▪ Les tuples.
  • 28.
    VI. Types ▪ Leslistes. ▪ Les booléens. ▪ Les chaines de caractères. ▪ Les dictionnaires.
  • 29.
    i. Entier ▪ Aucunetaille le limite sauf celle de la mémoire. ▪ Par défaut, les entier sont exprimes en base 10. ▪ Possibilité de définir un entier dans une base comprise entre 2 et 16 (Base#value).
  • 30.
    i. Entier ▪ Exemple: ▪Dec = 12345. ▪ Bin = 2#001101. ▪ Hex = 16#FFA68B.
  • 31.
    ii. Réel ▪ Présentation64 bits. ▪ Un numérique est un réel s’il contient un point. ▪ Exemple: ▪ X = 1.2345. ▪ Bin = -2.67e+5.
  • 32.
    iii. Atome ▪ Cen’est pas une constante numérique. ▪ Un atome est un littéral, une constante dont la valeur est le nom. ▪ Un atome commence par une lettre minuscules suivie par des lettre minuscules ou majuscules ou des chiffre ou ‘_’ ou ‘@’. ▪ Il peut aussi être une suite de caractères délimitée par des simple quotes.
  • 33.
    iii. Atome ▪ Exemple: ▪A = ok. ▪ B = exemple@test.com. ▪ C = ‘salut tout le monde’.
  • 34.
    iv. Tuples ▪ Unensemble de taille fixe d’éléments. ▪ Exemple: ▪ Tup = {1,2, ’’salut’’,nom}.
  • 35.
    v. Listes ▪ Unensemble de taille variable d’éléments. ▪ Une liste chainer. ▪ Exemple: ▪ Arr = [1,2, ’’salut’’,nom].
  • 36.
    vi. Booléen ▪ Lesbooléens sont un cas particulier d’atomes ▪ Exemple: ▪ T = true. ▪ F = false.
  • 37.
    vii. Chaines decaractères ▪ Une chaine de caractères est une liste d’entiers compris entre 0 et 255 (code ASCII). ▪ Délimitée par double quotes. ▪ Possibilité de définition directement sous forme d’une liste. ▪ Support de l'Unicode. ▪ Exemple: ▪ Str = ‘’Salut’‘. ▪ Str2 = [83, 97, 108, 117, 116].
  • 38.
    viii. Dictionnaire ▪ Undictionnaire est représenté par une liste de tuples a deux éléments. ▪ Exemple: ▪ Dict = [{a, 1}, {b, 2}].
  • 39.
  • 40.
    VII. Fonction ▪ Unefonction possède : ▪ une partie gauche (clause) qui sera unifiée alors de l'appel. ▪ une partie droite (corps). ▪ Une déclaration se termine par un . (point). ▪ une clause se termine par un ;(point-virgule) si d'autres clauses suivent.
  • 41.
    VII. Fonction ▪ Exemple: ▪fact (0) -> 1; ▪ fact (N) -> N * fact (N-1).
  • 42.
  • 43.
    i. Guard ▪ Lesgardes permettent de tester les paramètres. ▪ Une garde ne peut contenir que des opérations simples.
  • 44.
    I. Guard ▪ Exemple: ▪-module(test). ▪ -export([display/1,start/0]). ▪ display(N) when N > 10 -> io:fwrite("greater then 10"); ▪ display(N) when N < 10 -> io:fwrite("Less than 10"). ▪ start() -> display(11).
  • 45.
    ii. If statement ▪Les ‘if’ est une séquence des conditions. ▪ Des que une condition est vérifiée on applique le membre droit. ▪ La séquence termine souvent par true.
  • 46.
    ii. If statement ▪Exemple: ▪ If ▪ X>Y -> ’’X est plus grand que Y’’; ▪ true -> ‘’Y est plus grand que X’’ ▪ end.
  • 47.
  • 48.
    IX. Modules ▪ Unmodule est déclaré par la construction -module (name). ▪ Déclare les fonctions exportées avec leur arité : -export([f/1,g/2]). ▪ Seules les fonctions exportées peuvent être appelées de l'extérieur du module.
  • 49.
    IX. Modules ▪ Exemple: ▪-module (math). ▪ -export ([fact/1]). ▪ fact (0) -> 1; ▪ fact (N) -> N * fact (N-1).
  • 50.
  • 51.
    X. Conclusion • Erlangest utilisée pour construire des application temps réel massivement évolutifs avec des exigences de haute disponibilité. • Erlang est utiliser pour créer de nombreux technologie populaire notamment RabbitMQ et couchDB. • Erlang est un langage un peu trop "simple" qui entraine beaucoup de boiler plate et de répétition, ce qui peut le rendre frustrant par moment. • Elixir un langages basé sur erlang permet une meilleur organisation du code et offre une série de module afin de travailler plus simplement avec les outils fournis par erlang.
  • 52.
    Références • http://erlang.org/doc. • https://info.usherbrooke.ca/GabrielGirard/cours/ift-630- processus-concurrents-et-parallelisme/projet/exemples- danciens-projets/Hiver2009/erlang-un-langage-de- programmation-parallele. •Programmer en Erlang De Francesco Cesarini, Simon Thompson. • https://www.grafikart.fr/tutoriels/presentation-elixir-896. • https://erlangbyexample.org/
  • 53.