• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
The Erlang Programming Language
 

The Erlang Programming Language

on

  • 3,324 views

 

Statistics

Views

Total Views
3,324
Views on SlideShare
3,309
Embed Views
15

Actions

Likes
2
Downloads
89
Comments
1

4 Embeds 15

https://www.linkedin.com 7
http://www.linkedin.com 5
http://a0.twimg.com 2
http://www.slideshare.net 1

Accessibility

Upload Details

Uploaded via as Microsoft PowerPoint

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

11 of 1 previous next

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

    The Erlang Programming Language The Erlang Programming Language Presentation Transcript

    • The Erlang Programming Language Dennis Byrne - ThoughtWorks [email_address] http://notdennisbyrne.blogspot.com/ © ThoughtWorks 2008
    • Introduction
      • Not a “shiny new object (or function)”
      • Open sourced by Ericsson
      • Functional Programming
      • Concurrency
      • Reliability
      • ThoughtWorks ! Erlang
      © ThoughtWorks 2008 Erlang is a functional programming language, with native constructs for concurrency and reliability.
    • A Totally “Unbiased” Comparison
      • In Erlang:
      • List = [1,2,3,4,5].
      • Doubled = lists:map( fun(I) -> I * 2 end, List).
      • In Java:
      • List<Integer> list = new LinkedList<Integer>() {{
      • add(1); add(2); add(3); add(4); add(5);
      • }};
      • List<Integer> doubled = new ArrayList<Integer>();
      • for(Integer integer : list) {
      • doubled.add(integer.intValue() * 2);
      • }
      © ThoughtWorks 2008
    • Single Assignment & Unification
      • I = 4. % assignment
      • I = 4. % unification
      • I = I. % unification
      • 4 = I. % unification
      • I = 5. % throws error :(
      © ThoughtWorks 2008
    • Pattern Matching
      • 1> MyList = [ “ A ” ]. % declaring a list
      • 2> [Var] = MyList. % implicit declaration
      • 3> io:format(Var). % prints “ A ”
      • 1> MyList = [ “ A ” , “ B ” ]. % declaring a list
      • 2> [_, Var] = MyList. % _ is ignored
      • 3> io:format(Var). % prints B
      © ThoughtWorks 2008
    • Functions as First Class Citizens
      • 1> Msg = &quot;I am scoped&quot;.
      • 2> F = fun()->
      • io:format(Msg)
      • end.
      • 3> F(). % prints “ I am scoped ”
      © ThoughtWorks 2008
    • Tail Recursion
      • Tail recursion is to ‘recursion’ as optimistic locking is to ‘locking’.
      • loop() ->
      • io:format( “ in constant space ” ),
      • loop() .
      • Automatic byte code manipulation
      • Last call optimization
      © ThoughtWorks 2008
    • Pop Quiz: Evaluation Strategies
      • f( a(), b() )
      • Order of evaluation
      • Lazy or strict?
      • Left, right, both, neither?
      © ThoughtWorks 2008
    • State
      • Erlang avoids complex solutions in favor of simple ways to avoid the problem
      • State is immutable w/ single assignment
      • State is private, passed by value
      • Changing Perspectives
        • Contention vs. Scale
        • Side Effects vs. Scale
      © ThoughtWorks 2008
    • Erlang Process
      • An Erlang process combines the best of
        • An operating system process
        • An operating system thread
        • A “green thread”
      • Controlled in user space by the ERTS
      • Costs less than 300 bytes
        • Private heap
        • Private stack
      • All processes are created equal
      • Incremental garbage collection
      © ThoughtWorks 2008
    • The Actor Model
      • Asynchronous Message passing
      • Messages passed by value, not reference
      • One to one relationship
        • An Actor
        • A mailbox
        • A Process
        • A Process ID, or pid
      © ThoughtWorks 2008
    • Concurrency Primitives: spawn
      • A built in function used to create a process.
      • Pid = spawn(Node, Module, Function, Args)
      © ThoughtWorks 2008
    • Another “Unbiased” Comparison
      • In Erlang:
      • Pid = spawn(fun() -> io:format(“hello world”) end).
      • In Java:
      • Thread thread = new Thread() {
      • public void run() {
      • System.out.println(&quot;Hello World&quot;);
      • }
      • }.start();
      © ThoughtWorks 2008
    • Concurrency Primitives: send
      • !
      © ThoughtWorks 2008
    • Concurrency Primitives: send
      • The send operator passes a message to a process. It is “fire and forget”.
      • Pid ! Msg
      © ThoughtWorks 2008
    • Concurrency Primitives: receive
      • receive
      • Pattern1 [ when Guard1 ] ->
      • dosomething().
      • Pattern2 [ when Guard2 ] ->
      • dosomethingelse().
      • end
      © ThoughtWorks 2008
    • Reliability
      • catch
      • try
      • Monitor
        • monitor_node(Node, Bool)
        • Unidirectional
      • Link
        • Pid = spawn_link(Node, Module, Fun, Args)
        • Bi-directional
      © ThoughtWorks 2008
    • The Opposite of Ruby © ThoughtWorks 2008 Erlang Ruby Orientation Functional Object Syntax Ugly Beautiful Concurrent Good Bad Track Record Back end Front end Execution Model Compiled Interpreted
    • Erlang Servers and Frameworks
      • Mnesia – distributed database
      • YAWS – “yet another web server”
      • ErlyWeb – MVC web framework
      • EUnit
      • Jungerl – third party libraries
      • Perferl ( http://code.google.com/p/perferl )
      © ThoughtWorks 2008
    • The Erlang Programming Language
      • Dennis Byrne - ThoughtWorks
      • [email_address]
      • http://notdennisbyrne.blogspot.com/
      © ThoughtWorks 2008