222 lines
		
	
	
	
		
			3.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			222 lines
		
	
	
	
		
			3.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| slidenumbers: true
 | |
| Erlang.
 | |
| ======
 | |
| 
 | |
| ### Fault-tolerant, concurrent programming.
 | |
| 
 | |
| ---
 | |
| 
 | |
| ## A brief history of Erlang
 | |
| 
 | |
| ---
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| ^ Telefontornet in Stockholm, around 1890. Used until 1913. 
 | |
| 
 | |
| ---
 | |
| 
 | |
| 
 | |
| 
 | |
| ^ Telephones were operated manually at Switchboards. Anyone old enough to remember? I'm certainly not. 
 | |
| 
 | |
| ---
 | |
| 
 | |
| 
 | |
| 
 | |
| ^ Eventually we did that in software, and we got better at it over time. Ericsson AXD 301, first commercial Erlang switch. But lets take a step back.
 | |
| 
 | |
| ---
 | |
| 
 | |
| ## Phone switches must be ...
 | |
| 
 | |
| Highly concurrent
 | |
| 
 | |
| Fault-tolerant
 | |
| 
 | |
| Distributed
 | |
| 
 | |
| (Fast!)
 | |
| 
 | |
| 
 | |
| 
 | |
| ---
 | |
| 
 | |
| ## ... and so is Erlang!
 | |
| 
 | |
| ---
 | |
| 
 | |
| ## Erlang as a whole:
 | |
| 
 | |
| - Unique process model (actors!)
 | |
| - Built-in fault-tolerance & error handling
 | |
| - Distributed processes
 | |
| - Three parts!
 | |
| 
 | |
| ---
 | |
| 
 | |
| ## Part 1: Erlang, the language
 | |
| 
 | |
| - Functional
 | |
| - Prolog-inspired syntax
 | |
| - Everything is immutable
 | |
| - *Extreme* pattern-matching
 | |
| 
 | |
| ---
 | |
| ### Hello Joe
 | |
| 
 | |
| ```erlang
 | |
| hello_joe.
 | |
| ```
 | |
| 
 | |
| ---
 | |
| ### Hello Joe
 | |
| 
 | |
| ```erlang
 | |
| -module(hello1).
 | |
| -export([hello_joe/0]).
 | |
| 
 | |
| hello_joe() ->
 | |
|     hello_joe.
 | |
| ```
 | |
| 
 | |
| ---
 | |
| ### Hello Joe
 | |
| 
 | |
| ```erlang
 | |
| -module(hello1).
 | |
| -export([hello_joe/0]).
 | |
| 
 | |
| hello_joe() ->
 | |
|     hello_joe.
 | |
|     
 | |
| % 1> c(hello1).
 | |
| % {ok,hello1}
 | |
| % 2> hello1:hello_joe().
 | |
| % hello_joe
 | |
| ```
 | |
| 
 | |
| ---
 | |
| ### Hello Joe
 | |
| 
 | |
| ```erlang
 | |
| -module(hello2).
 | |
| -export([hello/1]).
 | |
| 
 | |
| hello(Name) ->
 | |
|     io:format("Hello ~s!~n", [Name]).
 | |
| 
 | |
| % 3> c(hello2).
 | |
| % {ok,hello2}
 | |
| % 4> hello2:hello("Joe").
 | |
| % Hello Joe!
 | |
| % ok
 | |
| ```
 | |
| 
 | |
| ---
 | |
| 
 | |
| ## [fit] Hello ~~world~~ Joe is boring!
 | |
| ## [fit] Lets do it with processes.
 | |
| 
 | |
| ---
 | |
| ### Hello Server
 | |
| 
 | |
| ```erlang
 | |
| -module(hello_server).
 | |
| -export([start_server/0]).
 | |
| 
 | |
| start_server() ->
 | |
|     spawn(fun() -> server() end).
 | |
| 
 | |
| server() ->
 | |
|     receive
 | |
|         {greet, Name} ->
 | |
|             io:format("Hello ~s!~n", [Name]),
 | |
|             server()
 | |
|     end.
 | |
| ```
 | |
| 
 | |
| ---
 | |
| 
 | |
| ## [fit] Some issues with that ...
 | |
| 
 | |
| - What about unused messages?
 | |
| - What if the server crashes?
 | |
| 
 | |
| ---
 | |
| 
 | |
| ## [fit] Part 2: Open Telecom Platform
 | |
| 
 | |
| ### **It's called Erlang/OTP for a reason.**
 | |
| 
 | |
| ---
 | |
| 
 | |
| # OTP: An Application Framework
 | |
| 
 | |
| - Supervision - keep processes alive!
 | |
| 
 | |
| - OTP Behaviours - common process patterns
 | |
| 
 | |
| - Extensive standard library
 | |
| 
 | |
| - Error handling, debuggers, testing, ...
 | |
| 
 | |
| - Lots more!
 | |
| 
 | |
| ^ Standard library includes lots of things from simple network libraries over testing frameworks to cryptography, complete LDAP clients etc.
 | |
| 
 | |
| ---
 | |
| 
 | |
| # Supervision
 | |
| 
 | |
| 
 | |
| 
 | |
| ^ Supervision keeps processes alive, different restart behaviours, everything should be supervised to avoid "process" (and therefore memory) leaks
 | |
| 
 | |
| ---
 | |
| 
 | |
| # OTP Behaviours
 | |
| 
 | |
| * `gen_server`
 | |
| * `gen_statem` 
 | |
| * `gen_event`
 | |
| * `supervisor`
 | |
| 
 | |
| ^ gen = generic. explain server, explain statem, event = event handling with registered handlers, supervisor ...
 | |
| 
 | |
| ---
 | |
| 
 | |
| `gen_server`
 | |
| 
 | |
| ---
 | |
| 
 | |
| ## [fit] Part 3: BEAM
 | |
| 
 | |
| ### Bogdan/Bjørn Erlang Abstract machine
 | |
| 
 | |
| ---
 | |
| 
 | |
| ## A VM for Erlang
 | |
| 
 | |
| * Many were written, BEAM survived
 | |
| * Concurrent garbage-collection
 | |
| * Lower-level bytecode than JVM
 | |
| * Very open to new languages
 | |
|   (Elixir, LFE, Joxa, ...)
 | |
| 
 | |
| ---
 | |
| 
 | |
| ## What next?
 | |
| 
 | |
| * Ole's talk, obviously!
 | |
| * Learn You Some Erlang!
 | |
|   www.learnyousomeerlang.com
 | |
| * Watch *Erlang the Movie*
 | |
| * (soon!) Join the Oslo BEAM meetup group
 | |
| 
 | |
| ---
 | |
| 
 | |
| # [fit] Questions?
 | |
| 
 | |
| `@tazjin`
 |