Erlang (programming language): Difference between revisions

From Citizendium
Jump to navigation Jump to search
imported>Eric Evers
mNo edit summary
 
(18 intermediate revisions by 6 users not shown)
Line 1: Line 1:
{{subpages}}
{{subpages}}
{{dambigbox|Erlang (programming language)|Erlang}}
{{TOC|right}}


The '''Erlang programming language''' is a [[strict]] [[functional language]], a  [[Programming_language#Declarative_vs._Imperative|declarative language]], and a [[Programming_language#General_purpose_vs._special_purpose|general-purpose ]] [[programming language]] which shares some syntax with [[prolog]]. It is considered declarative because it has the pattern matching syntax of prolog and list comprehensions. Because of its prowess at parallel programming it is particulary good at creating servers such as web servers or ftp servers with small amounts of code. It is a dynamically typed language. Armstrong also describes it as a concurrency oriented language. '''Erlang''' was developed in 1987 by [[Joe Armstrong]] and others (then of [[Ericsson]]) for use to program telephone networks. Ref: Joe Armstrong (2003). "Making reliable distributed systems in the presence of software errors". Ph.D. Dissertation. <ref Name=ArmDis>[http://www.erlang.org/download/armstrong_thesis_2003.pdf Armstrong Dissertation]</ref> New versions of Erlang are released by Ericsson on a yearly basis. At present(2008) there is increased interest in parallel programming languages because of the use of [[multicore]] microprocessors in personal computers.
The '''Erlang programming language''' is a [[strict]] [[functional language]], a  [[Programming_language#Declarative_vs._Imperative|declarative language]], and a [[Programming_language#General_purpose_vs._special_purpose|general-purpose ]] [[programming language]] which shares some syntax with [[prolog]]. It is considered declarative because it has the pattern matching syntax of prolog and list comprehensions. Because of its prowess at parallel programming it is particulary good at creating servers such as web servers or ftp servers with small amounts of code. It is a dynamically typed language. Armstrong also describes it as a concurrency oriented language. '''Erlang''' was developed in 1987 by [[Joe Armstrong]] and others (then of [[Ericsson]]) for use to program telephone networks. Ref: Joe Armstrong (2003). "Making reliable distributed systems in the presence of software errors". Ph.D. Dissertation. <ref Name=ArmDis>[http://www.erlang.org/download/armstrong_thesis_2003.pdf Armstrong Dissertation]</ref> New versions of Erlang are released by Ericsson on a yearly basis. At present(2008) there is increased interest in parallel programming languages because of the use of [[multicore]] microprocessors in personal computers. <ref Name=ConRev>[http://www.ddj.com/cpp/184401916 Multi-Core]</ref>


==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.


===Hello World===
fact(0) -> 1;
fact(N) when is_integer(N) ->
    fact(N-1)*N.


-module(hello).
Extensive Tutorial available: [[Erlang_programming_language/Tutorials]]
-export([start/0]).
start() ->
    io:format("Hello, world!\n").
 
====Analysis of the example====
 
The [[Hello World]] program (see above) appears in many programming languages books and articles as a cursory introduction into a language's [[syntax]]. The first hello world program was introduced in the book ''The C Programming Language''<ref name="K&R"/>.
 
<code>-module(hello)</code> tells the [[compiler]] to create a new module(library) called hello. The code tells us the file name for this code: hello.erl.
 
<code>-export([start/0]). </code> exports a function named start with 0 arguments to the world outside of this module called hello.
 
<code> start() -> </code> tells the compiler that there is a [[function]] named start() with no arguments.
 
<code>io:format("Hello, world!\n").</code> will make the program output <code>Hello, world!</code> and a new line (<code>\n</code>) on the screen. 
 
===Parallel Hello World===
<pre>
-module(tree_hello).                                                  % 1
-export([start/0, speak/1]).                                          % 2
                                                                      % 3
start() ->                                                            % 4
Pid1 = spawn( tree_hello, speak,[ 1 ]),                        % 5
Pid2 = spawn( tree_hello, speak,[ 2 ]),                        % 6
        Pid1 ! {hello, world},                                        % 7
        Pid2 ! {hello, world},                                        % 8
done.                                                          % 9
                                                                      % 10
speak(N) ->                                                            % 11
        receive                                       % 12
{hello, world} ->                               % 13
                      io:format("Hello, world! ~w \n", [N])          % 14
end.                                                          % 15
 
 
==========================================================================           
 
output
--------------------
tree_hello:start().
hello world! 1
hello world! 2
done
</pre>
====Analysis of the example====
Here is a simple hello world in the parallel spirit of erlang. The program, par_hello, will create 3 processes, one manager process called "start( )" and 2 worker processes called speak(1) and speak(2) in a tree like relationship. Start( ) creates speak(1) and speak(2), then start( ) sends a message to each worker. The message is {hello, world}. Each worker process responds by printing out "hello world". All three are running simultaneously when line 7 starts.
 
Lines 1 to 4: see serial "hello world".
Line 5 spawns a process called speak giving it one argument with the value 1.
  Line 5 also creates a variable Pid1 and gives it the processes id number of speak(1).
Line 6 spawns a process called speak giving it one argument with the value 2.
  Line 6 also creates a variable Pid2 and gives it the process id number of speak(2).
Line 7 uses the Pid1(process id number of speak(1) to send a message to speak(1).
Line 8 uses the Pid2(process id number of speak(2) to send a message to speak(2).
Line 9 "done" is an arbitrary atom that finishes the function start( ).
Line 10 is a call to print formated text from the input/output(io) module(library).
Line 11 starts the function speak(N).
Line 12 starts to listen for a message.
Line 13 lists the message that is received
Line 14 shows what happens when the message in 13 is received.
  Line 14 prints out "hello world 1" if N is one or "hello world 2" if N is 2
 
Note: bang, ! in erlang means "send the following message".


==See also==
==See also==


* [[Erlang programming language/Tutorials|Erlang Tutorials]]
* [[Prolog]]
* [[Prolog]]
* [[Scheme programming language|Scheme]]
* [[Scheme programming language|Scheme]]
==Programs written in erlang==
* [[CouchDB]]: A document oriented database is an optional part of Apache. It is a distributed, schema-free and fault tolerant database.
* [[Wings3d]]: A 3d design program.


==References==
==References==
<references/>
<references/>[[Category:Suggestion Bot Tag]]

Latest revision as of 11:00, 13 August 2024

This article is developing and not approved.
Main Article
Discussion
Related Articles  [?]
Bibliography  [?]
External Links  [?]
Citable Version  [?]
Tutorials [?]
 
This editable Main Article is under development and subject to a disclaimer.
This article is about Erlang (programming language). For other uses of the term Erlang, please see Erlang (disambiguation).

The Erlang programming language is a strict functional language, a declarative language, and a general-purpose programming language which shares some syntax with prolog. It is considered declarative because it has the pattern matching syntax of prolog and list comprehensions. Because of its prowess at parallel programming it is particulary good at creating servers such as web servers or ftp servers with small amounts of code. It is a dynamically typed language. Armstrong also describes it as a concurrency oriented language. Erlang was developed in 1987 by Joe Armstrong and others (then of Ericsson) for use to program telephone networks. Ref: Joe Armstrong (2003). "Making reliable distributed systems in the presence of software errors". Ph.D. Dissertation. [1] New versions of Erlang are released by Ericsson on a yearly basis. At present(2008) there is increased interest in parallel programming languages because of the use of multicore microprocessors in personal computers. [2]

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.

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

Extensive Tutorial available: Erlang_programming_language/Tutorials

See also

Programs written in erlang

  • CouchDB: A document oriented database is an optional part of Apache. It is a distributed, schema-free and fault tolerant database.
  • Wings3d: A 3d design program.

References