Erlang (programming language): Difference between revisions
imported>Eric Evers No edit summary |
imported>Eric Evers No edit summary |
||
Line 2: | Line 2: | ||
''For other uses, see [[erlang (disambiguation)]].'' | ''For other uses, see [[erlang (disambiguation)]].'' | ||
'''Erlang''' is a [[strict]] [[functional language]], [[Programming_language#Declarative_vs._Imperative|declarative language]], and a general-purpose [[programming language]] which shares some syntax with [[prolog]]. Armstrong also describes it as a concurrency oriented language <ref Name=ArmDis/>. '''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 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. | '''Erlang''' is a [[strict]] [[functional language]], a [[Programming_language#Declarative_vs._Imperative|declarative language]], and a general-purpose [[programming language]] which shares some syntax with [[prolog]]. Armstrong also describes it as a concurrency oriented language <ref Name=ArmDis/>. '''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 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== | ==Syntax== |
Revision as of 22:16, 31 January 2008
For other uses, see erlang (disambiguation).
Erlang is a strict functional language, a 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.0 1.1 Armstrong Dissertation
- ↑ Cite error: Invalid
<ref>
tag; no text was provided for refs namedK&R