1. 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
4. 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.
6. 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.
7. 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 ».
8. 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.
9. 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.
10. 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
11. 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.
13. 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é.
14. 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).
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).
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 »
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é.
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.
27. VI. Types
▪ Les entiers.
▪ Les réels.
▪ Les atomes.
▪ Les tuples.
28. VI. Types
▪ Les listes.
▪ Les booléens.
▪ Les chaines de caractères.
▪ Les dictionnaires.
29. 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).
31. 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.
32. 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.
34. iv. Tuples
▪ Un ensemble de taille fixe d’éléments.
▪ Exemple:
▪ Tup = {1,2, ’’salut’’,nom}.
35. v. Listes
▪ Un ensemble de taille variable d’éléments.
▪ Une liste chainer.
▪ Exemple:
▪ Arr = [1,2, ’’salut’’,nom].
36. vi. Booléen
▪ Les booléens sont un cas particulier d’atomes
▪ Exemple:
▪ T = true.
▪ F = false.
37. 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].
38. viii. Dictionnaire
▪ Un dictionnaire est représenté par une liste de tuples a deux
éléments.
▪ Exemple:
▪ Dict = [{a, 1}, {b, 2}].
40. 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.
43. i. Guard
▪ Les gardes 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.
48. 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.
51. 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.