Upload
sinarshebl
View
3.837
Download
8
Embed Size (px)
DESCRIPTION
Citation preview
Introduc)on to Erlang Abd El‐Fa3ah Hussein Mahran
Agenda
History of Erlang Erlang Features Erlang/OTP and design patterns Tools applications Applications written in Erlang Erlang IDEs Erlang syntax How to get Erlang Demo Conclusion Q&A
History of Erlang
Erlang is a programming language
Ericsson wanted programming language for developing telecommunication switching systems.
The language must be a very high level symbolic language in order to achieve productivity gains
The language must contain primitives for concurrency and error recovery
1984: Ericsson Computer Science Lab formed
1984-86: Experiments programming POTS with several languages
1998: Open Source Erlang
1987: Early Erlang Prototype projects
1991: First fast implementation
1993: Distributed Erlang
1995: Several new projects
1996: Open Telecom Platform (research on verification...)
No language well suited for telecom systems
development
History of Erlang
Erlang is Concurrent functional programming language
It was designed by Ericsson to support distributed, fault-tolerant, soft-real-time, and non-stop applications
Erlang Features
Concurrency Fault tolerance Soft Real-Time Distribution Hot Code Loading External Interfaces Platform Independent
Erlang/OTP and design patterns
Gen_Server Behaviour Gen_Fsm Behaviour Gen_Event Behaviour Supervisor Behaviour Releases Target systems
Tools applications Dialyzer Eunit Edoc Common_test Test_server Jinterface Erl_interface wx Ssh Ssl xmerl
Depending on C++ WXwidgets
Applications written in Erlang
Applications written in Erlang Ericsson Company
Bluetail/Alteon/Nortel (distributed, fault tolerant email system, SSL accelerator)
Cellpoint (Location-based Mobile Services)
Corelatus (SS7 monitoring).
dqdp.net (in Latvian) (Web Services).
Facebook (Facebook chat backend)
Finnish Meteorological Institute (Data acquisition and real-time monitoring)
IDT corp. (Real-time least-cost routing expert systems)
Kreditor (Electronic payment systems)
Mobilearts (GSM and UMTS services)
Netkit Solutions (Network Equipment Monitoring and Operations Support Systems)
Process-one (Jabber Messaging)
Schlund + Partner (Messaging and Interactive Voice Response services)
Quviq (Software Test Tool)
RabbitMQ (AMQP Enterprise Messaging)
T-Mobile (previously one2one) (advanced call control services)
Telia (a telecomms operator)
Vail Systems (Interactive Voice Response systems)
Wavenet (SS7 and IVR applications)
Erlang IDEs
Eclipse (ErlIDE plugin) NetBeans (ErlyBird) Emacs VIM Any other editor (Gedit, Notepad++)
Erlang syntax
Data types If statement Case statement Functions Modules Hello World program How Erlang works
Data types Number
Integer 12, 43 Float 34.3
Atoms create, remove Binaries <<“hello”>> Reference Fun Port Identifier Pid <0,36,0> Tuple {1, 2, 3} List [1, 2, 3, 4] String “hello” Record -record(person, {name, age, phone}).
Erlang don’t have boolean as data
type, instead Erlang has true and false
If statement
if GuardSeq1 -> Body1; ...; GuardSeqN -> BodyN end.
Case Statement
case Expr of Pattern1 [when GuardSeq1]-> Body1; ...; PatternN [when GuardSeqN] -> BodyN end.
Functions
Name(Pattern11,...,Pattern1N) [when GuardSeq1] -> Body1;
...; Name(PatternK1,...,PatternKN) [when GuardSeqK] -> ….., BodyK.
Function name Parameters
Body
Conditions
Clause 1
Clause 2
Modules -module(moduleName).
-export([func/0, func/1]).
func() -> foo(5), … .
func(A) -> foo(A), … .
foo(N) -> …, …, ...
Hello world Program
-module(hello_world).
-export([print/0]).
print() -> io:format(“Hello World…!~n”).
$ erl Eshell V 5.7.1 (abort with ^G) 1> c(hello_world). {ok, hello_world} 2> hello_world:print(). Hello World…! 3>
Save the file as “hello_world.erl”, After compilation output will be “hello_world.beam”
How Erlang works Pattern matching technique
Var = 3. [Var1, Var2] = [3, 4]. {Var3, _Var4, Var5} = {4, 5, a}. [H | T] = [iti, erlang, course, book].
1 = 1. {ok, Var} = {ok, “Connected to DB”}.
1 = 2. {ok, var} = {ok, “Connected to DB”}.
√
X
Recursion and Tail Recursion
fact(0) -> 1; fact(N) when N>0 -> N * fact(N -1).
fact(N) -> fact_help(N, 1).
fact_help(0, Acc) -> Acc; fact_help(N, Acc) when N>0 -> NewAcc = N * Acc, fact_help(N-1, NewAcc).
Quick Sort
quicksort([]) -> % If the list [] is empty, return an empty list (nothing to sort)
[]; quicksort([Pivot|Rest]) -> quicksort([Front || Front <- Rest, Front < Pivot]) ++ [Pivot] ++ quicksort([Back || Back <- Rest, Back >= Pivot]).
How to get Erlang
Erlang.org Download Documentation Trapexit.org Erlang Factory Erlang-Consulting
Demo
Hot Code swapping Concurrency Fault tolerance Distributed application
Hot Code swapping
-module(changing_code).
-export([start/0, loop/0]).
start() -> spawn(changing_code, loop, []).
loop() -> receive switch ->
changing_code:loop(); hello ->
io:format(“CAT Hackers ----1~n”), loop();
Msg -> io:format(“~p~n”, [Msg]), loop(),
end.
% Forces the use of loop/0 from
the latest version of changing_code
Concurrency
portscan(Ip, From, To) when From < To -> io:format("Ports open for: ~p:~n", [Ip]), pforeach(fun(Port) -> scan(Ip,Port) end,lists:seq(From, To)).
scan(Ip, Port) -> case gen_tcp:connect(Ip,Port,[{active, false}, binary]) of {ok,P} ->
gen_tcp:close(P), io:format("~p is open~n", [Port]); _ -> ok
end.
pforeach(F, [H|T]) -> spawn(fun() -> F(H) end), pforeach(F, T);
pforeach(_ , []) -> ok.
Fault tolerance
init([]) -> AChild= {main_module,{main_module, start_link, []}, permanent,
2000, worker, [main_module]}, {ok,{{one_for_one, 1, 60}, [AChild]}}.
Distributed application
[{kernel, [{distributed, [{dist_app, 5000, [‘[email protected]’, {‘[email protected]’, ‘[email protected]’}]}]}, {sync_nodes_mandatory, [‘[email protected]’, ‘[email protected]’]}, {sync_nodes_timeout, 5000} ] } ].
Timeout to wait until restart application on
other node
Nodes
Specifies how many milliseconds to wait for
the other nodes to start
Conclusion Erlang is concurrent functional programming
language. Its main goal is error recovery, fault tolerant,
distributed applications, and non-stop applications. It released to Open source since 1998. Companies that are using Erlang. How Erlang works. How to get and use Erlang.
References
Erlang.org Trapexit.org Programming Erlang, Joe Armstong Wikipedia.com
Q&A
Thanks