Erlang (langage)

Erlang
Logo.

Date de première version 1987
Paradigme Concurrent
Fonctionnel
Auteur Ericsson
Développeur Ericsson
Dernière version 27.1.2 ()[1]Voir et modifier les données sur Wikidata
Typage Dynamique
Fort
Influencé par Prolog
A influencé Scala, Clojure
Écrit en ErlangVoir et modifier les données sur Wikidata
Système d'exploitation Multi-plateforme
Licence Licence Apache 2.0[2]Voir et modifier les données sur Wikidata
Site web www.erlang.orgVoir et modifier les données sur Wikidata
Extension de fichier erlVoir et modifier les données sur Wikidata
LYME et LYCE sont basés sur Erlang et offrent des alternatives à LAMP.

Erlang est un langage de programmation, supportant plusieurs paradigmes : concurrent, temps réel, distribué. Son cœur séquentiel est un langage fonctionnel à évaluation stricte, affectation unique, au typage dynamique fort. Sa couche concurrente est fondée 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 à très haute disponibilité. Erlang est conçu pour s'exécuter sur une machine virtuelle spécifique appelée BEAM.

Il a été créé par Ericsson, qui l'utilise dans plusieurs de ses produits, tels que le commutateur ATM AXD 301. Initialement propriétaire, il est publié sous licence Open Source depuis 1998. Il est également utilisé par d'autres entreprises développant des logiciels liés aux réseaux de télécommunications, comme T-Mobile, Nortel ou encore plus récemment WhatsApp pour de la messagerie instantanée.
Il est aussi utilisé pour écrire le serveur XMPP ejabberd, la base de données NoSQL CouchDB, 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). OTP représente le framework standard de l'univers Erlang, la plupart des programmeurs l'utilisant comme base d'interopérabilité. Il peut s'interfacer avec d'autres langages comme Java ou C++.

Le nom « Erlang » fait référence au mathématicien Agner Erlang, tout en faisant figure de mot valise de l’expression Ericsson Language.

Exemples

Comme tous les langages fonctionnels, Erlang repose beaucoup sur la récursivité.

En Erlang, la fonction factorielle peut s'écrire sous une forme récursive, comme suit :

-module(fact). % le nom du fichier est fact.erl (fichier et module doivent porter le même nom)
-export([fac/1]). % exporte (publiquement) la fonction fac, d'arité 1 (un seul argument)

fac(0) -> 1; % cas de base : notez le point-virgule qui signifie « ou »
fac(N) when N > 0 -> N*fac(N-1). % cœur récursif : quand N vaut 1, alors fac(N-1) retourne 1,
                                 % la récursion s'arrête et N * 1 est retourné comme résultat

fac(0) est le cas de base, et fac(N) le cœur récursif.

Une version utilisant la récursion terminale, avec un accumulateur :

-module(tail_fact).
-export([tail_fact/1]).

tail_fact(N) -> tail_fact(N,1). % interface publique : délègue à l'implémentation tail_fact/2
tail_fact(0,Acc) -> Acc; % cas de base : si N vaut 0, on retourne l'accumulateur
tail_fact(N,Acc) when N > 0 -> tail_fact(N-1,N*Acc). % cœur récursif : contrairement au cas récursif simple,
                                                     % où la valeur de fac() est multipliée à N et doit être
                                                     % conservée en mémoire, ici tail_fact() est « seule »,
                                                     % l'accumulateur Acc permettant de passer à l'itération
                                                     % suivante sans conserver les N-1 valeurs de tail_fact()
                                                     % précédentes en mémoire (le cas de base gère le retour final)

L'algorithme de tri Quicksort avec une implémentation également récursive peut s'écrire sous cette forme en Erlang (de nombreuses variantes existent) :

%% 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.

Fonctionnalités notables

Le partage de données par passage de message

Contrairement aux processus légers (threads) 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 avancées, ainsi qu'une base de données répartie. L'accent est 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.

Notes et références

  1. a et b « Release 27.1.2 », (consulté le )
  2. « Erlang/OTP 18.0 has been released » (consulté le )

Annexes

Articles connexes

  • Reia, langage de script pour la machine virtuelle Erlang, inspiré de Ruby, projet abandonné au profit de :
  • Elixir, langage de script pour la machine virtuelle Erlang, inspiré de Ruby.

Liens externes

Read other articles:

Period of time that an individual spends at paid occupational labor Not to be confused with Work-time. This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Working time – news · newspapers · books · scholar · JSTOR (August 2021) (Learn how and when to remove this message) Average annual working hours per employed...

 

 

Questa voce sull'argomento arbitri di calcio è solo un abbozzo. Contribuisci a migliorarla secondo le convenzioni di Wikipedia. Enea Jorgji Informazioni personali Arbitro di Calcio Federazione  Albania Attività nazionale Anni Campionato Ruolo 2009- Kategoria Superiore Arbitro Attività internazionale 2012- UEFA e FIFA Arbitro Enea Jorgji (Elbasan, 15 agosto 1985) è un arbitro di calcio albanese. Altri progetti Altri progetti Wikimedia Commons Wikimedia Commons contiene immagini ...

 

 

Kabupaten MalinauKabupatenRumah Lamin Malinau LambangMotto: IntimungIndah, tertib, makmur, dan unggul[a]PetaKabupaten MalinauPetaTampilkan peta KalimantanKabupaten MalinauKabupaten Malinau (Indonesia)Tampilkan peta IndonesiaKoordinat: 2°27′00″N 115°41′00″E / 2.45°N 115.6833°E / 2.45; 115.6833Negara IndonesiaProvinsiKalimantan UtaraDasar hukumUU No. 47 Tahun 1999Ibu kotaMalinau KotaJumlah satuan pemerintahan Daftar Kecamatan: 15Desa: 109 Pe...

Policy bureau of the Hong Kong Government For the agency in Macau, see Education and Youth Development Bureau. Education Bureau教育局Emblem of the Hong Kong SARAgency overviewFormed1852Jurisdiction Hong KongHeadquarters11/F, East Wing, Central Government Offices, 2 Tim Mei Avenue, Tamar, Hong KongEmployees5355Minister responsibleChristine Choi, Secretary for EducationDeputy Minister responsibleUnder Secretary for EducationAgency executiveMichelle Li, Permanent Secretary for EducationC...

 

 

American pay TV network owned by A&E Networks Television channel LMNCountryUnited StatesBroadcast areaNationwideHeadquartersNew York, New YorkProgrammingLanguage(s)EnglishPicture format1080i HDTV(downscaled to letterboxed 480i for the SDTV feed)OwnershipOwnerA&E NetworksParentLifetime Entertainment ServicesSister channels Lifetime Lifetime Real Women HistoryLaunchedJune 29, 1998; 25 years ago (1998-06-29)Former names(Rebrandings section)LinksWebsitewww.mylifetime.com...

 

 

2015 concert tour by One Direction On the Road Again TourWorld tour by One DirectionPromotional poster for the tour used fromApril 2015[1]LocationOceania • Asia • Europe • Africa • North AmericaAssociated albumFourStart date7 February 2015 (2015-02-07)End date31 October 2015 (2015-10-31)Legs8No. of shows77Box office$208 million ($267.37 million in 2023 dollars)[2]One Direction concert chronology Where We Are Tour(2014) On the Road Again To...

American political activist, editor, and rabbi (born 1943) Michael LernerLerner at Occupy Oakland, November 2011Born1943 (age 80–81)Newark, New Jersey, USAlma materUniversity of California, BerkeleyWright InstituteOccupationsRabbieditorEmployersBeyt Tikkun SynagogueTikkunSpousesNan Fink (div. 1991) Deborah Kohn-Lerner ​ ​(m. 1998; div. 2014)​ Cat Zavis ​(m. 2015)​ChildrenAkiva Jeremiah Lerner Mic...

 

 

Abraham Burton CohenBorn9 March 1882ChicagoDied11 February 1956 (aged 73)Alma materPurdue UniversityOccupationCivil engineerEmployerDelaware, Lackawanna and Western RailroadWorksTunkhannock Viaduct[edit on Wikidata] American civil engineer Hudson County Boulevard Bridge at Journal Square Abraham Burton Cohen (March 9, 1882 – February 11, 1956) was an American civil engineer notable for his role in designing innovative and record-breaking concrete bridges such as the Delaware, Lacka...

 

 

Sporting event delegationNorway at the1912 Summer OlympicsIOC codeNORNOCNorwegian Olympic Committee and Confederation of SportsWebsitewww.idrett.no (in Norwegian)in StockholmCompetitors190 (188 men and 2 women) in 14 sportsMedalsRanked 8th Gold 3 Silver 2 Bronze 5 Total 10 Summer Olympics appearances (overview)19001904190819121920192419281932193619481952195619601964196819721976198019841988199219962000200420082012201620202024Other related appearances1906 Intercalated Games Norway competed...

X Games Austin 2014VenueCircuit of the AmericasLocationAustin, TexasDateJune 5–8← X Games Los Angeles 2013X Games Austin 2015 → X Games Austin 2014 was an action sporting event that took place over June 5–8, 2014, at the Circuit of the Americas in Austin, Texas. Another Venue used for the event was the Austin 360 Amphitheater. While the Summer X Games in past years was typically held in California, this was the first full X Games event to be held in the state of Texa...

 

 

Pour les autres membres de la famille, voir Famille Séchan. Lolita SéchanLolita Séchan au festival d'Angoulême 2022.BiographieNaissance 9 août 1980 (44 ans)Paris (France)Nationalité françaiseActivités Romancière, scénariste de bande dessinéePère RenaudMère Dominique Quilichini (d)Conjoint Renan Luce (de 2009 à 2016)modifier - modifier le code - modifier Wikidata Lolita Séchan , née le 9 août 1980 à Paris[1], est une autrice française de livres pour enfants et de bande...

 

 

Women's coxless pairat the Games of the XXXIII OlympiadOlympic rowingVenueStade nautique de Vaires-sur-Marne, National Olympic Nautical Stadium of Île-de-France, Vaires-sur-MarneDates28 July – 2 August 2024Competitors26 from 13 nationsMedalists Ymkje CleveringVeronique Meester  Netherlands Ioana VrînceanuRoxana Anghel  Romania Jessica MorrisonAnnabelle McIntyre  Australia← 20202028 → Rowing at the2024 Summer OlympicsQualificationSingle scull...

Османо-венгерские войны Осада Белграда в 1456 году Дата 1366-1526 Место Венгрия, Балканы Итог Раздел Венгрии между Габсбургами и Османской империей Противники Королевство Венгрия Молдавское княжество Княжество Валахия Сербская деспотия Королевство Хорватия Османская импер...

 

 

Андрій Михайлович ГродзинськийНародився3 грудня 1926(1926-12-03)Біла ЦеркваПомер17 грудня 1988(1988-12-17) (62 роки)Київ, Українська РСР, СРСРПохованняБайкове кладовищеКраїна СРСРДіяльністьботанікAlma materБілоцерківський сільськогосподарський інститут (1954)Галузьфізіологія рослинН�...

 

 

Dutch painter Dirk Langendijk (1799), The landing of British troops at Callantsoog. National Maritime Museum, Greenwich, London Dirk Langendijk (Rotterdam, 8 March 1748 – Rotterdam, 15 December 1805), written as Langendyk in his day, was a Dutch draughtsman, painter and etcher. He produced mainly depictions of land and sea battles and other military scenes from the Dutch Patriottentijd (circa 1780–1800) and the French Revolutionary and Napoleonic Wars (from 1792). Life Born on the...

Cipher notation system for teaching musical theory Nanine Paris Chevé (1800–68). The Galin-Paris-Chevé system is a method of reading music, based on the ideas of Jean-Jacques Rousseau, founded by Pierre Galin (1786–1821) and developed by Aimé Paris (1798–1866), his sister Nanine Paris (1800–1868), and her husband Émile-Joseph-Maurice Chevé (1804–1864). Origin According to the Genevan philosopher Jean-Jacques Rousseau, the problem with music was that the notation was too complex...

 

 

Cet article possède un paronyme, voir Feugères. Ne doit pas être confondu avec Pleine-Fougères ou Fougères-sur-Bièvre. Pour la plante (fougère), voir Filicophyta. Fougères De gauche à droite puis de haut en bas : 1/ Le théâtre Victor-Hugo 2/ maisons à pans de bois dans la basse ville 3/ Le château 4/ Le beffroi 5/ L'hôtel de ville 6/ L'église Saint-Sulpice. Blason Logo Administration Pays France Région Bretagne Département Ille-et-Vilaine (sous-préfecture) Arrondisseme...

 

 

Questa voce sull'argomento centri abitati del Minas Gerais è solo un abbozzo. Contribuisci a migliorarla secondo le convenzioni di Wikipedia. Segui i suggerimenti del progetto di riferimento. Bela Vista de Minascomune Bela Vista de Minas – Veduta LocalizzazioneStato Brasile Stato federato Minas Gerais MesoregioneBelo Horizonte MicroregioneItabira AmministrazioneSindacoWilber José de Souza TerritorioCoordinate19°49′38″S 43°05′36″W19°49′38″S, 43°05′36″W...

Danish botanist (1874–1939) Gravestone of Jens Lind and wife Gunild, placed at Viborg Cemetery (Photo: Lars Schmidt). Jens Wilhelm August Lind (1 March 1874, in Nykøbing Mors – 4 October 1939, in Viborg) was a Danish apothecary, botanist and mycologist. He was a pupil of Emil Rostrup and published a full account of all fungi collected in Denmark by Rostrup. These were mainly microfungi, such as plant pathogens.[1] He also wrote accounts on microfungi from Greenland and elsewhere,...

 

 

German aerospace engineer (1911–1998) Hans von OhainHans von Ohain in the 1970sBornHans Joachim Pabst von Ohain(1911-12-14)14 December 1911Dessau, Duchy of Anhalt, German EmpireDied13 March 1998(1998-03-13) (aged 86)Melbourne, Florida, U.S.EducationUniversity of GöttingenOccupationEngineer (jet propulsion)SpouseHanny von OhainChildren4 Hans Joachim Pabst von Ohain (14 December 1911 – 13 March 1998) was a German physicist, engineer, and the designer of the first aircraft...