Change-Id: I72b25680e7167c3a55477111c28b1d4936c60e2c Reviewed-on: https://cl.tvl.fyi/c/depot/+/606 Reviewed-by: tazjin <mail@tazj.in>
3.5 KiB
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
hello_joe.
Hello Joe
-module(hello1).
-export([hello_joe/0]).
hello_joe() ->
hello_joe.
Hello Joe
-module(hello1).
-export([hello_joe/0]).
hello_joe() ->
hello_joe.
% 1> c(hello1).
% {ok,hello1}
% 2> hello1:hello_joe().
% hello_joe
Hello Joe
-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
-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