Erlang (programmeringsspråk)

Erlang
programmeringsspråk
ForfatterEricsson
Opprinnelsesdato1986
Siste versjon24.1
Paradigmerfunksjonell programmering
Skrivingdynamisk
Vanlige utvidelser.erl, .hrl
Påvirket avProlog , Smalltalk
Det påvirketF # , Clojure , Rust , Scala , Opa , Reia , Elixir
Referanseimplementering
Gjennomføringtolk
OperativsystemMultiplattform
Tungeno
TillatelseEndret MPL
Nettstedwww.erlang.org/

Erlang er et programmeringsspråk som ikke er orientert mot spesifikke kontekster, men som kan jobbe med samtidig programmering ; det vil si at den kan håndtere flere prosesser som forstyrrer hverandre i utførelse og på kjøretidssystemer , dvs. uten to distinkte prosesser for kompilering og utførelse, men med en enkelt prosess med modifikasjon og kontinuerlig utførelse.

Den ble designet for å håndtere non-stop, distribuerte og stabile applikasjoner. Siden en åpen kildekode-versjon kom ut i 1998 har den blitt tatt i bruk av ulike multinasjonale selskaper som Nortel og T-Mobile .

Den "sekvensielle undergruppen av Erlang" er et funksjonelt , strengt evaluert , ikke-polymorft og dynamisk skrevet språk .

Eksempler

Koden ser slik ut:

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

Nedenfor er en implementering av ' quicksort' - algoritmen

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

Eksemplet ovenfor kaller funksjonen rekursivt til det ikke er qsort noe igjen å sortere. Uttrykket

[ X || X <- Hvile , X < Pivot ]

kan leses som en

"Sammen med alle Xsom Xer medlem av Restog Xer mindre enn Pivot",

dette ender opp som en veldig enkel måte å administrere lister på.

Siden det er mulig å evaluere et hvilket som helst boolsk uttrykk mellom to forskjellige typer, er beregningen grei, for eksempel 1 < avil den returnere true.

I alle fall er det også mulig å generalisere funksjonen sett ovenfor for å få en annen rekkefølge enn den kanoniske, den stigende rekkefølgen. Faktisk, ved å sende en sammenligningsfunksjon som et argument, kan programmereren påkalle den samme funksjonen flere ganger, men med forskjellige sorteringskriterier.

Her er et kodeeksempel der en liste over lister er sortert etter lengde:

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

Dette ville ikke vært mulig hvis språket ikke støttet funksjoner av høyere orden .

Programvare som bruker Erlang

Blant programmene som bruker Erlang finner vi:

Andre prosjekter

Eksterne lenker