scala actors erlang
DESCRIPTION
TRANSCRIPT
Scala Actors from an Erlang perspective
Who am I
• Reidar Sollid (Reidar is an ancient Viking name, and means warrior and protector of the home)
• I am now a Consutlant at Bouvet• My background is from R&D and Telecom
transport networks from Nera Networks( now Ceragon) and Ericsson.
Motivation
• Most Scala devs comes from Java• Hacking Scala with a Java mindset limits
your use of Scala• Erlang is a pure actor base language• Getting the mindset from Erlang into
Scala broadens the horizon• Java + Erlang = Scala
The concept of forever
• This is a loaner from Joe Armstrong, he is a lot funnier than I am but I guess you get the point
• I hope he don’t mind
10 x the size of the
The fly
Nine nines 99.999999999
• Standard for Telecom equipment is five nines 99.999 (5.2 minutes downtime/year)
• The Ericsson AXD301 has 2 million lines of Erlang code and nine nines
Shared memory
Concurrency and shared memory
Erlang
• The world is concurrent• Things in the world don't share data• Things communicate with messages • Things fail – Joe Armstrong
What is Erlang
• Created and maintained by Ericsson (now open source)
• Functional, single assignment, strict evaluation, dynamic typing
• Actor model, concurrent oriented, fault tolerant, soft-real-time
• Light weight processes that communicate using message passing (an Erlang process is more light weight than a Java thread)
• Erlang started life as a modified prolog• Erlang shell, escript and compiled *.beam
bytecode
Variables and pattern matching
• Variables starts with capital letter or underscore
• Variables are immutable, Erlang does not have mutable variables
• They are variables because they can be assigned or not assigned
• Erlang variables are the same as val variables in Scala
Erlang variable demo
Scala variable demo
Atoms and tuples
• An atom is a global constant starting with lower case
• Scala has an equivalent called Symbol • A tuple is an ordered set of elements• Erlang doesn’t have classes so we use tuples (see
also records)
The spawn keyword
• spawn(Fun) -> pid()• Spawns out a new process and returns
the Process Identifier <0.13.1>• Normally we assign the PID to a variable• Pid = hello_world:start()
The *Real* Erlang "Hello, World!"
http://egarson.blogspot.com/2008/03/real-erlang-hello-world.html
, 10.04.2023
Pattern Matching
@tailrec
Tail recursion
Tail recursion
tail recursion as seen here is not making the memory grow because when the virtual machine sees a function calling itself in a tail position (the last expression to be evaluated in a function), it eliminates the current stack frame.
Scala react or receive
• React is the “normal” actor, lightweight process• Receive spins out a new Java thread • In the paper *
– 1.80GHz Intel Pentium M processor with 1024 MB memory, running Sun’s Java HotSpot™VM 1.5.0 under Linux 2.6.15
– Max heap size set to 512 MB– 5000 threads– 600 000 processes (1 200 000 actors)
• React uses partial functions to send the process to the heap, react has return type Nothing
• Receive runs on the stack and is heavyweight JVM threads (like Java)
*Actors That Unify Threads and Events P. Haller, M. Odersky
Area server Erlang
Area server in Scala
Remote processes Erlang
Remote actors Scala
Actor model baksiaPage 27
, 10.04.2023
Supervisors in Erlang/OTP and AKKA
Supervisor
ProcessProcess
Process
Actor model baksiaPage 28
, 10.04.2023
Supervising supervisors
Supervisor
Process Process
Process
Supervisor
Process Process
Process
Root Supervisor