Erlang. Programspråk 5DV086. Sebastian Backstad



Relevanta dokument
Användarhandledning Version 1.2

Introduktion till programmering. Programspråk och paradigmer

Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo

Lambdas. (och fler design patterns) Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017

Programmering B med Visual C

Introduktion till programmering och Python Grundkurs i programmering med Python

Inledning. Vad är ett datorprogram, egentligen? Olika språk. Problemlösning och algoritmer. 1DV433 Strukturerad programmering med C Mats Loock

Föreläsning 2. Operativsystem och programmering

TDIU01 - Programmering i C++, grundkurs

Programmering II (ID1019) :00-11:00

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

Objektorienterad Programmering (TDDC77)

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

Alla filer som bearbetar PHP script ska avslutas med ändelsen.php, exempelvis ska en indexsida till en hemsida heta index.php

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic

Inledande programmering med C# (1DV402) Introduktion till C#

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Introduktion till programmering D0009E. Föreläsning 1: Programmets väg

Länkning av Prolog under C

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

Prova på-laboration i PHP Johan Sjöholm johsj@ida.liu.se Institutionen för datavetenskap, Linköpings universitet

Typsystem. Typsystem... Typsystem... Typsystem... 2 *

Variabler, värden och typer

Typsystem. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 19

Grundkurs i programmering - intro

Variabler, värden och typer

Classes och Interfaces, Objects och References, Initialization

Föreläsning 1 & 2 INTRODUKTION

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

Föreläsning 3. Programmering, C och programmeringsmiljö

Snabbguide Visma Compact API Copyright Visma Spcs AB

DD1361 Programmeringsparadigm. Carina Edlund

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

LABORATIONSRAPPORT Operativsystem 1 Laboration 1, Ghost, pingpong och Windows 2003 installation

Föreläsning 5: Introduktion av pekare

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Backcode. Jonathan Crusoe TDP019 Projekt: Datorspråk Linköpings universitet

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Språket Python - Del 2 Grundkurs i programmering med Python

Felhantering TDDD78, TDDE30, 729A

Universe Engine Rapport

Programmering i C++ Kompilering från kommandoraden

Introduktion Schenker-BTL AB, Stab IT Beskrivning över informationsintegreringmed Schenker, metodbeskrivning version 1.

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design Alex Gerdes, 2016

TDP002 - Imperativ programmering

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Inledande programmering med C# (1DV402) Ditt första C#-program med Visual Studio

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn.

Dynamiskt minne. Vad är dynamiskt minne Motivering Hur gör man i C Övningar

Generell säkerhet. Loggning - Hur mycket ska man logga? Inloggningsrutinerna i Unix. Loggning fortsättning

Åtkomst och användarhandledning

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Programmeringsteknik med C och Matlab

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

PARALLELLISERING AV ALGORITMER PROCESSORER FÖR FLERKÄRNIGA

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Sockets: server. with Ada.Command_Line; use Ada.Command_Line; with Ada.Exceptions; use Ada.Exceptions; with Ada.Text_IO; use Ada.

Introduktion till integrering av Schenkers e-tjänster. Version 2.0

Programmering för språkteknologer I, VT2012. Rum

Grundläggande programmering DVG A08 & ISG A04. Allmän information. Å vem är jag då. Karlstads Universitet, Johan Öfverberg 1

Föreläsning 5-6 Innehåll

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata.

Objektorienterad Programmering (TDDC77)

Syfte : Lära sig objektorienterad programmering Syfte : Lära sig programmering i ett OO-språk vilket?

TDP013 Node.js, JSCoverage, Mocha. Marcus Bendtsen Institutionen för Datavetenskap

Programmering av NXT Lego- robot Labbrapport för programmering av en Lego- robot

Vad är molnet? Vad är NAV i molnet? Vem passar NAV i molnet för? Fördelar med NAV i molnet Kom igång snabbt...

Innehålls förteckning

Imperativ programmering. Föreläsning 4

Omgivningar. Omgivningar är viktiga eftersom de avgör vilka namn som är synliga och därmed dessas innebörd och de värden som är förknippade med dem.

Design av interaktiv multimedia. Läs i förväg om det som övningarna kommer att beröra. Träna hemma både före och efter övningarna.

Kort om World Wide Web (webben)

TUTORIAL: SAMLING & KONSOLL

Talsystem Teori. Vad är talsystem? Av Johan Johansson

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten Programmering: att instruera en maskin att utföra en uppgift, kräver olika språk:

F5: Högnivåprogrammering

Utvecklingen av ett tidregistrerings- och faktureringssystem

F5: Högnivåprogrammering

Imperativ programmering

Föreläsning 3.1: Datastrukturer, en översikt

Föreläsning 3. Programmering, C och programmeringsmiljö

OOP Objekt-orienterad programmering

Simon Boström Introduktionskurs i Datateknik

MATLAB. Python. Det finns flera andra program som liknar MATLAB. Sage, Octave, Maple och...

Föreläsning 2 sept 05 (Onsdag v 36). DD Chapter 2.

Tillämpad Programmering (ID1218) :00-13:00

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

DAT043 - föreläsning 8

TDDC77 Objektorienterad Programmering

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

Transkript:

Erlang Programspråk 5DV086 Sebastian Backstad Love Engman Joel Viklund Christer Jakobsson Petter Johansson c11sbd c11len c11jvd dv12cjn oi12pjn \_(ツ)_/ 1

Innehållsförteckning Inledning 3 Om Erlang 4 Syntax 5 Features 8 Trådar.................................................... 8.. Hot swap.................................................. 8.. Länkade processer 9 Erlang och Haskell 10 För och nackdelar 10 Fördelar................................................... 10.. Nackdelar................................................. 11.. Erlang idag 11 Erlang imorgon 12 2

Inledning Programspråket Erlang skapades av Joe Armstrong på Ericssons forskningsavdelning 1986. Det skapades med ändamålet att tillhandahålla ett bättre sätt a programmera styrsystemen till telefonväxlar. Namnet Erlang sägs vara en referens till den danska matematikern Agner Krarup Erlang eller en förkortning av Ericsson Language. Erlang implementerades först i Prolog och var influerat av programspråket PLEX som användes i tidiga Ericsson telefonväxlar. Från början var det designat som ett praktiskt verktyg för att få jobbet gjort, nämligen att programmera applikationer till telefonväxlar i laborations miljö. Nya verktyg lades successivt till för att lösa ett specifikt problem dom hade när dom programmerade. När de märkte att de aldrig använde en funktion så togs den bort, detta skedde i en så snabb process att det knappt finns någon dokumentation av vad som ändrades i språket under denna tid. Enligt Joe Armstrong var språket ett rent forskningsprojekt från 1986 till 1997 då det på grund av att ett topphemligt projekt att utveckla andra generationens telefonväxel vid namn AXE N avbröts. Då valdes Erlang som bas för en ny ATM växel med namnet AXD301 vars programsystem var helt baserat på Erlang och sades ha en pålitlighet av nine 9 s. Vilket innebör en drifttid på minst 99.9 999 999% av ett år, seven nines innebär en nertid på max 3,15 sekunder per år. 1998 så bannade Ericsson användandet av Erlang vid utveckling av ny programvara, detta gjorde att Joe Armstrong och många andra lämnade företaget och Erlang blev open source vid slutet av året och används nu av flera internationella företag. Joe Armstrong blev återanställd på Ericsson 2004. Erlang är ett funktionellt programspråk utan typdeklarationer och med dynamisk typing med en garbage collector, det är designat för parallellt arbete på flera sammankopplade system genom att ha inbyggt stöd för detta i jämförelse med många språk som har stöd för trådar via externa bibliotek, Erlangs trådar har inte delade variabler utan samarbetar med varandra genom att skicka meddelanden mellan varandra. Detta gör det väl lämpat för användning på moderna maskiner med flera kärnor. Uppdateringar till styrsystemen måste kunna appliceras utan att systemet stängs ner för att maximera upptiden på telenätet vilket är väldigt kritiskt för samhället att det fungerar. detta åstadkoms med hjälp av något som kallas Hot Swap. Erlang används idag för att bygga skalbara soft real time system med höga krav på drifttid. Det används tex av Facebook för dess chat tjänst som hanterar mer än 100 miljoner aktiva användare, WhatsApp använder även Erlang för dess meddelande tjänster som kan ha 2 miljoner anslutna användare per server. 3

Om Erlang Erlang är ett funktionellt programspråk med så kallad immutable data vilket innebär att data ej går att ändra på. Erlang har vad som kallas för ivrig evaluering vilket är motsatsen till lat evaluering som används i bland annat programspråket Haskell. Ivrig evaluering innebär att ett uttryck evalueras direkt då det binds till en variabel. Erlang har även mönstermatchning. 1 Erlang har dynamisk typning, det betyder att variabler som deklareras kan vara av vilken typ som helst. Man behöver inte ange specifikt att en variabel ska vara till exempel ett heltal. Kontroll av typer (t.ex. vid mönstermatchning) sker under körning och inte under kompilering. 2 Koden som skrivs i Erlang kompileras till bytecode och körs på en virtuell maskin. Den virtuella maskin som vanligen används är BEAM. BEAM är en register baserad virtuell maskin som körs i endast en process på operativsystemet. Processer i Erlang implementeras helt av den virtuella maskinen och har ingen koppling till operativsystemet. BEAM kör vanligtvis en tråd per kärna. Om man har ett Erlangsystem med 1000 processer så är det fortfarande endast en process på operativsystemet. 3 Erlang använder sig av en Garbage Collector (GC). Med det menas att minne allokeras och frigörs automatiskt när det inte längre används. I Erlang jobbar GC på varje process för sig. En process i Erlang har sin egen heap, GC frigör minne på varje heap oberoende av andra processer. När garbage collection utförs på en process stannar processen under tiden detta utförs. GCn har också i uppgift att utöka storleken på en heap då detta behövs. 4 1 http://www.erlang.org/faq/ 2014 03 03 2 http://learnyousomeerlang.com/types or lack thereof 2014 03 03 3 http://www.erlang factory.com/upload/presentations/708/hitchhikerstourofthebeam.pdf 2014 03 03 4 http://www.erlang.org/faq/academic.html 2014 03 03 4

Syntax Eftersom Erlang är ett funktionellt språk och ganska likt Haskell så är även syntaxet likt Haskell. En viktig del i Erlangs syntax är att alltid avsluta uttryck med punkt. Se figur 1 för ett exempel på ett uttryck som avslutas med punkt. Figur 1. Addition utförd direkt i Erlang shell. Man behöver inte skriva ett uttryck på en rad. Erlang tolkar ett uttryck fram till nästa punkt. Det går till exempel bra att göra som i figur 2 där uttrycket är uppdelat på flera rader och sedan avslutat med punkt. Figur 2. Addition och subtraktion utförd i Erlang shell. Det är enkelt att deklarera en variabel i Erlang men vissa krav måste uppfyllas. Namnet på variabeln måste börja med stor bokstav. Variabler i Erlang går inte att ändra på, när ett värde är satt på en variabel kommer den ha det värdet konstant. Som vi kan se i figur 3 så går det bra att deklarera variabler som heltal och strängar så länge dom börjar med stor bokstav. När vi försöker skapa en variabel som börjar med liten bokstav så får vi ett felmeddelande. Figur 3. Olika variabler skapas i Erlang Shell, fel när variabel börjar med liten bokstav. 5

Varför kan man inte en variabel börja med en liten bokstav? Jo för att då deklarerar man en atom. En atom i Erlang kan ses som en konstant som har sitt eget namn som värde. Skriver man katt i Erlang har man deklarerat en atom som heter katt och har värdet katt. Atomer används oftast ihop med annan data för att beskriva datan. Till exempel i figur 4 har vi gjort en tupel med en atom och ett heltal. Figur 4. En tupel med en atom och ett heltal. Syntax för jämförelser är ganska speciellt i Erlang. Vid lika med jämförelse används == och vid inte lika med används /=, dessutom finns det exakt lika med som skrivs =:= och exakt inte lika med som skrivs =/=. Den vanliga notationen == kan användas när man till exempel jämför en integer och en double. Se Figur 5 för ett exempel där vi jämför en double och en integer med atomen false (som är reserverad i Erlang). Figur 5. Jämförelseoperatorer i Erlang. Att göra en modul med ett antal funktioner i Erlang är enkelt. Man skriver module(namn) högst upp i filen och därefter väljer man vilka funktioner som ska exporteras genom att skriva export([funktionsnamn1/x, funktionsnamn2/y]). där det inom hakparenteserna är en lista. Snedsträck följt av x och y betyder att funktionen tar x eller y antal parametrar. Skulle man till exempel exportera en funktion som heter test som tar två parametrar skulle man skriva export([test/2]).. Detta innebär att man kan ha funktioner med samma namn som tar olika många parametrar och exportera dom. Se figur 6 för ett exempel på detta. Figur 6. En modul som exporterar två funktioner med samma namn men olika antal parametrar. Från figur 6 ser vi hur man definierar funktioner i Erlang. Man skriver funktionsnamnet följt av parenteser och eventuella parametrar därefter gör man en pil och skriver vad funktionen ska 6

göra. Man kan skriva flera uttryck efter varandra i en funktion, utan att använda punkt. För att göra detta skiljer man varje uttryck med ett komma. Efter det sista uttrycket skriver man punkt som vanligt. Endast det sista uttrycket blir det som returneras från funktionsanropet. Se figur 7 för ett exempel där vi skapar en modul med en funktion och sedan laddar vi modulen och anropar funktionen ifrån Erlang shell. Figur 7. En modul med en funktion som sedan laddas in i Erlang Shell och anropas. 7

Features Erlang är byggt med ett specifikt syfte i åtanke; att vara det bästa programspråket på att hantera 5 stora system som både har många anslutna användare och måste ha hög tillgänglighet. Istället för att skapa ett språk som skall lösa alla världens problem så skapades ett språk som skall lösa ett specifikt problem väldigt bra. För att göra detta krävs en del unika funktioner. Trådar 6 Trådar i Erlang kallas processer eftersom de inte delar något data. I denna rapport kallas de trådar eftersom de, för det mesta, liknar trådar. Erlang implementerar trådar på ett lite annat sätt än det traditionella C sättet. Erlangs Virtual machine tar hand om skapande och context switching av Erlangs trådar. Detta gör att den inte behöver använda operativsystemets inbyggda trådar och processer vilka är mycket långsammare än Erlangs. En av de bra egenskaperna hos Erlangs trådar är att de har ett väldigt litet overhead, ca. 300 ord, så att skapa (spawn) en tråd går väldigt fort. Att skapa en ny tråd i Erlang tar bara ett par µs och är oberoende av antalet redan körande trådar, Java kan ta många gånger så lång tid och är beroende på hur många trådar som är i gång. 7 Ett test som utfördes 2005 av Ericsson visade att man på en vanlig dator (1.5 GHz, 16 GB RAM) kan ha över 20 miljoner trådar igång samtidigt. Tiden det tog att starta en ny tråd var ca. 6.3 µs och att skicka eller ta emot meddelanden tog ca. 5.3 µs. Dessa siffror är säkert lägre idag, 9 år senare. Som tidigare nämnts tar det ganska lång tid att skicka meddelanden mellan trådar i Erlang. Nästan lika lång tid som att starta en ny tråd. Detta är på grund av att trådar i Erlang inte har något delat minne, vilket betyder att trådarna måste skicka och ta emot meddelanden för att kommunicera. Hot swap Erlang är skapat och optimerat för att användas i stora system med många användare anslutna hela tiden. Detta gör att man inte gärna startar om hela systemet så fort man vill uppdatera mjukvaran då detta skulle neka många användare tjänsten under tiden systemet uppdateras. Av denna anledning har Erlang en funktion som kallas hot swap där man kan ladda in en ny version av programmet samtidigt som det körs. Detta görs genom att systemet kan ha flera versioner av samma program laddade (i minnet). När ett program har flera versioner så kör alla nya anslutningar (trådar) med den nya versionen medans de gamla (vars sessioner startade innan uppdateringen aktiverades) fortsätter köra med det gamla programmet tills deras session (tråd) avslutas. 5 http://en.wikipedia.org/wiki/high_availability 6 http://www.erlang.org/doc/getting_started/conc_prog.html 7 https://groups.google.com/forum/#!original/comp.lang.functional/5kldn1qj73c/t3py yqmtzmj 8

Länkade processer I Erlang kan man skapa länkar mellan processer genom att kalla på link(other_pid). I detta fall skapas en länk mellan processen som gjorde anropet och processen med namnet Other_Pid. När en process avslutas så skickas en signal till alla processer som den var länkad till. Signalen innehåller information om den process som har skickat signalen och anledningen till att processen avslutades. Om en process avslutas normalt så ignorerar andra processer signalen som skickats ut. Om en process har avslutats på ett onormalt sätt och skickat ut en felsignal så termineras de länkade processerna och felsignalen vidarebefordras till deras länkar. Detta byter att man kan länka ihop alla processer så att om en avslutas på ett onormalt sätt så avslutas alla processer 8 Det är även möjligt att fånga signaler i en process så att de inte skickas vidare till nästa länk. Detta uppnås genom att man låter processen tro att signalen är ett vanligt meddelande. Man kan då försöka att hantera problemet istället för att avsluta ytterligare processer. 9 P2 fångar exit signalen från P1, signalen skickas inte vidare till P3 8 http://www.erlang.org/doc/getting_started/robustness.html 9 http://www.erlang.org/course/error_handling.html 9

Erlang och Haskell Vad som skiljer Erlang från exempelvis Java går knappt att svara på. Listan blir (nästan) längre än koden för en quick sort i C ;) Desto meningsfullare blir det att jämföra Erlang med ett annat funktionellt programspråk. En utmärkt kandidat för denna jämförelse är programspråket Haskell. Som nämndes tidigare har Haskell en lat evaluering, till skillnad från Erlangs ivriga motsvarighet. Den allmänna uppfattningen verkar vara att den lata evalueringen är att föredra, men att det går att simulera lat evaluering i Erlang med hjälp av macros. 10 En annan skillnad är att Haskell har statisk typkontroll medan Erlang använder dynamiska typer. En fördel med statisk typkontroll är att fel i koden upptäcks snabbare. Däremot går det lättare att skriva generell kod i programspråk med dynamisk typning. (I Erlang kan man till och med göra evaluera uttrycket asdasd > true!). Haskell är dessutom helt utan sidoeffekter medan Erlang inte är det. I Erlang skickar processer meddelanden till varandra vilket resulterar i sidoeffekter. Andra exempel på sidoeffekter är interaktionen med filer, sockets och databaser. Sidoeffekterna i Erlang öppnar alltså upp en del möjligheter, men ställer samtidigt högre krav på programmeraren. För- och nackdelar Fördelar Erlang utvecklades för att bygga massiva skalbara realtidssystem med höga krav på tillgänglighet. Och det är just inom detta område som språket har sina styrkor. Som tidigare nämnt designades språket med parallitet och trådhantering. Det faktum att trådar inte delar minnesutrymmen (och försiktighet med sido effekter) löser en rad olika trådsäkerhetsproblem. Erlang programmeraren slipper tjafsa med lås hit och synkronisering dit. Något man inte kan säga om programmering i Java och C. "How can you program like that? It's impossible to program!" undrade Joe Armstrong, en av skaparna av Erlang, efter att testat Javas icke trådsäkra Swing bibliotek. 11 Processerna som skapas kräver dessutom inte så mycket minne. Detta innebär att väldigt många processer kan skapas utan att sega ner datorn, något som lämpar sig väl i 10 http://www.infoq.com/interviews/erlang Haskell John Hughes (2014 03 04) 11 http://www.infoq.com/interviews/armstrong peyton jones erlang haskell (2014 03 04) 10

server mjukvara. Servrar som man vill ha körandes utan avbrott kan dessutom vid uppdatering dra nytta av det i Erlang integrerade hot swapping. En egenskap som inte stöds av så många andra programspråk. 12 En annan fördel med Erlang är att det är ett väl beprövat språk ute i industrin. Erlang har använts i skarpt läge i många år vilket innebär att språket har kunnat finslipas en hel del. 13 Ur detta har OTP (the Open Telecom Platform) fötts. OPT är en samling av beprövade bibliotek, redo att användas av just dig. Att språket är designat av industrin, för industrin, märks även på att det ska gå snabbt att lära sig språket och kunna börja skriva nyttiga applikationer. Industrin har mer nytta av du kan skriva programvaran för en distribuerad server än ett Hello, World i terminalrutan. Ett avsnitt om Erlangs fördelar vore inte komplett utan att nämna felhanteringen. Erlang är designat för att hantera fel såväl i mjukvara och hårdvara. Ett fel ska aldrig kunna resultera i att hela systemet brakar ihop. Språket har många verktyg för att hantera fel, både inbyggt i själva språket, samt som extra tillägg i OTP. Nackdelar Det är viktigt att komma ihåg att Erlang är designat för att lösa en viss sorts av problem. Det finns andra områden där programspråket inte är lika kraftfullt. Exempelvis är Erlang inte lämpat för heavy number crunching, dvs. bearbeta en massa data. Där är imperativa programspråk såsom C och C++ snabbare. En annan nackdel med Erlang är att den inte har något naturligt stöd för strängar. Bearbetning och manipulation av strängar gör sig lämpligare i andra programspråk. 14 Ytterligare en nackdel är att Erlangs virtuella maskin är något långsammare än JVM. Och det faktum att processerna inte delar minnesutrymme innebär också en något långsammare exekvering. Erlang idag Erlang är numera släppt som öppen källkod. Ett tag var programspråket bannlyst från Ericsson men har sedan 2004 börjat användas igen. Av Ericsson används språket bland annat inom 3G teknologin. Även andra stora telekombolag, som till exempel Motorola och T Mobile, använder Erlang i sina projekt. Språket har även fått genomslag inom andra 12 http://en.wikipedia.org/wiki/hot_swapping (2014 03 04) 13 http://veldstra.org/whyerlang/ (2014 03 04) 14 http://learnyousomeerlang.com/starting out for real (2014 03 04) 11

användningsområden. Ett exempel är appen WhatsApp där Erlang möjliggör att en chatt server kan hantera två miljoner klienter samtidigt. Ytterligare exempel på projekt där Erlang används är: 15 SimpleDB en distribuerad databas skapad av Amazon.com GitHub webbhotell för projekt som använder Git Call of Duty första persons skjutare för dagisbarn Smarkets betting sajt för sport En gemensam faktor för ovan nämnda projekt är krav på skalbarhet, feltolerans och höga drifttider de tre grundpelarna som utgör programspråket Erlang Erlang imorgon Vi tror att Erlang kommer fortsätta att vara populärt. Språket har visat sig vara konkurrenskraftigt inom sitt område. Smidiga sätt att implementera parallella system kommer säkert bli viktigare allt eftersom kärnorna i datormaskinerna ökar. Författarna bakom språket har även förhoppningar om att språket ska inspirera och influera andra språk. Till exempel att den kraftfulla felhanteringen sprider sig till andra språk. 15 http://en.wikipedia.org/wiki/erlang_%28programming_language (2014 03 04) 12