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

Like this? Share it with your network

Share

Erlang - Concurrent Language for Concurrent World

on

  • 1,933 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,933
Views on SlideShare
1,890
Embed Views
43

Actions

Likes
0
Downloads
35
Comments
0

4 Embeds 43

http://www.linkedin.com 18
https://twitter.com 17
https://www.linkedin.com 7
http://s.testerhome.com 1

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 Presentation Transcript

  • 1. $ whoami Name: Title: Company: E-mail: Zvi Avraham Founder & CEO ZADATA Ltd zvi@zadata.com
  • 2. Concurrent Language for Concurrent World
  • 3. The world is concurrent… I could not drive the car, if I did not understood concurrency … -- Joe Armstrong, father of Erlang
  • 4. Object-oriented Programming
  • 5. object object object object object object object object Object-oriented Programming object object object object object object object object object object
  • 6. Concurrency-oriented Programming
  • 7. process process process process process process process process Concurrency-oriented Programming process process process process process process process process process process
  • 8. Imagine a programming language which allows only 1000 objects -- Joe Armstrong, father of Erlang
  • 9. 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)
  • 10. 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
  • 11. Share Nothing! No mutable State!
  • 12. Software Isolation
  • 13. But, it will not help if the whole VM crashes
  • 14. 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!
  • 15. 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!
  • 16. Lenin – Lived Lenin – is Alive Lenin – will Live!
  • 17. Errors – Existed Errors – Exist Errors – will Exist!
  • 18. Lenin, read my dissertation: “Making reliable distributed systems in the presence of software errors”
  • 19. http://www.erlang.org/download/armstrong_thesis_2003.pdf
  • 20. 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
  • 21. Erlang/OTP Stack Distributed Erlang Concurrent Erlang Functional Sequential Erlang Erlang VM – BEAM / ERTS Erlang Programming Language OTP – Open Telecom Platform
  • 22. 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)
  • 23. 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
  • 24. 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) ].
  • 25. Regular Recursion
  • 26. Tail Recursion
  • 27. 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)
  • 28. OOP vs FP
  • 29. 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)
  • 30. 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)
  • 31. MFA • Module:Function/Arity • Module:Function(Arguments) • M:F(A1,A2,..,An) = apply(M,F,[A1,A2,..,An])
  • 32. Concurrent Erlang • • • • Spawn processes Send messages to processes Selective receive Additional data types: – PIDs, references
  • 33. Spawn a process
  • 34. Send Message
  • 35. Receive Message
  • 36. Actors / Agents / Active Objects
  • 37. 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
  • 38. Distributed Erlang A B Erlang Run-Time System C Erlang Run-Time System network Node name: foo@domain.com Node name: bar@domain.com
  • 39. 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
  • 40. 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
  • 41. Erlang VM - SMP Schedulers
  • 42. 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)
  • 43. 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
  • 44. 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
  • 45. Docs, Tutorials, Community, Conferences ERLANG RESOURCES
  • 46. Erlang books ErlangCentral.org
  • 47. http://www.erlang.org/download.html
  • 48. http://www.erlang.org/doc
  • 49. http://erlang.org/mailman/listinfo/erlang-questions
  • 50. http://LearnYouSomeErlang.com
  • 51. http://www.TryErlang.org
  • 52. https://ErlangCentral.org
  • 53. 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
  • 54. 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
  • 55. Thank You! Now Q&A All images are taken from Google Image search and various other places on the Internet © Copyright of corresponding owners
  • 56. BACKUP SLIDES
  • 57. 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
  • 58. 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
  • 59. LANGUAGES FOR ERLANG VM ERLANG ON JVM
  • 60. Erjang – Erlang for JVM
  • 61. Elixir Books
  • 62. Concurrent Programming: Scala+Akka, node.js, Go COMPARISON
  • 63. Go-lang