Erlang (programming language)

From Citizendium
Revision as of 23:16, 31 January 2008 by imported>Eric Evers
Jump to navigation Jump to search
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.

For other uses, see erlang (disambiguation).

Erlang is a strict functional language, declarative language, and a general-purpose programming language which shares some syntax with prolog. Armstrong also describes it as a concurrency oriented language [1]. 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 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.

Syntax

Hello World

-module(hello).
-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. It was introduced in the book The C Programming Language[2].

-module(hello) tells the compiler to create a new module(library) called hello. The code tells us the file name for this code: hello.erl.

-export([start/0]). exports a function named start with 0 arguments to the world outside of this module called hello.

start() -> tells the compiler that there is a function named start() with no arguments.

io:format("Hello, world!\n"). will make the program output Hello, world! and a new line (\n) on the screen.

Parallel Hello World

1	-module(par_hello).
2	-export([start/0, speak/1]).
3
4	start() ->
5		Pid1 = spawn( par_hello, speak,[ 1 ]),
6		Pid2 = spawn( par_hello, speak,[ 2 ]),
7		Pid1 ! {hello, world},
8		Pid2 ! {hello, world},
9		done.
10	
11	speak(N) ->
12		receive			
13			{hello, world} ->	
14                             io:format("Hello, world! ~w \n", [N])
15	end.     
--------------------
output
--------------------
hello world! 1
hello world! 2
done

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

! means send

See also

References

  1. 1.0 1.1 Armstrong Dissertation
  2. Cite error: Invalid <ref> tag; no text was provided for refs named K&R