Erlang (Langage)

Erlang (langage)

Page d'aide sur l'homonymie Pour les articles homonymes, voir Erlang.
Logo de Erlang

Apparu en 1987
Auteur Ericsson
Développeur Ericsson
Dernière version R13B (le 22 avril 2009) [+/−]
Paradigme Concurrent
Fonctionnel
Typage Dynamique
Fort
Influencé par Prolog
A influencé Scala
Système d'exploitation Multiplate-forme
Licence Mozilla Public License
Site Web erlang.org

Erlang, (d'après le nom du mathématicien Agner Erlang, mais aussi contraction d'Ericsson Language), est un langage fonctionnel concurrent, temps réel et distribué basé sur le modèle d'acteur. Il possède des fonctionnalités de tolérance aux pannes et de mise à jour du code à chaud permettant le développement d'applications à haute disponibilité.

Il a été créé par Ericsson qui l'utilise dans plusieurs de ses produits comme le commutateur ATM AXD 301. Depuis sa publication sous licence Open Source en 1998, Erlang est utilisé par d'autres entreprises qui développent des logiciels liés aux réseaux de télécommunications comme T-Mobile et Nortel. Il est aussi utilisé pour écrire le serveur XMPP ejabberd, le serveur HTTP Yaws ainsi que le logiciel de modélisation 3D Wings 3D. Il possède de nombreuses bibliothèques incluses dans la distribution de base et regroupées sous le nom de OTP (Open Telecom Platform), et peut s'interfacer avec d'autres langages comme Java ou C++.

Sommaire

Exemples

En Erlang, la fonction factorielle s'écrit sous sa forme récursive comme suit :

-module(fact).
-export([fac/1]).

fac(0) -> 1;
fac(N) when N > 0 -> N * fac(N-1).

L'algorithme de tri Quicksort avec une implémentation également récursive s'écrit sous cette forme en Erlang :

%% quicksort:qsort(List)
%% Trie une liste d'éléments
-module(quicksort).
-export([qsort/1]).

qsort([]) -> [];
qsort([Pivot|Reste]) ->
    qsort([ X || X <- Reste, X < Pivot]) ++ [Pivot] ++ qsort([ Y || Y <- Reste, Y >= Pivot]).

Le code fait des appels récursifs à la fonction qsort jusqu'à ce que l'ensemble soit trié. L'expression [ X || X <- Reste, X < Pivot] peut se traduire par « Choisir l'ensemble des X tels que X est un membre de Reste et X est inférieur à Pivot ». L'opérateur ++ est celui de la concaténation entre les listes.

Points forts

Le partage de données par passage de message

Contrairement aux fils d'exécution dans des langages classiques tels Java ou C, les processus Erlang ne partagent pas de mémoire pour communiquer ce qui permet d'éviter les problèmes liés à la synchronisation. La transmission d'informations se fait uniquement par passage de messages. La primitive qui permet l'envoi d'un message est send, exprimée par !.

La syntaxe est la suivante :

Pid ! Message

dans lequel Pid est l'identité du processus destinataire et Message une expression quelconque.

À la différence d'autres langages concurrents comme Ada, l'envoi et la réception d'un message sont asynchrones en Erlang. Du point de vue de l'émetteur, l'envoi est instantané quel que soit l'état du destinataire. Le message est simplement remis dans la boîte aux lettres de ce dernier qui pourra le consommer au moment voulu. Cette propriété permet de découpler temporellement l'émetteur du receveur et ainsi de maximiser le niveau de concurrence dans le système tout en restant tolérant à la latence introduite par la communication dans un système distribué.

Gestion explicite du temps

Du fait de ses origines comme outil logiciel de télécommunications, Erlang permet la définition de contraintes de temps réel souple (soft real time), c'est à dire l'exécution d'une action à l'intérieur d'un temps déterminé. Erlang incorpore la gestion du temps dans la primitive de réception de message receive, dont la syntaxe est la suivante:

receive
    Message1 ->
       Action1;
    Message2 ->
       Action2
after
    Timeout ->
       ActionTimeOut
end

Le processus qui exécute le code ci-dessus attendra au plus, la valeur de l'expression Timeout. Si aucun message correspondant à Message1 ou Message2 n'est reçu par le processus d'ici là, il exécute alors l'action ActionTimeOut.

La programmation distribuée à base de nœud et de processus

Les processus Erlang s'exécutent dans une machine virtuelle. Plusieurs machines virtuelles possiblement situées sur différents ordinateurs peuvent être connectées entre elles et former les nœuds d'un système distribué. La communication entre processus localisés sur des nœuds différents utilise les mêmes primitives et possède la même sémantique que pour la communication entre processus du même nœud. Du point de vue du programmeur, la localisation d'un processus est transparente.

Les connexions entre nœuds sont dynamiques. Un nœud peut joindre et quitter le système (ou en être isolé par une panne) à n'importe quel moment. Cette caractéristique autorise la tolérance aux pannes par redondance et la montée en charge d'une application par ajout de nouveaux nœuds.

La richesse de l'environnement

Bâties sur le langage, les bibliothèques Open Telecom Platform (OTP) offrent des fonctionnalités de distribution des traitements et de supervision des nœuds très avancées, ainsi qu'une base de données répartie. L'accent est très clairement mis sur la tolérance aux pannes puisque le couple Erlang/OTP permet entre autres de :

  • mettre à jour le code d'un programme sans arrêter celui-ci
  • désigner des processus superviseurs qui suivront des instructions bien précises en cas d'arrêt des processus supervisés (redémarrage immédiat ou retardé, décompte du nombre d'erreurs avant de ne plus essayer de redémarrer le processus fautif, etc.)
  • mettre en place une hiérarchie de supervision redondante et centralisée de telle sorte que l'application soit entièrement supervisée tout en répartissant la logique de supervision à chaque niveau.

Les points faibles

  • Une documentation bien structurée mais peu abondante, de par le relatif manque de popularité du langage
  • Le traitement de données textuelles assez peu performant
  • Une interface de développement très peu ergonomique en console

Voir aussi

Articles connexes

  • Reia, un langage de script pour la machine virtuelle Erlang

Liens externes

  • Portail de la programmation informatique Portail de la programmation informatique
Ce document provient de « Erlang (langage) ».

Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article Erlang (Langage) de Wikipédia en français (auteurs)

Regardez d'autres dictionnaires:

  • Erlang (langage) — Pour les articles homonymes, voir Erlang. Erlang …   Wikipédia en Français

  • Erlang (langage de programmation) — Erlang (langage) Pour les articles homonymes, voir Erlang. Apparu en 1987 …   Wikipédia en Français

  • Erlang langage de programmation — Erlang (langage) Pour les articles homonymes, voir Erlang. Apparu en 1987 …   Wikipédia en Français

  • Langage De Programmation — Un langage de programmation est un langage informatique, permettant à un être humain d écrire un code source qui sera analysé par une machine, généralement un ordinateur. Le code source subit ensuite une transformation ou une évaluation dans une… …   Wikipédia en Français

  • Langage De Transformation XML — Un langage de transformation XML est un langage de programmation créé spécifiquement pour créer toute forme de document en sortie à partir d un document XML en entrée. Il y a deux cas spécifiques de transformation : XML vers XML : le… …   Wikipédia en Français

  • Langage de transformation xml — Un langage de transformation XML est un langage de programmation créé spécifiquement pour créer toute forme de document en sortie à partir d un document XML en entrée. Il y a deux cas spécifiques de transformation : XML vers XML : le… …   Wikipédia en Français

  • Langage De Description De Format De Document — Un langage de description de format de document est un langage permettant de définir un jeu de règles et contraintes qui seront utilisées pour savoir si une instance de document est valide par rapport à ce même jeu de règles et contraintes.… …   Wikipédia en Français

  • Langage de description — de format de document Un langage de description de format de document est un langage permettant de définir un jeu de règles et contraintes qui seront utilisées pour savoir si une instance de document est valide par rapport à ce même jeu de règles …   Wikipédia en Français

  • Langage fonctionnel — Programmation fonctionnelle La programmation fonctionnelle est un paradigme de programmation qui considère le calcul en tant qu évaluation de fonctions mathématiques et rejette le changement d état et la mutation des données. Elle souligne l… …   Wikipédia en Français

  • Langage de programmation — Programme écrit en Perl. Programm …   Wikipédia en Français

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”