Your SlideShare is downloading. ×
0
Erlang
    Message Passing
Concurrency, For The Win


            Toby DiPasquale
          Commerce360, Inc.
 Presented t...
Er-what?


                 Language/runtime created at Ericsson

                 Designed for scalable, long-lived syste...
Another f*****
       language?

Pattern matching

Message-passing concurrency

Distributed programming

Hot code update
Runway Models

Meebo

SlideAware

RabbitMQ

Jabber.org

OpenPoker
Sequential
=

Not what you think it is, Performs a “binding”
Invokes pattern matching, Pattern matching like Prolog, nevermind Perl r...
Syntax


                  Variables start with uppercase letter

                  Variables can only be assigned once

 ...
She’s got the look


-module(math_o_matics).
-export([square/1]).

square(X) ->
    X * X.
Atoms

                  Self-indicating identifiers

                  Start with lowercase letter

                  Can ...
Tuples
Fixed length containers

Often prepended with an identifier atom

Decompose with pattern matching

Car = {car,
     ...
Lists
                  Variable length containers

                  Use [H|T] syntax to get head and tail of
           ...
Strings
                  Not really

                  Strings are just lists of integers

                  Must use dou...
Arity
 Use functions with same name and different
 arity* as auxiliary functions

-module(math_o_matics).
-export([sum/1])...
Modules

                Logically associated code block

                Use colon (:) to use intermodule code

         ...
The “fun” in functional

   Anonymous functions

   Used for higher-order programming



Square = fun(X) -> X * X end.

Cu...
List Comprehensions
    Takes an expression and a set of qualifiers
    and returns another list (like Python’s)

    Looks...
Guards

                  Simple tests against a pattern matching

                  Can make code more concise



       ...
Biting the bits


              Syntax for extracting/packing bits


               <<?IP_VERSION:4,
                  HLe...
Concurrency
Shared Memory




                       Image credit: http://www.ja.org/nested/berrienandcass/kelly-vault.jpg


Lots of c...
Message Passing




                       Image credit: http://english.people.com.cn/200512/21/images/pop2.jpg


Pass mes...
Processes


                 Basic unit of concurrency

                 Use spawn/0, !/1 (a.k.a. send) and
              ...
Concurrency Template*
                  -module(template).
                  -compile(export_all).

                  star...
Errors

                  Linking processes defines error chain

                  When a process dies, linked processes ar...
Distributing Erlang

                  Erlang has built-in support for distributed
                  operation

          ...
Distributing Erlang (2)

                  Two libraries for higher-level Distributed
                  Erlang:

         ...
ets and dets


                  Erlang Term Storage (and Disk ets)

                  Dictionary for mad loads of Erlang ...
Mnesia

                  Real-time, distributed database that comes
                  with Erlang

                  Quer...
OTP


                  Open Telecom Platform

                  Web server, FTP server, CORBA ORB, ASN.1,
               ...
Hot Erlang-on-Erlang
                        action
                  Yaws

                         Super scalable Web se...
RTFM
Programming Erlang (PDF and dead tree
versions; great book)

Concurrent Programming with Erlang (older;
first half ava...
Huh huh huh huh... you said
         ‘Erlang’
  Slides: http://cbcg.net/talks/erlang.pdf

            Me: toby@cbcg.net
Upcoming SlideShare
Loading in...5
×

Erlang Message Passing Concurrency, For The Win

7,709

Published on

Published in: Technology, News & Politics
3 Comments
14 Likes
Statistics
Notes
  • good
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Impressive presentation of 'Erlang Message Passing Concurrency, For The Win'. You've shown your credibility on presentation with this slideshow. This one deserves thumbs up. I'm John, owner of www.freeringtones.ws/ . Hope to see more quality slides from you.

    Best wishes.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Using imagery in this presentation is very effective. You've done a fantastic job here friend.
    Anisa
    http://financejedi.com http://healthjedi.com
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total Views
7,709
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
271
Comments
3
Likes
14
Embeds 0
No embeds

No notes for slide

Transcript of "Erlang Message Passing Concurrency, For The Win"

  1. 1. Erlang Message Passing Concurrency, For The Win Toby DiPasquale Commerce360, Inc. Presented to Philly Linux Users Group June 6, 2007
  2. 2. Er-what? Language/runtime created at Ericsson Designed for scalable, long-lived systems Not object oriented Compiled, Functional, Dynamically typed, Open source
  3. 3. Another f***** language? Pattern matching Message-passing concurrency Distributed programming Hot code update
  4. 4. Runway Models Meebo SlideAware RabbitMQ Jabber.org OpenPoker
  5. 5. Sequential
  6. 6. = Not what you think it is, Performs a “binding” Invokes pattern matching, Pattern matching like Prolog, nevermind Perl regexs
  7. 7. Syntax Variables start with uppercase letter Variables can only be assigned once Last evaluation is return value of function Functions and shell exprs end in period Clauses end in semicolon
  8. 8. She’s got the look -module(math_o_matics). -export([square/1]). square(X) -> X * X.
  9. 9. Atoms Self-indicating identifiers Start with lowercase letter Can also be quoted with single quotes atom this_is_an_atom ‘I am also an atom’ Used just like you’d use an enum in C or a Symbol in Lisp or Ruby
  10. 10. Tuples Fixed length containers Often prepended with an identifier atom Decompose with pattern matching Car = {car, {honda, civic}, {horsepower, 100}}. {car, Type, Power} = Car.
  11. 11. Lists Variable length containers Use [H|T] syntax to get head and tail of list List = [1, 2, 3, four, 5.0] [Head|Tail] = List [H1,H2|T2] = List Use lists just like you would in Lisp Do something to head, recursively; [H|T] syntax is pattern matching
  12. 12. Strings Not really Strings are just lists of integers Must use double quotes Meeting = “PLUG”. Meeting2 = [80,76,85,71]. Those two examples at the bottom are the same string; String handling blows in Erlang No Unicode
  13. 13. Arity Use functions with same name and different arity* as auxiliary functions -module(math_o_matics). -export([sum/1]). sum(L) -> sum(L, 0). sum([], N) -> N; sum([H|T], N) -> sum(T, H+N). * ‘Arity’ refers to the number of input parameters a function takes
  14. 14. Modules Logically associated code block Use colon (:) to use intermodule code Use -import to avoid prefixing io:format(“Using the module io~n”). One module per file
  15. 15. The “fun” in functional Anonymous functions Used for higher-order programming Square = fun(X) -> X * X end. Cube = fun(X) -> Square(X) * X end.
  16. 16. List Comprehensions Takes an expression and a set of qualifiers and returns another list (like Python’s) Looks like: [X || Q1, Q2, ... Qn ] qsort([]) -> []; qsort([Pivot|T]) -> qsort([X || X <- T, X < Pivot]) ++ [Pivot] ++ qsort([X || X <- T, X >= Pivot]).
  17. 17. Guards Simple tests against a pattern matching Can make code more concise max(X, Y) when X > Y -> X; max(X, Y) -> Y. Multiple guards separated by a semicolon; Other guards include: arithmetic exprs, short-circuit boolean exprs, constants (False), true (True)
  18. 18. Biting the bits Syntax for extracting/packing bits <<?IP_VERSION:4, HLen:4, SrvcType:8, TotLen:16, ID:16, Flgs:3, FragOff:13, TTL:8, Proto:8, HdrChkSum:16, SrcIP:32, DestIP:32, RestDgram/binary>> Can do signed, unsigned, big-endian and little-endian, integer, float and binary qualifiers Example decomposes an IPv4 packet
  19. 19. Concurrency
  20. 20. Shared Memory Image credit: http://www.ja.org/nested/berrienandcass/kelly-vault.jpg Lots of contention in there; Sweaty and noisy after a while Unpleasant; Teacher must watch to make sure things go smoothly (single point of failure)
  21. 21. Message Passing Image credit: http://english.people.com.cn/200512/21/images/pop2.jpg Pass messages to communicate; Stability through replication and communication More like real world concurrent systems; No mutexes, semaphores, monitors, etc to deal with
  22. 22. Processes Basic unit of concurrency Use spawn/0, !/1 (a.k.a. send) and receive/1 BIF’s* Asynchronous send, synchronous receive * BIF means “Built-in Function” Owned by runtime, not OS; Very cheap and fast to spawn; No shared memory between processes
  23. 23. Concurrency Template* -module(template). -compile(export_all). start() -> spawn(fun() -> loop([]) end). rpc(Pid, Query) -> Pid ! {self(), Query}, receive {Pid, Reply} -> Reply end. loop(X) -> receive Any -> io:format(quot;Received:~p~nquot;, [Any]), loop(X) end. * Courtesy of Joe Armstrong in Programming Erlang, First Edition loop/1 is tail-recursive when you get a new message, add a clause to receive in rpc/2
  24. 24. Errors Linking processes defines error chain When a process dies, linked processes are sent an exit signal Use spawn_link/1 to spawn linked processes Only system processes can trap special exit signals
  25. 25. Distributing Erlang Erlang has built-in support for distributed operation Two modes: Distributed Erlang (easier, less secure) Socket-based distribution (more secure) Distributed Erlang looks largely the same as non-distributed
  26. 26. Distributing Erlang (2) Two libraries for higher-level Distributed Erlang: rpc - RPC services global - naming, locking, maintenance Cookie based security model security is crappy, suitable only for protected LANs each machine is given a cookie; cookie must be same for all nodes in cluster
  27. 27. ets and dets Erlang Term Storage (and Disk ets) Dictionary for mad loads of Erlang data ets tables are transient, dets are persistent support insertion/lookup of keys and deletion of entire table
  28. 28. Mnesia Real-time, distributed database that comes with Erlang Query language looks like SQL/list comprehensions Built-in visualization tools Can store data in memory or on disk Mnesia is built on top of ets and dets
  29. 29. OTP Open Telecom Platform Web server, FTP server, CORBA ORB, ASN.1, SNMP, etc Designed around encapsulated “behaviors” Has lots more than telco stu; set of libraries and platforms for building large-scale apps behaviors help code up large-scale apps (e.g. gen_tcp, gen_server)
  30. 30. Hot Erlang-on-Erlang action Yaws Super scalable Web server/platform ejabberd Super scalable XMPP server RabbitMQ Super scalable message broker Seeing a pattern here?
  31. 31. RTFM Programming Erlang (PDF and dead tree versions; great book) Concurrent Programming with Erlang (older; first half available online) Erlang Website Trapexit forums erlang-questions mailing list
  32. 32. Huh huh huh huh... you said ‘Erlang’ Slides: http://cbcg.net/talks/erlang.pdf Me: toby@cbcg.net
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×