Erlang (programming language)/Tutorials: Difference between revisions

From Citizendium
Jump to navigation Jump to search
imported>Eric Evers
imported>Eric Evers
No edit summary
 
(47 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{subpages}}
{{subpages}}
=Erlang Language Programming Tutorials=
=Erlang Language Programming Tutorials=
==History==
The erlang language was first written in prolog by Joe Armstrong. Ref:audio interview with Joe Armstrong from (http://www.se-radio.net). Joe is a known fan of prolog and borrowed much syntax from prolog in the design of erlang. This first prolog version of erlang was slow and motivated the creation of a virtual machine. Later an emulator called the BEAM(Bogdans's Erlang Abstract Machine, [http://www.erlang.se/publications/icfp97.ps.gz]) was written in C and is about 200,000 lines of code. The language name erlang was most likey used because it is also a (unit of phone connection); because of its original use in the phone company Ericsson.


==Overview==
==Overview==
Erlang is a language created to do parallel programming with only message passing. Pure message passing makes MIMD ([[Parallel_computation]]) programming almost easy once you get friendy with it. No memory is shared.
Erlang is a concurency oriented language and the primary programming building block is a process.
In erlang, processes are allowed to fail and are simply restarted.
Erlang has a purely functional core. A functional language is one that is based on [[Lambda_calculus]]. In lambda calculus variables have single assignment and behave like mathematical functions and functions are stateless. The advantages of referential transparency(single assignment) are many. Single assignment makes debugging easier(Joe Armstrong http://www.se-radio.net). Statelessness makes hot code swapping easy in erlang(Joe Armstrong). Referential transparency makes editing and code transformation easier(via find and replace). Functional languages have the advantage that syntax and semantics are unified. This unification makes it easier for code to modify itself safely, which facilitates meta-programming. Added benefits of functional programming include the ability to prove things like the correctness and equivalence between programs
(see Functional Programming [http://en.citizendium.org/wiki/Functional_programming])
Print functions and message passing are side effects and are not part of the purely functional core of erlang.
One of the main ideas in erlang is to make as much of a program purely functional as possible and isolate the
functions that include side effects to improve stability. The theory is that the purely functional part is naturally well behaved.
Erlang has been around for 20 years and has a large library of functions available, especially for networking and the web.


==Basic Erlang==
==Basic Erlang==


:[[/Command Line|Get to know the Command Line]]
:[[/Quick_tips|Quick tips]]
:[[/Terms|Terms]]
:[[/Terms|Terms]]
:[[/Pattern Matching|Pattern Matching]]
:[[/Pattern Matching|Pattern Matching]]
Line 12: Line 31:
:[[/guards|Guards]]
:[[/guards|Guards]]
:[[/Modules|Modules]]
:[[/Modules|Modules]]
:[[/Errors|Errors]]
:[[/Errors|Errors]] - working with exceptions
:[[/Processes|Processes and Messages]]
:[[/Processes|Processes and Messages]]
:[[/Trap_exit|Trapping Exit Signals]]
:[[/Timeouts|Timeouts]]
:[[/Timeouts|Timeouts]]
:[[/Macros|Macros]]
:[[/Macros|Macros]]
Line 21: Line 41:


==Syntax==
==Syntax==
Functions are defined by the domain of the arguments and the number of arguemnts. A function ends with a period. A function over a particular domain of values is separated by a semicolon.
Functions are defined by the domain of the arguments and the number of arguemnts. A function ends with a period. A function over a particular domain(set of inputs) is separated by a semicolon. The arrow shows how a particular function of a particular value or variable maps to an output.


  fact(0) -> 1;
  fact(0) -> 1;
  fact(N) when is_integer(N) ->  
  fact(N) when is_integer(N) ->  
     fact(N-1)*N.
     fact(N-1)*N.
:[[Erlang_programming_language/Tutorials/Advanced_syntax|Advanced Syntax]]


==Simple Types==
==Simple Types==
Line 38: Line 60:


==Advanced Types==
==Advanced Types==
*binary - a binary data block
*binary - a binary data block, <<42>>
*function - a function, F = fun(X) -> X*X end.
*function - a function, F = fun(X) -> X*X end.
*port - a path for data to flow to the outside world
*port - a path for data to flow to the outside world
Line 44: Line 66:
*record - the standard erlang data structure
*record - the standard erlang data structure


==Popular Modules==
==Modules==
 
===Adding/Replacing Modules===
Erlang is picky about updating or replacing modules of the same name.
You should completely remove the old module code from the directory tree,
not just rename the containing directory.
 
===Popular Modules===
:[[Erlang_programming_language/Tutorials/Math|math]]
:[[Erlang_programming_language/Tutorials/gb_sets|gb_sets]]
:[[Erlang_programming_language/Tutorials/Lists|lists]]
:[[Erlang_programming_language/Tutorials/Lists|lists]]
:[[Erlang_programming_language/Tutorials/regexp|regexp: Regular Expressions]]
:[[Erlang_programming_language/Tutorials/regexp|regexp: Regular Expressions]]
===Nonstandard Modules===
:[[Erlang_programming_language/Tutorials/eunit|Eunit]] Unit Testing Module
==Object Oriented Programming with erlang==
Behaviours
:[[Erlang_programming_language/Tutorials/behaviours|Behaviours]]
Nonstandard OOP with erlang
:[[Erlang_programming_language/Tutorials/erlangOOP|Objects with erlang]]
==Functional Programming with erlang==
:[[Erlang_programming_language/Tutorials/Folding|Fun with folding]]
:[[Erlang_programming_language/Tutorials/Iterator|Iterator]]
:[[Erlang_programming_language/Tutorials/Simplify|Simplify Numeric Types]] (auto-demotion of numerical types)


==Example programs==
==Example programs==
Line 55: Line 103:
:[[Erlang_programming_language/Tutorials/Agents|Autonomous Agents in Erlang]] -- def: [[Autonomous Agent]].
:[[Erlang_programming_language/Tutorials/Agents|Autonomous Agents in Erlang]] -- def: [[Autonomous Agent]].


==Advanced OTP==
==OTP==
Design of OTP programs
:[[Erlang_programming_language/Tutorials/otp_design|otp_design]]
OTP Behaviours
  client-server
  event-handler
  :[[Erlang_programming_language/Tutorials/gen_server|gen_server]]
  hot-standby
  keep-me-alive
  supervision-tree
  upgrade-handler
  worker-supervisor


===Databases===


====[[Erlang_programming_language/Tutorials/ETS|ETS programming]]====
==Databases==


====Mnesia====
:[[Erlang_programming_language/Tutorials/ETS|ETS programming]]
:[[Erlang_programming_language/Tutorials/DETS|DETS programming]]
:[[Erlang_programming_language/Tutorials/Mnesia|Mnesia database]]


==Advanced Erlang==
==Advanced Erlang==
Line 67: Line 127:
:[[Erlang_programming_language/Tutorials/Evaluation|Evaluation]]
:[[Erlang_programming_language/Tutorials/Evaluation|Evaluation]]


==Glossary of Erlang Terms==
  Call:      a Synchronous message between processes
  Cast:      an Asynchronous message between processes
  Reference: an data type that provides a unique mark of identification
            you can generate an id with the command:
            erlang:make_ref()
 
==Projects using erlang==
==Projects using erlang==
*CouchDB - a scalable database for Apache
*CouchDB - a scalable database for Apache

Latest revision as of 14:28, 24 August 2009

This article is developing and not approved.
Main Article
Discussion
Related Articles  [?]
Bibliography  [?]
External Links  [?]
Citable Version  [?]
Tutorials [?]
 
Tutorials relating to the topic of Erlang (programming language).

Erlang Language Programming Tutorials

History

The erlang language was first written in prolog by Joe Armstrong. Ref:audio interview with Joe Armstrong from (http://www.se-radio.net). Joe is a known fan of prolog and borrowed much syntax from prolog in the design of erlang. This first prolog version of erlang was slow and motivated the creation of a virtual machine. Later an emulator called the BEAM(Bogdans's Erlang Abstract Machine, [1]) was written in C and is about 200,000 lines of code. The language name erlang was most likey used because it is also a (unit of phone connection); because of its original use in the phone company Ericsson.

Overview

Erlang is a language created to do parallel programming with only message passing. Pure message passing makes MIMD (Parallel_computation) programming almost easy once you get friendy with it. No memory is shared. Erlang is a concurency oriented language and the primary programming building block is a process. In erlang, processes are allowed to fail and are simply restarted.

Erlang has a purely functional core. A functional language is one that is based on Lambda_calculus. In lambda calculus variables have single assignment and behave like mathematical functions and functions are stateless. The advantages of referential transparency(single assignment) are many. Single assignment makes debugging easier(Joe Armstrong http://www.se-radio.net). Statelessness makes hot code swapping easy in erlang(Joe Armstrong). Referential transparency makes editing and code transformation easier(via find and replace). Functional languages have the advantage that syntax and semantics are unified. This unification makes it easier for code to modify itself safely, which facilitates meta-programming. Added benefits of functional programming include the ability to prove things like the correctness and equivalence between programs (see Functional Programming [2])

Print functions and message passing are side effects and are not part of the purely functional core of erlang. One of the main ideas in erlang is to make as much of a program purely functional as possible and isolate the functions that include side effects to improve stability. The theory is that the purely functional part is naturally well behaved.

Erlang has been around for 20 years and has a large library of functions available, especially for networking and the web.

Basic Erlang

Get to know the Command Line
Quick tips
Terms
Pattern Matching
Expressions
Functions
Guards
Modules
Errors - working with exceptions
Processes and Messages
Trapping Exit Signals
Timeouts
Macros
Techniques of Recursion
List Comprehensions
List Comments

Syntax

Functions are defined by the domain of the arguments and the number of arguemnts. A function ends with a period. A function over a particular domain(set of inputs) is separated by a semicolon. The arrow shows how a particular function of a particular value or variable maps to an output.

fact(0) -> 1;
fact(N) when is_integer(N) -> 
    fact(N-1)*N.
Advanced Syntax

Simple Types

Basic types in erlang include:

  • atom - alice
  • integer - 3
  • float - 3.1415
  • pid - a process id number <0.42.0>
  • list - [ things in square brackets ]
  • tuple - { things in curly braces }

Advanced Types

  • binary - a binary data block, <<42>>
  • function - a function, F = fun(X) -> X*X end.
  • port - a path for data to flow to the outside world
  • reference - a unique id over all processes
  • record - the standard erlang data structure

Modules

Adding/Replacing Modules

Erlang is picky about updating or replacing modules of the same name. You should completely remove the old module code from the directory tree, not just rename the containing directory.

Popular Modules

math
gb_sets
lists
regexp: Regular Expressions

Nonstandard Modules

Eunit Unit Testing Module

Object Oriented Programming with erlang

Behaviours

Behaviours

Nonstandard OOP with erlang

Objects with erlang

Functional Programming with erlang

Fun with folding
Iterator
Simplify Numeric Types (auto-demotion of numerical types)

Example programs

Hello World (Serial)
Hello World (parallel)
Prime Sieve with Linda
Autonomous Agents in Erlang -- def: Autonomous Agent.

OTP

Design of OTP programs

otp_design

OTP Behaviours

 client-server 
 event-handler 
 :gen_server 
 hot-standby 
 keep-me-alive 
 supervision-tree 
 upgrade-handler 
 worker-supervisor 


Databases

ETS programming
DETS programming
Mnesia database

Advanced Erlang

Making parsers with yecc
Evaluation

Glossary of Erlang Terms

 Call:      a Synchronous message between processes
 Cast:      an Asynchronous message between processes
 Reference: an data type that provides a unique mark of identification
            you can generate an id with the command:
            erlang:make_ref()
 

Projects using erlang

  • CouchDB - a scalable database for Apache
  • Wings3D - a 3-D editor

References

1 - Erlang Man Pages at Erlang,org