Erlang - Concurrent Language for Concurrent World
Upcoming SlideShare
Loading in...5
×
 

Erlang - Concurrent Language for Concurrent World

on

  • 1,751 views

Intro to Erlang talk from Erlang Factory Lite Tel-Aviv, October 23 2013

Intro to Erlang talk from Erlang Factory Lite Tel-Aviv, October 23 2013

Statistics

Views

Total Views
1,751
Views on SlideShare
1,712
Embed Views
39

Actions

Likes
1
Downloads
32
Comments
0

3 Embeds 39

http://www.linkedin.com 18
https://twitter.com 17
https://www.linkedin.com 4

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Erlang - Concurrent Language for Concurrent World Erlang - Concurrent Language for Concurrent World Presentation Transcript

    • $ whoami Name: Title: Company: E-mail: Zvi Avraham Founder & CEO ZADATA Ltd zvi@zadata.com
    • Concurrent Language for Concurrent World
    • The world is concurrent… I could not drive the car, if I did not understood concurrency … -- Joe Armstrong, father of Erlang
    • Object-oriented Programming
    • object object object object object object object object Object-oriented Programming object object object object object object object object object object
    • Concurrency-oriented Programming
    • process process process process process process process process Concurrency-oriented Programming process process process process process process process process process process
    • Imagine a programming language which allows only 1000 objects -- Joe Armstrong, father of Erlang
    • COP vs OOP Concurrency-oriented vs Object-oriented • 15 years ago OOP became mainstream • COP became popular only recently • Process is active object – i.e. object with it’s own process of control – Objects in OOP are “passive objects” • Processes as cheap as hashtables: – ~ 300 words (1.2KB) per process by default – max 134M processes per VM (limited by RAM)
    • Concurrency-oriented Programming • • • • Large number of processes (up to millions) Complete isolation of processes No shared memory Copy message data between processes – instead of just passing pointer to message • Avoid sequential bottlenecks • Location transparency
    • Share Nothing! No mutable State!
    • Software Isolation
    • But, it will not help if the whole VM crashes
    • One Process per Parallel Activity • try to do only one thing per process • If you need to do something – just spawn a new process • no thread pools!
    • Let it crash! • all sequential languages get error handling wrong! • No defensive programming! • If you don’t know how to recover from the error – let it crash!
    • Lenin – Lived Lenin – is Alive Lenin – will Live!
    • Errors – Existed Errors – Exist Errors – will Exist!
    • Lenin, read my dissertation: “Making reliable distributed systems in the presence of software errors”
    • http://www.erlang.org/download/armstrong_thesis_2003.pdf
    • Erlang Timeline CS Lab Experiments 1984 1986 AXD301 switch First fast implementation OTP 1991 1987 Early Erlang Prototypes 1996 1993 Distributed Erlang 2007 1998 Open Source
    • Erlang/OTP Stack Distributed Erlang Concurrent Erlang Functional Sequential Erlang Erlang VM – BEAM / ERTS Erlang Programming Language OTP – Open Telecom Platform
    • Functional Sequential Erlang • Data types: – Integers, floats, atoms, tuples/records, lists, binaries, funs • • • • • • single assignment pattern matching & guards closures (anonymous function data type) list comprehensions bit-syntax & binary comprehensions tail recursion & tail call optimization (TCO)
    • Single Assignment 1> X. * 2: variable 'X' is unbound 2> X = 10. 10 3> X = X + 1. ** exception error: no match of right hand side value 11 4> X = X. 10 5> X = 10. 10 6> X = 20. ** exception error: no match of right hand side value 20
    • No Loops??? • Use instead: – recursion and tail recursion – list comprehensions – binary comprehensions – Higher-order Functions (HOFs): • map/foldl/foldr/zip/filter/etc. • For example: [ io:format(“~b”,[I]) || I<-lists:seq(1,10) ].
    • Regular Recursion
    • Tail Recursion
    • zvi@host:~$ erl Erlang R16B02 … … 1> c(demo). {ok,demo} 2> demo:fact(0). 1 3> demo:fact(5). 120 4> demo:fact(-10). ** exception error: no function clause matching demo:fact(-10) (demo.erl, line 10)
    • OOP vs FP
    • Side-Effects • Erlang is not pure-functional language • “Controlled Side effects”: – – – – – – – Messages - Pid ! Msg – send message to process Pid Signals - i.e. your linked process is dead Exceptions I/O Process Dictionary - similar to TLS (thread local storage) ETS / DETS - fast in-memory / persistent lookup tables Mnesia - distributed realtime database (sort of STM)
    • Erlang Source Code Structure • OTP Release (self-contained tar.gz archive) – OTP Application (directory structure) • Module (file sources in *.erl, compiled in *.beam) – Function » Clause (syntactic sugar for case statement)
    • MFA • Module:Function/Arity • Module:Function(Arguments) • M:F(A1,A2,..,An) = apply(M,F,[A1,A2,..,An])
    • Concurrent Erlang • • • • Spawn processes Send messages to processes Selective receive Additional data types: – PIDs, references
    • Spawn a process
    • Send Message
    • Receive Message
    • Actors / Agents / Active Objects
    • Process • • • • • • • • • • • Pid – Process ID optional: registered name initial call: MFA message queue (mailbox) stack heap Dictionary (like TLS – thread local storage) traping exits? (boolean flag) linked processes priority (low/normal/high) Reductions counter
    • Distributed Erlang A B Erlang Run-Time System C Erlang Run-Time System network Node name: foo@domain.com Node name: bar@domain.com
    • Distributed Erlang A B C B ! Msg Erlang Run-Time System Erlang Run-Time System network Node name: foo@domain.com Node name: bar@domain.com
    • Distributed Erlang A B C B ! Msg C ! Msg Erlang Run-Time System Erlang Run-Time System network Node name: foo@domain.com Node name: bar@domain.com
    • Erlang VM - SMP Schedulers
    • zvi@host:~$ erl Erlang R16B02 (erts-5.10.3) [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] Eshell V5.10.3 1> (abort with ^G)
    • Hot Code Reloading • Module may have 2 version loaded in VM: – old version – current version • When new version of module is loaded: – it become a “current version” – current version become the “old version” • All new processes will use current version • The old processes running old version – In places in the code where module name is explicitly specified - the process will switch to current version: • my_function(Args) - no version switch • my_module:my_function(Args) - switching version
    • Tools • IDE: – Emacs, Distel, Plugins for Eclipse and Netbeans • Testing: – e-unit, meck, proper, QuickCheck (paid), Quick Check mini - free • Static code analyzer: – Dialyzer • Debug and trace – Built-in in VM – dbg, redbug • Build: – emake, rebar, relx, erlang.mk • Package Managers: – rebar, mix
    • Docs, Tutorials, Community, Conferences ERLANG RESOURCES
    • Erlang books ErlangCentral.org
    • http://www.erlang.org/download.html
    • http://www.erlang.org/doc
    • http://erlang.org/mailman/listinfo/erlang-questions
    • http://LearnYouSomeErlang.com
    • http://www.TryErlang.org
    • https://ErlangCentral.org
    • Erlang/OTP is a good fit for: • Irregular concurrency: – Task-level – Fine-grained parallelism • Network servers • Distributed systems • Middleware: – Parallel databases – Message Queue servers • Soft Realtime / Embedded applications • Monitoring, control and testing tools
    • Not so good fit for: • Concurrency for synchronized parallel execution – Data Parallelism • Floating-point intensive code (HPC) • Text Processing / Unicode – Unicode support now much better • Traditional GUI (supports wxWidgets) • Hard Realtime applications • Extensive interop with other languages/VMs – improvement here with NIFs and Erjang - Erlang on JVM
    • Thank You! Now Q&A All images are taken from Google Image search and various other places on the Internet © Copyright of corresponding owners
    • BACKUP SLIDES
    • Communicating with External world: • Part of the OTP: – – – – – – CORBA/IDL ODBC/SQL ASN.1 SNMP HTTP/FTP SSH • erlcall – execute any Erlang function on remote Node from the shell or script • escript – write scripts in Erlang – no need to compile
    • Communicating with External world In-proc Out-of-proc Custom Protocol Linked-in Drivers • in-proc (.so, DLLs) • Written in C • custom protocols • Can crash VM Ports • external executable • like pipes • custom protocols via fd/stdio/sockets • Dir = os:cmd(“ls –al”). Generic Protocol NIF • Native Implemented Functions • Written in C • in-proc (like JNI in Java: .so, DLLs) • .so/DLLs can be hot code reloaded at runtime • can block a scheduler • Can crash VM C-Node • out-of-proc (external executable, interpreter or VM) • Pretend to be a distributed Erlang node (but implemented in other lang.) • JInterface (Java), OTP.NET, PyInterface (Pyton), Rubyelectricity, etc. • Example: erlcall
    • LANGUAGES FOR ERLANG VM ERLANG ON JVM
    • Erjang – Erlang for JVM
    • Elixir Books
    • Concurrent Programming: Scala+Akka, node.js, Go COMPARISON
    • Go-lang