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
Erlang• The world is concurrent• Things in the world dont 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
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
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