Erlang

Erlang
Utvikler(e)
Ericsson
https://www.erlang.org/
Generell informasjon
Vanlige utvidelser .erl .hrl
Paradigme multiparadigme : funksjonell , samtidig
Dukket opp i 1986
Designet av Henry Castrillo
Siste stabile versjon OTP 24.2 [ 1 ] ​( 15. desember 2021)
type system dynamisk , sterk
implementeringer Erlang
påvirket av Prolog , Smalltalk
har påvirket F# , Clojure , Rust , Scala , Opa , Reia , Elixir
Tillatelse Erlang Public License [ 2 ]​ ( modifisert MPL )

Erlang er et samtidig (eller samtidighetsorientert ) programmeringsspråk og utførelsessystem som inkluderer en virtuell maskin (BEAM) og biblioteker (OTP). [ 3 ]

Den sekvensielle programmeringsundergruppen til Erlang er et funksjonelt språk , med streng evaluering , enkeltoppdrag og dynamisk skriving . Den ble designet av Ericsson -selskapet for å realisere distribuerte, feiltolerante, myk-sanntid , 24x7-applikasjoner. Gir hot swapping av kode slik at koden kan endres uten å stoppe systemet. Erlang var opprinnelig et proprietært Ericsson-språk, men ble utgitt som åpen kildekode-programvare i 1998. Ericsson-implementeringen er primært tolket, men inkluderer også en HiPE- kompilator (bare støttet på enkelte plattformer).

Det er enkelt å lage, administrere og kommunisere prosesser i Erlang, mens tråder på mange språk anses som en komplisert og feilutsatt del. I Erlang er all samtidighet eksplisitt.

Erlang kalles AK Erlang . Navnet antas noen ganger å være en forkortelse for ER icsson LANG uage, på grunn av dets tunge bruk hos Ericsson. I følge Bjarne Däcker – som var sjef for Computer Science Lab i sin tid – er denne dualiteten tilsiktet.

Funksjoner

Samtidig - Erlang har ekstremt lette prosesser hvis minnekrav varierer dynamisk. Prosessene har ikke delt minne og kommuniserer via asynkrone meldinger. Støtter applikasjoner med et stort antall samtidige prosesser.

Distribuert - Erlang er designet for å kjøre i distribuerte miljøer. En virtuell maskin Erlang er en Erlang-node. Et Erlang-distribuert system er et nettverk av noder (vanligvis én per prosessor). En Erlang-node kan lage parallelle prosesser som kjører på andre noder, som kan brukes av andre operativsystemer. Prosesser som ligger på forskjellige noder kommuniserer på nøyaktig samme måte som om de var på en lokal node.

Robusthet - Erlang har flere feildeteksjonsprimitiver som kan brukes til å bygge feiltolerante systemer . For eksempel kan prosesser overvåke status og aktiviteter til andre prosesser, selv om de kjører på andre noder. Prosesser i et distribuert system kan konfigureres til failover til andre noder og automatisk migrere til noder som har blitt gjenopprettet.

Myk sanntid - Erlang støtter "myke" sanntidssystemer, som krever responstider i størrelsesorden millisekunder. Forsinkelsene introdusert av lange søppeloppsamleroperasjoner er uakseptable, så Erlang bruker inkrementelle teknikker i søppeloppsamlingsprosessen.

"Hot" kodeoppdatering - Mange systemer kan ikke stoppes for programvarevedlikehold. Erlang lar kode endres mens systemet kjører. Den gamle koden kan utdateres og erstattes med den nye koden. Under overgangen kan gammel og ny kode eksistere side om side. Det er mulig å installere patcher og oppgraderinger på et fungerende system uten å forstyrre den normale driften av systemet.

Inkrementell kodeinnlasting - Brukere kan fint kontrollere hvordan koden lastes. I innebygde systemer lastes all kode ved oppstart. På systemer under utvikling, lastes kode ved behov, selv når systemet kjører. Hvis det oppdages feil på testtidspunktet, vil bare den defekte koden bli erstattet.

Eksterne grensesnitt - Erlang-prosesser kommuniserer med omverdenen ved hjelp av samme meldingsmekanisme som brukes internt mellom prosesser. Denne mekanismen brukes til kommunikasjon med operativsystemet og for å samhandle med programmer skrevet på andre språk. Hvis det er spesielle effektivitetskrav, finnes det en spesiell versjon av dette konseptet for å koble programmer skrevet for eksempel i C inn i Erlang runtime .


Prosesser

Joe Armstrong, medoppfinneren av Erlang, syntetiserte prinsippene for prosessene: [ 4 ]

Eksempler på funksjonell programmering

Beregning av faktoren :

-modul ( faktum ) . -eksport ( [ fakta / 1 ]). faktum ( 0 ) -> 1 ; fac ( N ) ''' når ''' N > 0 -> N * fac ( N - 1 ).

Implementeringen av Quicksort - algoritmen vil bli vist nedenfor :

%% quicksort:qsort(List) %% Sorter en liste med elementer - modul ( quicksort ). -eksport ( [ qsort / 1 ]). qsort ([]) -> []; qsort ([ Pivot | Rest ]) -> qsort ([ X || X <- Rest , X < Pivot ]) ++ [ Pivot ] ++ qsort ([ Y || Y <- Rest , Y >= Pivot ]) .

Eksempelet ovenfor kaller funksjonen rekursivtqsort til det ikke er noe annet å bestille. Uttrykket [ X || X <- Rest, X < Pivot]er det som er kjent som en listeforståelse , og kan tolkes som: "Velg alle Xhvor Xer medlem av Restog Xer mindre enn Pivot", noe som resulterer i en veldig enkel måte å manipulere lister på. ++er listesammenkoblingsoperatøren.

En sammenligningsfunksjon kan brukes til å definere mer komplekse måter å bestille elementer på.

Følgende eksempel vil sortere flere lister basert på lengden:

-modul ( listsort ) . -eksport ([ etter_lengde / 1 ] ). by_length ( Lists ) -> F = fun ( A , B ) when is_list ( A ), is_list ( B ) -> length ( A ) < length ( B ) end , qsort ( Lists , F ). qsort ([], _) -> []; qsort ([ Pivot | Rest ], Mindre ) -> qsort ([ X || X <- Rest , Smaller ( X , Pivot )], Mindre ) ++ [ Pivot ] ++ qsort ([ Y || Y <- Rest , ikke ( Mindre ( Y , Pivot ))], Mindre ).

Samtidig og distribusjonsorientert språk

Erlangs største styrke er støtte for samtidighet . Den har et lite, men kraftig sett med primitiver for å skape prosesser og kommunisere dem. Prosessmodellen er basert på CAR Hoares Sequential Process Communication -modell . Slike prosesser er den primære måten å strukturere en applikasjon på, og et stort antall av dem kan lages uten ytelsesforringelse (selv en test c [1] ).

Støtte for distribuert programmering er også en del av Erlang: prosesser kan lages både lokalt og på eksterne noder, og kommunikasjonen mellom dem gjøres på samme måte.

Eksempler:

Pid = spawn ( Mod , Func , Args ) % utfører Func - funksjonen som en ny prosess Pid = spawn ( Node , Mod , Func , Args ) % utfører Func - funksjonen på en ekstern node Spør ! a_message % sender en melding til prosessen (asynkront) motta % motta meldingen sendt til denne prosessen a_message -> do_something end .

Hovedformen for feilhåndtering i Erlang er også basert på samtidighet. Når en prosess krasjer, avsluttes den rent og sender en melding til kontrollerprosessen, som kan handle deretter. Denne formen for feilhåndtering kan øke vedlikeholdbarheten og redusere kodekompleksiteten.

Distribusjon

Ericsson ga ut Erlang under en åpen lisens for å sikre sin uavhengighet fra en enkelt leverandør og for å gjøre den mer kjent. Distribusjonen av språket sammen med bibliotekene og sanntidsdatabasen ( Mnesia ) kalles Open Telecom Platform , eller OTP. Ericsson og andre selskaper tilbyr kommersiell støtte for Erlang.

Siden utgivelsen i 1998 har Erlang blitt brukt av forskjellige operatører over hele verden, inkludert Nortel og T-Mobile . Erlang er imidlertid ennå ikke et mye brukt programmeringsspråk.

I dag fortsetter Erlang å utvikle seg jevnlig. Den er tilgjengelig for forskjellige Unix-lignende og Microsoft Windows -operativsystemer .

Se også

  • ejabberd , en XMPP (Jabber) direktemeldingsserver skrevet i Erlang.
  • Wings 3D , Erlang 3D-modelleringsverktøy.
  • Nok en webserver (YAWS, en veldig komplett webapplikasjonsserver i Erlang).
  • Tsung , et veldig kraftig ytelsesanalyseverktøy.
  • RabbitMQ er en åpen kildekodeprogramvare for meldingskø skrevet i Erlang.
  • CouchDB , dokumentar NoSql-database skrevet i Erlang.

Referanser

  1. https://www.erlang.org/news/152
  2. http://www.erlang.org/about.html
  3. Joe Armstrong, Bjarne Däcker, Thomas Lindgren, Håkan Millroth. "Open-source Erlang - White Paper" . Arkivert fra originalen 25. oktober 2011 . Hentet 31. juli 2011 . 
  4. http://erlang.org/download/armstrong_thesis_2003.pdf

Eksterne lenker

Hovedprosjekt

Andre linker