Slide 1

Slide 1 text

Introduction  to  Erlang Michał  Ślaski          @michalslaski   ! ! !      AKAI  Camp  Backend,  Poznań,  28.10.2014

Slide 2

Slide 2 text

Erlang  timeline  and  my  background

Slide 3

Slide 3 text

Erlang  timeline  and  my  background Started  out  in  the  Ericsson  software  lab  1987  (!)

Slide 4

Slide 4 text

Erlang  timeline  and  my  background Started  out  in  the  Ericsson  software  lab  1987  (!) • I  was  six  years  old


Slide 5

Slide 5 text

Erlang  timeline  and  my  background Started  out  in  the  Ericsson  software  lab  1987  (!) • I  was  six  years  old
 Released  as  open  source  in  1998

Slide 6

Slide 6 text

Erlang  timeline  and  my  background Started  out  in  the  Ericsson  software  lab  1987  (!) • I  was  six  years  old
 Released  as  open  source  in  1998 • I  started  computer  science  at  AGH  2  years  later


Slide 7

Slide 7 text

Erlang  timeline  and  my  background Started  out  in  the  Ericsson  software  lab  1987  (!) • I  was  six  years  old
 Released  as  open  source  in  1998 • I  started  computer  science  at  AGH  2  years  later
 Gains  SMP  support  in  2005

Slide 8

Slide 8 text

Erlang  timeline  and  my  background Started  out  in  the  Ericsson  software  lab  1987  (!) • I  was  six  years  old
 Released  as  open  source  in  1998 • I  started  computer  science  at  AGH  2  years  later
 Gains  SMP  support  in  2005 • I  just  graduated  and  joined  Erlang  Solutions

Slide 9

Slide 9 text

Erlang  properties

Slide 10

Slide 10 text

Erlang  properties Declarative   • Functional  programming  language   • high  abstraction  level   • pattern  matching   • concise  and  readable  programs

Slide 11

Slide 11 text

Erlang  properties  -­‐  functions Modules & Functions -module(demo). -export([double/1]). % This is a comment. % Everything after '%' is ignored. double(X) -> times(X, 2). times(X, N) -> X * N.

Slide 12

Slide 12 text

Erlang  properties

Slide 13

Slide 13 text

Erlang  properties Concurrency   • light-­‐weight  processes  (actor  model)   • highly  scalable
 


Slide 14

Slide 14 text

Erlang  properties Concurrency   • light-­‐weight  processes  (actor  model)   • highly  scalable
 
 Soft  real-­‐time   • response  times  in  the  order  of  milliseconds   • per  process  garbage  collection

Slide 15

Slide 15 text

Erlang  properties  -­‐  processes

Slide 16

Slide 16 text

Erlang  properties  -­‐  processes

Slide 17

Slide 17 text

Erlang  properties  -­‐  processes Pid = spawn(M, F, A)

Slide 18

Slide 18 text

Erlang  properties  -­‐  processes Pid = spawn(M, F, A)

Slide 19

Slide 19 text

Erlang  properties  -­‐  processes Pid = spawn(M, F, A) receive! {msg, From} ->! From ! ok! end

Slide 20

Slide 20 text

Erlang  properties  -­‐  processes Pid = spawn(M, F, A) receive! {msg, From} ->! From ! ok! end Pid ! {msg, self()}

Slide 21

Slide 21 text

Erlang  properties  -­‐  processes Pid = spawn(M, F, A) receive! {msg, From} ->! From ! ok! end Pid ! {msg, self()} ok

Slide 22

Slide 22 text

Erlang  properties Robustness   • simple  and  consistent  error  recovery   • supervision  hierarchies   • program  for  the  correct  case   • let  it  crash

Slide 23

Slide 23 text

Erlang  properties  -­‐  supervision  tree

Slide 24

Slide 24 text

Erlang  properties  -­‐  supervision  tree

Slide 25

Slide 25 text

Erlang  properties  -­‐  supervision  tree

Slide 26

Slide 26 text

Erlang  properties  -­‐  supervision  tree supervisor

Slide 27

Slide 27 text

Erlang  properties  -­‐  supervision  tree supervisor worker

Slide 28

Slide 28 text

Erlang  properties  -­‐  supervision  tree supervisor worker

Slide 29

Slide 29 text

Erlang  properties  -­‐  supervision  tree supervisor worker

Slide 30

Slide 30 text

Erlang  properties  -­‐  supervision  tree supervisor worker

Slide 31

Slide 31 text

Erlang  properties Distribution   • explicit  or  transparent  distribution   • network-­‐aware  runtime  system

Slide 32

Slide 32 text

Erlang  properties  -­‐  distribution

Slide 33

Slide 33 text

Erlang  properties  -­‐  distribution cat

Slide 34

Slide 34 text

Erlang  properties  -­‐  distribution cat flea

Slide 35

Slide 35 text

Erlang  properties  -­‐  distribution cat flea nodes() = [cat@home, flea@home]

Slide 36

Slide 36 text

Erlang  properties  -­‐  distribution cat dog flea bird nodes() = [cat@home, flea@home]

Slide 37

Slide 37 text

Erlang  properties  -­‐  distribution cat dog flea bird nodes() = [cat@home, flea@home] nodes() = [dog@home, bird@home]

Slide 38

Slide 38 text

Erlang  properties  -­‐  distribution cat dog flea bird nodes() = [cat@home, flea@home] nodes() = [dog@home, bird@home]

Slide 39

Slide 39 text

Erlang  properties  -­‐  distribution cat dog flea bird nodes() = [cat@home, flea@home, dog@work, bird@work]

Slide 40

Slide 40 text

Erlang  properties

Slide 41

Slide 41 text

Erlang  properties Hot  code  loading   • easily  change  code  in  a  running  system   • enables  non-­‐stop  operation   • simplifies  testing


Slide 42

Slide 42 text

Erlang  properties Hot  code  loading   • easily  change  code  in  a  running  system   • enables  non-­‐stop  operation   • simplifies  testing
 SMP  support   • takes  advantage  of  multiple  CPU  architectures


Slide 43

Slide 43 text

Erlang  properties Hot  code  loading   • easily  change  code  in  a  running  system   • enables  non-­‐stop  operation   • simplifies  testing
 SMP  support   • takes  advantage  of  multiple  CPU  architectures
 Erlang  Shell   • access  from  remote  nodes

Slide 44

Slide 44 text

Erlang  properties

Slide 45

Slide 45 text

Erlang  properties External  interfaces   • "Ports"  to  the  outside  world
 behave  as  Erlang  processes


Slide 46

Slide 46 text

Erlang  properties External  interfaces   • "Ports"  to  the  outside  world
 behave  as  Erlang  processes
 Portability   • Erlang  runs  on  Unix,  Linux,  Mac  OS  X,  Windows   • RaspberryPi  and  Parallella  

Slide 47

Slide 47 text

Demo  time!

Slide 48

Slide 48 text

Demo  -­‐  SMP $ erl -smp disable Erlang/OTP 17 [erts-6.1] [source-d2a4c20] [async-threads:10]
 [hipe] [kernel-poll:false] ! Eshell V6.1 (abort with ^G) 
 1> F = fun(Int) -> pmap:factorial(Int) end. #Fun
 2> timer:tc(lists, map, [F,lists:seq(1, 5000)]). {12570092, [1,2,6,24,120,720,5040,40320,362880,3628800|...]} 
 3> timer:tc(pmap, pmap, [F,lists:seq(1, 5000)]). {21511918, [1,2,6,24,120,720,5040,40320,362880,3628800|...]} 
 4> element(2, v(2)) == element(2, v(3)). true

Slide 49

Slide 49 text

Demo  -­‐  SMP $ erl -smp enable Erlang/OTP 17 [erts-6.1] [source-d2a4c20] [smp:4:4]
 [async-threads:10] [hipe] [kernel-poll:false] ! Eshell V6.1 (abort with ^G) ! 1> F = fun(Int) -> pmap:factorial(Int) end. #Fun ! 2> timer:tc(lists, map, [F,lists:seq(1, 5000)]). {12535610, [1,2,6,24,120,720,5040,40320,362880,3628800|...]} ! 3> timer:tc(pmap, pmap, [F,lists:seq(1, 5000)]). {9159734, [1,2,6,24,120,720,5040,40320,362880,3628800|...]}

Slide 50

Slide 50 text

Demo  -­‐  SMP no  SMP SMP map 12.5s 12.5s parallel   map 21.5s 9.2s

Slide 51

Slide 51 text

Demo  -­‐  SMP no  SMP SMP map 12.5s 12.5s parallel   map 21.5s 9.2s

Slide 52

Slide 52 text

Demo  -­‐  SMP no  SMP SMP map 12.5s 12.5s parallel   map 21.5s 9.2s 230%

Slide 53

Slide 53 text

Open  source  projects

Slide 54

Slide 54 text

Open  source  projects • RabbitMQ  message  broker  


Slide 55

Slide 55 text

Open  source  projects • RabbitMQ  message  broker  
 • MongooseIM  XMPP  server


Slide 56

Slide 56 text

Open  source  projects • RabbitMQ  message  broker  
 • MongooseIM  XMPP  server
 • Riak  database


Slide 57

Slide 57 text

Open  source  projects • RabbitMQ  message  broker  
 • MongooseIM  XMPP  server
 • Riak  database
 • CouchDB  database

Slide 58

Slide 58 text

Erlang  community

Slide 59

Slide 59 text

Erlang  community Erlang  Central   • www.erlangcentral.org


Slide 60

Slide 60 text

Erlang  community Erlang  Central   • www.erlangcentral.org
 Erlang  Factory   • Berlin,  December  4   • San  Francisco,  March  26-­‐27


Slide 61

Slide 61 text

Erlang  community Erlang  Central   • www.erlangcentral.org
 Erlang  Factory   • Berlin,  December  4   • San  Francisco,  March  26-­‐27
 Lambda  Days   • Kraków,  February  26-­‐27

Slide 62

Slide 62 text

Questions? ! Michał  Ślaski          @michalslaski