Upgrade to Pro — share decks privately, control downloads, hide ads and more …

A Sneak Peek into Erlang

Enrique Fernández
January 29, 2015
77

A Sneak Peek into Erlang

15 minutes introduction to Erlang preceding a ~45 minutes programming session.

Enrique Fernández

January 29, 2015
Tweet

Transcript

  1. Erlang Solutions Ltd. © 1999-2015 Erlang Solutions Ltd. A Sneak

    Peek into Erlang Stockholm EUG, January 2015
  2. © 1999-2015 Erlang Solutions Ltd. • Enrique Fernández - Software

    Engineer - Working with Erlang since 2011 - MSc. Computer Science, URV, Spain - Research Associate, URV, Spain (~2.5 years) - Ericsson Research, Sweden (~1.5 years) - Erlang Solutions, Sweden (2+ years) • Contact: [email protected] Speaker 2
  3. © 1999-2015 Erlang Solutions Ltd. You 3 • No Erlang

    experience required • No Functional Programming experience required • Should have basic programming skills • Eager to learn some Erlang!
  4. © 1999-2015 Erlang Solutions Ltd. Objectives • Get you started

    with Erlang • Solve the first 10 exercises from “99 haskell problems” using Erlang • Have some fun 4
  5. © 1999-2015 Erlang Solutions Ltd. Hello, Erlangers! -module(hello). -export([hello_world/1]). hello_world(X)

    -> io:format(“Hello, ~s!~n”, [X]). 5 module name exported functions function definition File: src/hello.erl
  6. © 1999-2015 Erlang Solutions Ltd. The Erlang Compiler (a.k.a. erlc)

    6 erlc -o ebin src/hello.erl Erlang compiler Source file Compiler options http://www.erlang.org/doc/man/erlc.html
  7. © 1999-2015 Erlang Solutions Ltd. The Erlang Emulator (a.k.a. erl)

    7 erl -pa ebin Erlang/OTP 17 [erts-6.1] [source-d2a4c20] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false] Eshell V6.1 (abort with ^G) 1> hello:hello_world("Erlangers"). Hello, Erlangers! ok 2> Erlang emulator Emulator options http://www.erlang.org/doc/man/erl.html
  8. © 1999-2015 Erlang Solutions Ltd. Concurrent Programming (in Erlang) 8

    erl -S 1 
 Erlang/OTP 17 [erts-6.1] [source-d2a4c20] [smp:1:1] [async- threads:10] [hipe] [kernel-poll:false] Eshell V6.1 (abort with ^G) 1> Loop = fun Loop(X) -> io:format("~p Says: ~p~n", [self(), X]), Loop(X) end. #Fun<erl_eval.30.90072148> 2> [spawn(fun() -> Loop(X) end) || X <- ["A", "B", "C", "D"]]. <0.49.0> Says: "A" <0.50.0> Says: "B" <0.51.0> Says: "C" <0.52.0> Says: "D"
  9. © 1999-2015 Erlang Solutions Ltd. Concurrent Programming (in Erlang) 9

    erl -S 2 
 Erlang/OTP 17 [erts-6.1] [source-d2a4c20] [smp:2:2] [async- threads:10] [hipe] [kernel-poll:false] Eshell V6.1 (abort with ^G) 1> Loop = fun Loop(X) -> io:format("~p Says: ~p~n", [self(), X]), Loop(X) end. #Fun<erl_eval.30.90072148> 2> [spawn(fun() -> Loop(X) end) || X <- ["A", "B", "C", "D"]]. <0.49.0> Says: "A" <0.52.0> Says: "D" <0.50.0> Says: "B" <0.51.0> Says: "C"
  10. © 1999-2015 Erlang Solutions Ltd. Concurrent Programming (in Erlang) 10

    Erlang/OTP 17 [erts-6.1] [source-d2a4c20] [smp:8:8] [async- threads:10] [hipe] [kernel-poll:false] Eshell V6.1 (abort with ^G) 1> spawn(fun() -> receive {From, X} -> From ! lists:reverse(X) end end). <0.34.0> 2> pid(0,34,0) ! {self(), "Hello, Erlangers!”} {<0.32.>, "Hello, Erlangers!”} 3> flush(). Shell got "!sregnalrE ,olleH" ok
  11. © 1999-2015 Erlang Solutions Ltd. Let’s Get Started 11 git

    clone https://github.com/efcasado/EUGSTHLM-99erlproblems -b pt1 cd EUGSTHLM-99erlproblems make