Industrial use of a functional language
This presentation is the property of its rightful owner.
Sponsored Links
1 / 35

Industrial Use of a Functional Language PowerPoint PPT Presentation


  • 92 Views
  • Uploaded on
  • Presentation posted in: General

Thomas Arts. Industrial Use of a Functional Language. Thomas Arts Ericsson Computer Science Laboratory Stockholm, Sweden. [email protected] http://www.ericsson.se/cslab/~thomas. Thomas Arts. Telecom industry. Switches, routers, base-stations Networks Mobile telephones.

Download Presentation

Industrial Use of a Functional Language

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Industrial use of a functional language

Thomas Arts

Industrial Use of a Functional Language

Thomas Arts

Ericsson

Computer Science Laboratory

Stockholm, Sweden

[email protected]

http://www.ericsson.se/cslab/~thomas


Telecom industry

Thomas Arts

Telecom industry

Switches, routers,

base-stations

Networks

Mobile telephones


Computer science laboratory

Thomas Arts

Computer ScienceLaboratory

Founded 1983

Research on implementation tools, methods and techniques for telecommunication applications

Intermediate between universities and Ericsson product units


Telecom requirements

Thomas Arts

Telecom requirements

Requirements of telecom software

Concurrency

Distribution

Soft real-time

Robust

Non-stop system

External interfaces


A good language

Thomas Arts

A good language?

Experiments in the 80s with Ada, C, ML, CML, Prolog...

large programs (million lines)

change code in running system

fast message passing

low memory overhead

no memory fragmentation/leaks

recover from errors


Erlang otp

Thomas Arts

Erlang/OTP

A functional language successfully used for programming large real-time control systems.

OTP is the set of libraries that is used with Erlang for product development


Erlang otp1

Thomas Arts

Erlang/OTP

Erlang/OTP develop/maintenance

Erlang consultancy & courses

Erlang used many systems, e.g. ATM switch and new GSM network (GPRS)

Erlang Open Source

www.erlang.org


Module math export fac 1 fac n when n 0 n fac n 1 fac n 1

Thomas Arts

Erlangsequential program

-module(math).

-export([fac/1]).

fac(N) when N>0 ->

N*fac(N-1);

fac(N)->

1.


Erlang datatypes

Thomas Arts

Erlangdatatypes

atoms (true,foo,’Hello’)

numbers (1212864187154)

floats (3.141592)

tuples ({a,123})

lists ([1,123,2,56])

process identifiers

...


Erlang datatypes1

Thomas Arts

Erlangdatatypes

dynamically typed language

poor mechanism to build your own datatypes


Erlang control structures

Thomas Arts

Erlangcontrol structures

Matching

case X of

{ok,List} -> hd(List);

{resend,Data} -> submit;

error -> exit(error);

_ -> retry(X)

end


Erlang control structures1

Thomas Arts

Erlangcontrol structures

Guards

f(....) when guard -> ...

If

f(X) ->

if guard1 -> ...;

guard2 -> ...

end


Erlang control structures2

Thomas Arts

Erlangcontrol structures

Higher order functions

f(F,X) -> F(X);

map(F,[1,2,3,4]).

List comprehensions

[ X || {X,Y}<-Set, guard(X)]


Erlang control structures3

Thomas Arts

Erlangcontrol structures

Naming of objects/data

f(X) ->

Dev = update_device(X),

{Date,Time} = now(),

h({Dev,Date}).


Erlang control structures4

Thomas Arts

Erlangcontrol structures

Sequence

f(X) ->

action1(X),

action2(X);

update(X) ->

log(X,”myfile”), new(X).

side-effects


Erlang control concurrency distribution

Thomas Arts

Erlangcontrol - concurrency/distribution

Creating a process

Pid = spawn(F,[Arg1,...,ArgN]);

B = spawn(F,Args);

P2

P1

P2

F(Arg1,...,ArgN)


Erlang control concurrency distribution1

{P1,hej}

Thomas Arts

Erlangcontrol - concurrency/distribution

Sending messages

Pid ! Message;

B!{self(),hej};

P1

P2

{P1,hej}


Erlang control concurrency distribution2

Thomas Arts

Erlangcontrol - concurrency/distribution

Receiving messages

receive

Pattern -> ...;

end;

P1

P2

{P1,hej}

receive

{From,Msg} ->

From ! {ok,Msg}

end

P1 ! {ok,hej}


Erlang changing code in running system

Thomas Arts

Erlangchanging code in running system

P0

loop(F) ->

receive

{change,G} ->

loop(G);

{exec,Pid,Arg} ->

Pid!F(Arg),

loop(F)

end;

loop(F) ->

receive

{exec,Pid,Arg} ->

Pid!F(Arg),

loop(F)

end;

P1

P0 ! {exec,self(),15},

N = receive

Answer ->

Answer

end,

N = F(15),


Erlang fault tolerance

Thomas Arts

Erlangfault tolerance

Processes can be linked to each other:

PidA

PidB

  • Links are created by using either:

  • link(Pid), or

  • spawn_link(Module, Function, Args)

  • Links are bi-directional.

  • They can be removed using unlink(Pid).


Erlang fault tolerance1

Thomas Arts

Erlangfault tolerance

When a process terminates, an exit signal is sent to all processes the process is linked to:

PidA

PidA

PidB

A process can terminate normally, due to a run-time error, or when explicitly ordered to do so.


Erlang fault tolerance2

Thomas Arts

Erlangfault tolerance

If a process terminates abnormally, the emitted exit signal will (by default) cause the recipient to terminate:

The termination reason in the transmitted exit signals will be the same as in the received one (the exit signal is propagated).

PidA

PidB

PidB

PidC

PidD

PidD

PidE


Erlang fault tolerance3

error

error

PidA

PidB

PidC

exit(error)

Thomas Arts

Erlangfault tolerance

A process can terminate itself using exit(Reason). This will cause exit signals with termination reason Reason to be emitted.


Erlang fault tolerance4

error

PidA

PidB

exit(PidB, error)

Thomas Arts

Erlangfault tolerance

A process can explicitly send an exit signal to another process using exit(Pid, Reason):

  • The calling process is not affected.

  • The processes do not need to be linked.


Erlang fault tolerance5

Thomas Arts

Erlangfault tolerance

A process can trap exit signals using:

process_flag(trap_exit, true).

Incoming exit signals will be transformed into messages of the form: {'EXIT', Pid, Reason}

These exit messages are delivered to the process mailbox in the normal way.


Erlang fault tolerance6

Thomas Arts

Erlangfault tolerance

PidC terminates with reason error, PidD is trapping exits:

PidB terminates, propagating the exit signal. PidD will receive an exit message

{'EXIT', PidC, error}.

error

error

PidA

PidA

PidB

PidB

PidC

PidD

PidE


Erlang fault tolerance7

Thomas Arts

Erlangfault tolerance

Robust systems can be made by layering.


Erlang fault tolerance8

Thomas Arts

Erlangfault tolerance

supervision trees and restart strategies

P4

P3

P1

P2

P3

P1

P5

P6

P4

P2

P3

P1


Erlang component based development

Thomas Arts

Erlangcomponent based development

  • recognize frequently occurring

  • patterns and transfer them into

  • standard components.

  • faster development

  • uniform code (maintenance)

  • less errors


Erlang

Thomas Arts

Erlang

Developed with the application of the language constantly in mind

Practical usability more priority than purity


Erlang is used

Thomas Arts

Erlang is used

AXD 301, scalable ATM switch (up to 160 GB/sec)

  • four years work

  • more than 500,000 lines of Erlang

  • several hundreds of programmers


Erlang is used1

Thomas Arts

Erlang is used

GPRS: next generation GSM network.

  • Eigth times faster internet access in mobile phones

  • always connected

  • development in three countries, hundreds of people


Erlang is used2

Thomas Arts

Erlang is used

The success of the language in industry is due to

Language features

Support and libraries

Design patterns / architectures


Erlang is used3

Thomas Arts

over

300 downloads

per month

Erlang is used

Become a user yourself!

passive: make a phonecall

active: download Erlang for free

www.erlang.org


Erlang1

Thomas Arts

Erlang

The functional language

for industry


  • Login