SlideShare a Scribd company logo
1 of 162
Akka:
Simpler Concurrency, Scalability &
   Fault-tolerance through Actors

                     Jonas Bonér
               Scalable Solutions
                jonas@jonasboner.com
                      twitter: @jboner
The problem

It is way too hard to build:
1. correct highly concurrent systems
2. truly scalable systems
3. fault-tolerant systems that self-heal
...using “state-of-the-art” tools
Why so difficult ?


• We have been doing things the same way for
  so long, threads, locks...
• Enterprise solutions are inflexible and
  unwieldy
• Too much code to write
Vision
Simpler
     Concurrency
     Scalability
     Fault-tolerance
Through one single unified
     Programming model
     Runtime service
Manage system overload
Scale up & Scale out
Replicate and distribute
  for fault-tolerance
Automatic & adaptive
   load balancing
Introducing




  Concurrency           Scalability Fault-tolerance

  Actors          STM          Agents        Dataflow

Distributed   Secure   Persistent   Open Source   Clustered
Architecture


          Core
          Modules
Architecture

         Add-on
         Modules




         Add-on
         Modules
Architecture



         Enterprise
         Modules
Actors
one tool in the toolbox
Akka Actors
Actor Model of
         Concurrency
• Implements Message-Passing Concurrency
• Share NOTHING
• Isolated lightweight processes
• Communicates through messages
• Asynchronous and non-blocking
• Each actor has a mailbox (message queue)
Actor Model of
 Concurrency
• Easier to reason about
• Raised abstraction level
• Easier to avoid
  –Race conditions
  –Deadlocks
  –Starvation
  –Live locks
Two different models
• Thread-based
• Event-based
  – Very lightweight (600 bytes per actor)
  – Can easily create millions on a single
   workstation (13 million on 8 G RAM)
  – Does not consume a thread
Actors
case
object
Tick

class
Counter
extends
Actor
{


private
var
counter
=
0



def
receive
=
{




case
Tick
=>







counter
+=
1






println(counter)


}
}
Create Actors
import
Actor._

val
counter
=
actorOf[Counter]



  counter is an ActorRef
Create Actors

val
actor
=
actorOf(new
MyActor(..))




   create actor with constructor arguments
Start actors

val
counter
=
actorOf[Counter]
counter.start
Start actors

val
counter
=
actorOf[Counter].start
Stop actors

val
counter
=
actorOf[Counter].start
counter.stop
preStart & postStop
     callbacks
 class
MyActor
extends
Actor
{

 

override
def
preStart
=
{
 



...
//
called
before
‘start’

 

}

 

override
def
postStop
=
{
 



...
//
called
after
‘stop’
 

}
 }
the self reference
 class
RecursiveActor
extends
Actor
{
 

private
var
counter
=
0
 

self.id
=
“service:recursive”

 

def
receive
=
{
 



case
Tick
=>

 





counter
+=
1
 





self
!
Tick
 

}
 }
Send: !

counter
!
Tick




   fire-forget
Send: !

counter.sendOneWay(Tick)



        fire-forget
Send: !!

val
result
=
(actor
!!
Message).as[String]




uses Future under the hood (with time-out)
Send: !!

val
result
=
counter.sendRequestReply(Tick)




 uses Future under the hood (with time-out)
Send: !!!
//
returns
a
future
val
future
=
actor
!!!
Message
future.await
val
result
=
future.get

...
Futures.awaitOne(List(fut1,
fut2,
...))
Futures.awaitAll(List(fut1,
fut2,
...))



       returns the Future directly
Send: !!!

val
result
=
counter.sendRequestReplyFuture(Tick)




           returns the Future directly
Reply
class
SomeActor
extends
Actor
{


def
receive
=
{




case
User(name)
=>







//
use
reply






self.reply(“Hi
”
+
name)


}
}
Reply
class
SomeActor
extends
Actor
{


def
receive
=
{




case
User(name)
=>







//
store
away
the
sender






//
to
use
later
or







//
somewhere
else






...
=
self.sender


}
}
Reply
class
SomeActor
extends
Actor
{


def
receive
=
{




case
User(name)
=>







//
store
away
the
sender
future






//
to
resolve
later
or







//
somewhere
else






...
=
self.senderFuture


}
}
Immutable messages
 //
define
the
case
class
 case
class
Register(user:
User)

 //
create
and
send
a
new
case
class
message
 actor
!
Register(user)

 //
tuples
 actor
!
(username,
password)

 //
lists
 actor
!
List(“bill”,
“bob”,
“alice”)
ActorRegistry
val
actors
=
ActorRegistry.actors
val
actors
=
ActorRegistry.actorsFor[TYPE]
val
actors
=
ActorRegistry.actorsFor(id)
val
actor
=
ActorRegistry.actorFor(uuid)
ActorRegistry.foreach(fn)
ActorRegistry.shutdownAll
A Case Study
Thatcham Integrated Methods

The problem:

 • provide realtime repair information for over 21,000 vehicles
 • provide accurate, safe repair details on more than 7,000 methods
 • each document is tailored specifically for an individual repair /
     replacement job

 • too many permutations for caching (at least for phase 1)
 • a relatively long running process involving IO
 • a global solution (UK, Europe, USA, Asia, Australasia)
 • zero downtime allowed
A Case Study
The current simple solution:
 • Akka actors to the rescue
 • in this case delegation is literally the art of good workload
    management
 • two actors sharing the work for each document type
 • two servers cover a large percentage of the UK penetration
 • simple load balancing
A Case Study


         Simple
         Architecture
A Case Study
Conclusion:
We originally had a homegrown solution extending Scala actors.
What do Akka actors give us ?
 • the fastest actors implementation
 • where is the code ?
 • great stability
 • massive integration potential
 • zero downtime
 • 50-60 documents per minute with our largest document size
A Case Study

What next ?
 • intelligent adaptive load balancing with Akka
 • enterprise monitoring
 • Akka in EC2 ?
 • caching with intelligent swarms of actors in a cluster
TypedActor
Typed Actors
class
CounterImpl



extends
TypedActor
with
Counter
{



private
var
counter
=
0;



def
count
=
{




counter
+=
1




println(counter)


}
}
Create Typed Actor

val
counter
=
TypedActor.newInstance(




classOf[Counter],
classof[CounterImpl])
Send message

  counter.count




     fire-forget
Request Reply

    val
hits
=
counter.getNrOfHits




uses Future under the hood (with time-out)
the context reference
class
PingImpl
extends
TypedActor



with
Ping
{


def
hit(count:
Int)
=
{




val
pong
=
getContext
    

.getSender.asInstanceOf[Pong]




pong.hit(count
+=
1)


}
}
Actors: config
 akka
{
 

version
=
"0.10"
 

time‐unit
=
"seconds"
 

actor
{
 



timeout
=
5
 



throughput
=
5
 

}
 }
Scalability
Benchmark
Simple Trading system

• Synchronous Scala version
• Scala Library Actors 2.8.0
  •Fire-forget
  •Request-reply (Futures)
• Akka
  • Fire-forget (Hawt dispatcher)
  • Fire-forget (default dispatcher)
  • Request-reply
Run it yourself:
http://github.com/patriknw/akka-sample-trading
Agents
yet another tool in the toolbox
Agents
val
agent
=
Agent(5)

//
send
function
asynchronously
agent
send
(_
+
1)


val
result
=
agent()
//
deref
...
//
use
result

agent.close


     Cooperates with STM
Akka Dispatchers
Dispatchers
•              Executor-based Dispatcher
• Executor-based Work-stealing Dispatcher
•                       Hawt Dispatcher
•                Thread-based Dispatcher
Dispatchers
object
Dispatchers
{


object
globalHawtDispatcher
extends
HawtDispatcher


...




def
newExecutorBasedEventDrivenDispatcher(name:
String)



def
newExecutorBasedEventDrivenWorkStealingDispatcher(name:
String)



def
newHawtDispatcher(aggregate:
Boolean)



...
}
Set dispatcher
class
MyActor
extends
Actor
{


self.dispatcher
=
Dispatchers




.newThreadBasedDispatcher(self)





...
}

actor.dispatcher
=
dispatcher
//
before
started
Let it crash
fault-tolerance
Influenced by

Erlang
9   nines
OneForOne
fault handling strategy
OneForOne
fault handling strategy
OneForOne
fault handling strategy
OneForOne
fault handling strategy
OneForOne
fault handling strategy
OneForOne
fault handling strategy
OneForOne
fault handling strategy
OneForOne
fault handling strategy
OneForOne
fault handling strategy
AllForOne
fault handling strategy
AllForOne
fault handling strategy
AllForOne
fault handling strategy
AllForOne
fault handling strategy
AllForOne
fault handling strategy
Supervisor hierarchies
Supervisor hierarchies
Supervisor hierarchies
Supervisor hierarchies
Supervisor hierarchies
Supervisor hierarchies
Fault handlers
 AllForOneStrategy(
 

List(classOf[Throwable]),
 

maxNrOfRetries,

 

withinTimeRange)

 OneForOneStrategy(
 

List(classOf[Throwable]),
 

maxNrOfRetries,

 

withinTimeRange)
Fault handlers
AllForOneStrategy(


List(classOf[ServiceException],








classOf[PersistenceException]),


5,
5000)
Linking
link(actor)

unlink(actor)


startLink(actor)
spawnLink[MyActor]
Supervision
class
Supervisor
extends
Actor
{


faultHandler
=
OneForOneStrategy(




List(classOf[Throwable])





5,
5000))



def
receive
=
{




case
Register(actor)
=>







link(actor)


}
}
Manage failure
class
FaultTolerantService
extends
Actor
{


...


override
def
preRestart(reason:
Throwable)
=
{




...
//
clean
up
before
restart


}


override
def
postRestart(reason:
Throwable)
=
{




...
//
init
after
restart


}
}
Remote Actors
Remote Server
//
use
host
&
port
in
config
RemoteNode.start

RemoteNode.start("localhost",
9999)




Scalable implementation based on
     NIO (Netty) & Protobuf
Two types of
remote actors
   Client managed
   Server managed
Client-managed
 supervision works across nodes

//
methods
in
Actor
class

spawnRemote[MyActor](host,
port)


spawnLinkRemote[MyActor](host,
port)

startLinkRemote(actor,
host,
port)
Client-managed
      moves actor to server
  client manages through proxy

val
actorProxy
=
spawnLinkRemote[MyActor](


“darkstar”,



9999)

actorProxy
!
message
Server-managed
register and manage actor on server
  client gets “dumb” proxy handle

RemoteNode.register(“service:id”,
actorOf[MyService])




                  server part
Server-managed
val
handle
=
RemoteClient.actorFor(


“service:id”,



“darkstar”,



9999)

handle
!
message




         client part
Cluster Membership
 Cluster.relayMessage(
 

classOf[TypeOfActor],
message)

 for
(endpoint
<‐
Cluster)

 

spawnRemote[TypeOfActor](


 













endpoint.host,

 













endpoint.port)
A Case Study
Eventually everything - auditing and logging

The problem:
• log/audit many operations over a diverse architecture
• ensure we get massive reuse across diverse projects
   internal and external
• promote store agnosticism
• make the log repository searchable
• provide an API for reporting
A Case Study
The current simple solution:
• Akka remote (server-managed) actors to the rescue
• in this case delegation across the network is literally the
   art of good workload management
• ‘free your domain’ by defining your domain ‘verbs’ using
   simple case classes
• further ‘free your domain’ with a clear divide between a
   simple service, and asynchronous pluggable repositories
A Case Study

       Minimally intrusive


       No lethal injections of
       persistence concerns


       Pluggable repositories
A Case Study
Conclusion:
What do Akka remote actors give us ?
•   simple distribution of operations over the network
•   decouple concerns to improve our focus on the service/API
•   great stability
•   no boilerplate
STM
yet another tool in the toolbox
What is STM?

     80
STM: overview
• See the memory (heap and stack) as a
 transactional dataset
• Similar to a database
 • begin
 • commit
 • abort/rollback
• Transactions are retried automatically
 upon collision
• Rolls back the memory on abort
Managed References
  • Separates Identity from Value
     - Values are immutable
     - Identity (Ref) holds Values
  • Change is a function
  • Compare-and-swap (CAS)
  • Abstraction of time
  • Must be used within a transaction
atomic
import
se.scalablesolutions.akka.stm.local._


atomic
{


...



atomic
{




...
//
transactions
compose!!!


}
}
Managed References
   Typical OO - Direct
Typical OO: direct Mutable Objects objects
    references to access to mutable
                                    foo

                               :a           ?
                               :b           ?
                               :c          42
                               :d           ?
                               :e           6



    Clojure - and value
    • Unifies identity Indirect references
Managed Reference: separates Identity & Value
    • Anything can change at any time
    • Consistency is a user problem Objects
         to Immutable
     •   Encapsulation doesn’t solve concurrency:a
                       foo                                "fred"
         problems                               :b       "ethel"
                                    @foo            :c      42
                                                    :d      17
                                                    :e       6



                       Copyright Rich Hickey 2009
Managed References
  • Separates Identity from Value
     - Values are immutable
     - Identity (Ref) holds Values
  • Change is a function
  • Compare-and-swap (CAS)
  • Abstraction of time
  • Must be used within a transaction
Managed References
import
se.scalablesolutions.akka.stm.local._


//
giving
an
initial
value
val
ref
=
Ref(0)


//
specifying
a
type
but
no
initial
value
val
ref
=
Ref[Int]
Managed References
      val
ref
=
Ref(0)
      

      atomic
{
      

ref.set(5)
      }
      //
‐>
0
      

      atomic
{
      

ref.get
      }
      //
‐>
5
Managed References
    val
ref
=
Ref(0)
    

    atomic
{
    

ref
alter
(_
+
5)
    }
    //
‐>
5
    

    val
inc
=
(i:
Int)
=>
i
+
1
    

    atomic
{
    

ref
alter
inc
    }
    //
‐>
6
Managed References
     val
ref
=
Ref(1)

     val
anotherRef
=
Ref(3)
     

     atomic
{
     

for
{
     



value1
<‐
ref
     



value2
<‐
anotherRef
     

}
yield
(value1
+
value2)
     }
     //
‐>
Ref(4)
     

     val
emptyRef
=
Ref[Int]
     

     atomic
{
     

for
{
     



value1
<‐
ref
     



value2
<‐
emptyRef
     

}
yield
(value1
+
value2)
     }
     //
‐>
Ref[Int]
Transactional
      datastructures
//
using
initial
values
val
map



=
TransactionalMap("bill"
‐>
User("bill"))
val
vector
=
TransactionalVector(Address("somewhere"))


//
specifying
types
val
map



=
TransactionalMap[String,
User]
val
vector
=
TransactionalVector[Address]
life-cycle listeners
atomic
{


deferred
{




//
executes
when
transaction
commits


}


compensating
{




//
executes
when
transaction
aborts


}
}
Actors + STM =
  Transactors
Transactors
class
UserRegistry
extends
Transactor
{





private
lazy
val
storage
=





TransactionalMap[String,
User]()



def
receive
=
{




case
NewUser(user)
=>






storage
+
(user.name
‐>
user)




...



}
}
Transactors
Transactors
Start transaction
Transactors
Start transaction


                    Send message
Transactors
Start transaction


                    Send message
Transactors
Start transaction


                    Send message




          Update state
       within transaction
Transactors
Start transaction


                    Send message




          Update state
       within transaction
Transactors
Start transaction


                    Send message




          Update state
       within transaction
Transactors
Start transaction


                    Send message




          Update state
       within transaction
Transactors
Start transaction


                    Send message




          Update state
       within transaction
Transactors
Start transaction


                    Send message




          Update state
       within transaction
Transactors
Start transaction


                    Send message




          Update state
       within transaction




                                   Transaction
                                      fails
Transactors
Start transaction


                    Send message




          Update state
       within transaction




                                   Transaction
                                      fails
Transactors
Transactors
Transactors
Transactors
Transactors
Transactors
Transactors
  Transaction
 automatically
    retried
blocking transactions
class
Transferer
extends
Actor
{


implicit
val
txFactory
=
TransactionFactory(




blockingAllowed
=
true,
trackReads
=
true,
timeout
=
60
seconds)




def
receive
=
{




case
Transfer(from,
to,
amount)
=>






atomic
{








if
(from.get
<
amount)
{










log.info("not
enough
money
‐
retrying")










retry








}








log.info("transferring")








from
alter
(_
‐
amount)








to
alter
(_
+
amount)






}


}
}
either-orElse


atomic
{




either
{






if
(left.get
<
amount)
{








log.info("not
enough
on
left
‐
retrying")








retry






}






log.info("going
left")




}
orElse
{






if
(right.get
<
amount)
{








log.info("not
enough
on
right
‐
retrying")








retry






}






log.info("going
right")




}


}
STM: config
  akka
{
  

stm
{






max‐retries
=
1000






timeout
=
10






write‐skew
=
true






blocking‐allowed
=
false






interruptible
=
false






speculative
=
true






quick‐release
=
true






propagation
=
requires






trace‐level
=
none






hooks
=
true






jta‐aware
=
off
  

}
  }
Modules
Akka Persistence
STM gives us
Atomic
Consistent
Isolated
Persistence module turns
        STM into
 Atomic
 Consistent
 Isolated
 Durable
Akka Persistence API
  • Cassandra
  • HBase
  • Voldemort
  • Redis
  • MongoDB
  • CouchDB
  • Any JTA-compliant
   JDBC driver or ORM
Akka Persistence API
 //
transactional
Cassandra‐backed
Map

 val
map
=
CassandraStorage.newMap

 //
transactional
Redis‐backed
Vector

 val
vector
=
RedisStorage.newVector

 //
transactional
Mongo‐backed
Ref
 val
ref
=
MongoStorage.newRef
For Redis only (so far)
val
queue:
PersistentQueue[ElementType]
=





RedisStorage.newQueue

val
set:
PersistentSortedSet[ElementType]
=


RedisStorage.newSortedSet
Akka Spring
Spring integration
 <beans>
 

<akka:typed‐actor

 



id="myActiveObject"

 



interface="com.biz.MyPOJO"

 



implementation="com.biz.MyPOJO"

 



transactional="true"

 



timeout="1000"
/>
 

...
 </beans>
Spring integration
<akka:supervision
id="my‐supervisor">



<akka:restart‐strategy
failover="AllForOne"


























retries="3"


























timerange="1000">




<akka:trap‐exits>

   

<akka:trap‐exit>java.io.IOException</akka:trap‐exit>




</akka:trap‐exits>


</akka:restart‐strategy>



<akka:typed‐actors>




<akka:typed‐actor
interface="com.biz.MyPOJO"























implementation="com.biz.MyPOJOImpl"























lifecycle="permanent"























timeout="1000">




</akka:typed‐actor>


</akka:typed‐actors>
</akka:supervision>
Akka Camel
Camel: consumer
class
MyConsumer
extends
Actor
with
Consumer
{


def
endpointUri
=
"file:data/input"




def
receive
=
{




case
msg:
Message
=>







log.info("received
%s"
format






msg.bodyAs(classOf[String]))


}
}
Camel: consumer
class
MyConsumer
extends
Actor
with
Consumer
{


def
endpointUri
=





"jetty:http://0.0.0.0:8877/camel/test"




def
receive
=
{




case
msg:
Message
=>







reply("Hello
%s"
format













msg.bodyAs(classOf[String]))


}
}
Camel: producer
 class
CometProducer

 

extends
Actor
with
Producer
{
 


 

def
endpointUri
=

 



"cometd://localhost:8111/test"
 }
Camel: producer
val
producer
=
actorOf[CometProducer].start

val
time
=
"Current
time:
"
+
new
Date
producer
!
time
Akka HotSwap
HotSwap
actor
!
HotSwap({


//
new
body


case
Ping
=>





...



case
Pong
=>





...


})
HotSwap
self.become({


//
new
body


case
Ping
=>





...



case
Pong
=>





...


})
Akka
  Concurrent
Problem Solving
Simple Use Cases
• Use different actors to compose computations
  and have them calculated in parallel
• Analyse sequential versus non sequential
  operations
• For simple isolated tasks start up more actors to
  reduce your message box size
• Wherever possible share nothing, then you have
  no coupling or dependencies you can just scale
  out to infinity
Dining Philosophers

• Demonstrates many of the problems with
  concurrency
• Deadlock, livelock, and ironically starvation
• Akka to the rescue... use ‘become’
• A simple implementation of an FSM
Dining Hakkers
sealed
trait
DiningHakkerMessage
case
class
Busy(chopstick:
ActorRef)



extends
DiningHakkerMessage
case
class
Put(hakker:
ActorRef)



extends
DiningHakkerMessage
case
class
Take(hakker:
ActorRef)



extends
DiningHakkerMessage
case
class
Taken(chopstick:
ActorRef)



extends
DiningHakkerMessage
object
Eat
extends
DiningHakkerMessage
object
Think
extends
DiningHakkerMessage
Dining Hakkers
class
Hakker(name:
String,
left:
ActorRef,
right:
ActorRef)



extends
Actor
{


self.id
=
name



def
thinking:
Receive
=
{




case
Eat
=>






become(hungry)






left
!
Take(self)






right
!
Take(self)


}



def
hungry:
Receive
=
{




case
Taken(`left`)
=>






become(waiting_for(right,left))




case
Taken(`right`)
=>






become(waiting_for(left,right))




case
Busy(chopstick)
=>






become(denied_a_chopstick)


}
...
Top Secret Project
• Whisperings of a top secret mission
  critical project
• What if we could figure out how to brew
  the perfect beer ?
• Use a genetic algorithm to evolve the
  perfect recipe ?
• use Akka for parallel computation ?
Akka Kernel
Start Kernel

java
‐jar
akka‐1.0‐SNAPSHOT.jar



‐Dakka.config=<path>/akka.conf
How to run it?
  Deploy as dependency JAR in
WEB-INF/lib etc.
  Run as stand-alone microkernel
  OSGi-enabled; drop in any
OSGi container (Spring DM
server, Karaf etc.)
...and much much more
        PubSub
  REST
              Security
        FSM
  Comet         Web
      OSGi   Guice
Learn more
http://akkasource.org
EOF

More Related Content

What's hot

Paws - Perl AWS SDK Update - November 2015
Paws - Perl AWS SDK Update - November 2015Paws - Perl AWS SDK Update - November 2015
Paws - Perl AWS SDK Update - November 2015Jose Luis Martínez
 
Akka Actor presentation
Akka Actor presentationAkka Actor presentation
Akka Actor presentationGene Chang
 
Multi-threading in the modern era: Vertx Akka and Quasar
Multi-threading in the modern era: Vertx Akka and QuasarMulti-threading in the modern era: Vertx Akka and Quasar
Multi-threading in the modern era: Vertx Akka and QuasarGal Marder
 
Scala, Akka, and Play: An Introduction on Heroku
Scala, Akka, and Play: An Introduction on HerokuScala, Akka, and Play: An Introduction on Heroku
Scala, Akka, and Play: An Introduction on HerokuHavoc Pennington
 
Building Reactive Systems with Akka (in Java 8 or Scala)
Building Reactive Systems with Akka (in Java 8 or Scala)Building Reactive Systems with Akka (in Java 8 or Scala)
Building Reactive Systems with Akka (in Java 8 or Scala)Jonas Bonér
 
Build Cloud Applications with Akka and Heroku
Build Cloud Applications with Akka and HerokuBuild Cloud Applications with Akka and Heroku
Build Cloud Applications with Akka and HerokuSalesforce Developers
 
Scaling software with akka
Scaling software with akkaScaling software with akka
Scaling software with akkascalaconfjp
 
Building reactive distributed systems with Akka
Building reactive distributed systems with Akka Building reactive distributed systems with Akka
Building reactive distributed systems with Akka Johan Andrén
 
Developing distributed applications with Akka and Akka Cluster
Developing distributed applications with Akka and Akka ClusterDeveloping distributed applications with Akka and Akka Cluster
Developing distributed applications with Akka and Akka ClusterKonstantin Tsykulenko
 
Implementing Micro Services Tasks (service discovery, load balancing etc.) - ...
Implementing Micro Services Tasks (service discovery, load balancing etc.) - ...Implementing Micro Services Tasks (service discovery, load balancing etc.) - ...
Implementing Micro Services Tasks (service discovery, load balancing etc.) - ...Gal Marder
 
Java Serialization Facts and Fallacies
Java Serialization Facts and FallaciesJava Serialization Facts and Fallacies
Java Serialization Facts and FallaciesRoman Elizarov
 
iOS Multithreading
iOS MultithreadingiOS Multithreading
iOS MultithreadingRicha Jain
 
Luc Dekens - Italian vmug usercon
Luc Dekens - Italian vmug usercon Luc Dekens - Italian vmug usercon
Luc Dekens - Italian vmug usercon VMUG IT
 
Introduction of failsafe
Introduction of failsafeIntroduction of failsafe
Introduction of failsafeSunghyouk Bae
 
Introduction to Scala
Introduction to ScalaIntroduction to Scala
Introduction to ScalaSaleem Ansari
 
Multithreading and Parallelism on iOS [MobOS 2013]
 Multithreading and Parallelism on iOS [MobOS 2013] Multithreading and Parallelism on iOS [MobOS 2013]
Multithreading and Parallelism on iOS [MobOS 2013]Kuba Břečka
 
Multithreading on iOS
Multithreading on iOSMultithreading on iOS
Multithreading on iOSMake School
 
"Walk in a distributed systems park with Orleans" Евгений Бобров
"Walk in a distributed systems park with Orleans" Евгений Бобров"Walk in a distributed systems park with Orleans" Евгений Бобров
"Walk in a distributed systems park with Orleans" Евгений БобровFwdays
 

What's hot (20)

Paws - A Perl AWS SDK
Paws - A Perl AWS SDKPaws - A Perl AWS SDK
Paws - A Perl AWS SDK
 
Paws - Perl AWS SDK Update - November 2015
Paws - Perl AWS SDK Update - November 2015Paws - Perl AWS SDK Update - November 2015
Paws - Perl AWS SDK Update - November 2015
 
Akka Actor presentation
Akka Actor presentationAkka Actor presentation
Akka Actor presentation
 
Multi-threading in the modern era: Vertx Akka and Quasar
Multi-threading in the modern era: Vertx Akka and QuasarMulti-threading in the modern era: Vertx Akka and Quasar
Multi-threading in the modern era: Vertx Akka and Quasar
 
Scala, Akka, and Play: An Introduction on Heroku
Scala, Akka, and Play: An Introduction on HerokuScala, Akka, and Play: An Introduction on Heroku
Scala, Akka, and Play: An Introduction on Heroku
 
Building Reactive Systems with Akka (in Java 8 or Scala)
Building Reactive Systems with Akka (in Java 8 or Scala)Building Reactive Systems with Akka (in Java 8 or Scala)
Building Reactive Systems with Akka (in Java 8 or Scala)
 
Build Cloud Applications with Akka and Heroku
Build Cloud Applications with Akka and HerokuBuild Cloud Applications with Akka and Heroku
Build Cloud Applications with Akka and Heroku
 
Scaling software with akka
Scaling software with akkaScaling software with akka
Scaling software with akka
 
Javasession6
Javasession6Javasession6
Javasession6
 
Building reactive distributed systems with Akka
Building reactive distributed systems with Akka Building reactive distributed systems with Akka
Building reactive distributed systems with Akka
 
Developing distributed applications with Akka and Akka Cluster
Developing distributed applications with Akka and Akka ClusterDeveloping distributed applications with Akka and Akka Cluster
Developing distributed applications with Akka and Akka Cluster
 
Implementing Micro Services Tasks (service discovery, load balancing etc.) - ...
Implementing Micro Services Tasks (service discovery, load balancing etc.) - ...Implementing Micro Services Tasks (service discovery, load balancing etc.) - ...
Implementing Micro Services Tasks (service discovery, load balancing etc.) - ...
 
Java Serialization Facts and Fallacies
Java Serialization Facts and FallaciesJava Serialization Facts and Fallacies
Java Serialization Facts and Fallacies
 
iOS Multithreading
iOS MultithreadingiOS Multithreading
iOS Multithreading
 
Luc Dekens - Italian vmug usercon
Luc Dekens - Italian vmug usercon Luc Dekens - Italian vmug usercon
Luc Dekens - Italian vmug usercon
 
Introduction of failsafe
Introduction of failsafeIntroduction of failsafe
Introduction of failsafe
 
Introduction to Scala
Introduction to ScalaIntroduction to Scala
Introduction to Scala
 
Multithreading and Parallelism on iOS [MobOS 2013]
 Multithreading and Parallelism on iOS [MobOS 2013] Multithreading and Parallelism on iOS [MobOS 2013]
Multithreading and Parallelism on iOS [MobOS 2013]
 
Multithreading on iOS
Multithreading on iOSMultithreading on iOS
Multithreading on iOS
 
"Walk in a distributed systems park with Orleans" Евгений Бобров
"Walk in a distributed systems park with Orleans" Евгений Бобров"Walk in a distributed systems park with Orleans" Евгений Бобров
"Walk in a distributed systems park with Orleans" Евгений Бобров
 

Similar to Akka london scala_user_group

Introduction to Actor Model and Akka
Introduction to Actor Model and AkkaIntroduction to Actor Model and Akka
Introduction to Actor Model and AkkaYung-Lin Ho
 
Akka lsug skills matter
Akka lsug skills matterAkka lsug skills matter
Akka lsug skills matterSkills Matter
 
Scaling Web Apps with Akka
Scaling Web Apps with AkkaScaling Web Apps with Akka
Scaling Web Apps with AkkaMaciej Matyjas
 
Reactive programming with examples
Reactive programming with examplesReactive programming with examples
Reactive programming with examplesPeter Lawrey
 
Networks and types - the future of Akka
Networks and types - the future of AkkaNetworks and types - the future of Akka
Networks and types - the future of AkkaJohan Andrén
 
Reactive Web-Applications @ LambdaDays
Reactive Web-Applications @ LambdaDaysReactive Web-Applications @ LambdaDays
Reactive Web-Applications @ LambdaDaysManuel Bernhardt
 
Safe Wrappers and Sane Policies for Self Protecting JavaScript
Safe Wrappers and Sane Policies for Self Protecting JavaScript�Safe Wrappers and Sane Policies for Self Protecting JavaScript�
Safe Wrappers and Sane Policies for Self Protecting JavaScriptPhú Phùng
 
Akka Microservices Architecture And Design
Akka Microservices Architecture And DesignAkka Microservices Architecture And Design
Akka Microservices Architecture And DesignYaroslav Tkachenko
 
Building Stateful Microservices With Akka
Building Stateful Microservices With AkkaBuilding Stateful Microservices With Akka
Building Stateful Microservices With AkkaYaroslav Tkachenko
 
Voxxed Days Vienna - The Why and How of Reactive Web-Applications on the JVM
Voxxed Days Vienna - The Why and How of Reactive Web-Applications on the JVMVoxxed Days Vienna - The Why and How of Reactive Web-Applications on the JVM
Voxxed Days Vienna - The Why and How of Reactive Web-Applications on the JVMManuel Bernhardt
 
Typesafe stack - Scala, Akka and Play
Typesafe stack - Scala, Akka and PlayTypesafe stack - Scala, Akka and Play
Typesafe stack - Scala, Akka and PlayLuka Zakrajšek
 
DjangoCon 2010 Scaling Disqus
DjangoCon 2010 Scaling DisqusDjangoCon 2010 Scaling Disqus
DjangoCon 2010 Scaling Disquszeeg
 
Reactive Programming in .Net - actorbased computing with Akka.Net
Reactive Programming in .Net - actorbased computing with Akka.NetReactive Programming in .Net - actorbased computing with Akka.Net
Reactive Programming in .Net - actorbased computing with Akka.NetSören Stelzer
 
Activator and Reactive at Play NYC meetup
Activator and Reactive at Play NYC meetupActivator and Reactive at Play NYC meetup
Activator and Reactive at Play NYC meetupHenrik Engström
 
Testing akka-actors
Testing akka-actorsTesting akka-actors
Testing akka-actorsKnoldus Inc.
 
Rethinking the debugger
Rethinking the debuggerRethinking the debugger
Rethinking the debuggerIulian Dragos
 

Similar to Akka london scala_user_group (20)

Scale up your thinking
Scale up your thinkingScale up your thinking
Scale up your thinking
 
Introduction to Actor Model and Akka
Introduction to Actor Model and AkkaIntroduction to Actor Model and Akka
Introduction to Actor Model and Akka
 
Akka Testkit Patterns
Akka Testkit PatternsAkka Testkit Patterns
Akka Testkit Patterns
 
Akka lsug skills matter
Akka lsug skills matterAkka lsug skills matter
Akka lsug skills matter
 
Scaling Web Apps with Akka
Scaling Web Apps with AkkaScaling Web Apps with Akka
Scaling Web Apps with Akka
 
Reactive programming with examples
Reactive programming with examplesReactive programming with examples
Reactive programming with examples
 
Networks and types - the future of Akka
Networks and types - the future of AkkaNetworks and types - the future of Akka
Networks and types - the future of Akka
 
Reactive Web-Applications @ LambdaDays
Reactive Web-Applications @ LambdaDaysReactive Web-Applications @ LambdaDays
Reactive Web-Applications @ LambdaDays
 
Safe Wrappers and Sane Policies for Self Protecting JavaScript
Safe Wrappers and Sane Policies for Self Protecting JavaScript�Safe Wrappers and Sane Policies for Self Protecting JavaScript�
Safe Wrappers and Sane Policies for Self Protecting JavaScript
 
Akka Microservices Architecture And Design
Akka Microservices Architecture And DesignAkka Microservices Architecture And Design
Akka Microservices Architecture And Design
 
Akka (BeJUG)
Akka (BeJUG)Akka (BeJUG)
Akka (BeJUG)
 
Building Stateful Microservices With Akka
Building Stateful Microservices With AkkaBuilding Stateful Microservices With Akka
Building Stateful Microservices With Akka
 
Voxxed Days Vienna - The Why and How of Reactive Web-Applications on the JVM
Voxxed Days Vienna - The Why and How of Reactive Web-Applications on the JVMVoxxed Days Vienna - The Why and How of Reactive Web-Applications on the JVM
Voxxed Days Vienna - The Why and How of Reactive Web-Applications on the JVM
 
Typesafe stack - Scala, Akka and Play
Typesafe stack - Scala, Akka and PlayTypesafe stack - Scala, Akka and Play
Typesafe stack - Scala, Akka and Play
 
DjangoCon 2010 Scaling Disqus
DjangoCon 2010 Scaling DisqusDjangoCon 2010 Scaling Disqus
DjangoCon 2010 Scaling Disqus
 
Reactive Programming in .Net - actorbased computing with Akka.Net
Reactive Programming in .Net - actorbased computing with Akka.NetReactive Programming in .Net - actorbased computing with Akka.Net
Reactive Programming in .Net - actorbased computing with Akka.Net
 
Akka (1)
Akka (1)Akka (1)
Akka (1)
 
Activator and Reactive at Play NYC meetup
Activator and Reactive at Play NYC meetupActivator and Reactive at Play NYC meetup
Activator and Reactive at Play NYC meetup
 
Testing akka-actors
Testing akka-actorsTesting akka-actors
Testing akka-actors
 
Rethinking the debugger
Rethinking the debuggerRethinking the debugger
Rethinking the debugger
 

More from Skills Matter

5 things cucumber is bad at by Richard Lawrence
5 things cucumber is bad at by Richard Lawrence5 things cucumber is bad at by Richard Lawrence
5 things cucumber is bad at by Richard LawrenceSkills Matter
 
Patterns for slick database applications
Patterns for slick database applicationsPatterns for slick database applications
Patterns for slick database applicationsSkills Matter
 
Scala e xchange 2013 haoyi li on metascala a tiny diy jvm
Scala e xchange 2013 haoyi li on metascala a tiny diy jvmScala e xchange 2013 haoyi li on metascala a tiny diy jvm
Scala e xchange 2013 haoyi li on metascala a tiny diy jvmSkills Matter
 
Oscar reiken jr on our success at manheim
Oscar reiken jr on our success at manheimOscar reiken jr on our success at manheim
Oscar reiken jr on our success at manheimSkills Matter
 
Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...
Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...
Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...Skills Matter
 
Cukeup nyc ian dees on elixir, erlang, and cucumberl
Cukeup nyc ian dees on elixir, erlang, and cucumberlCukeup nyc ian dees on elixir, erlang, and cucumberl
Cukeup nyc ian dees on elixir, erlang, and cucumberlSkills Matter
 
Cukeup nyc peter bell on getting started with cucumber.js
Cukeup nyc peter bell on getting started with cucumber.jsCukeup nyc peter bell on getting started with cucumber.js
Cukeup nyc peter bell on getting started with cucumber.jsSkills Matter
 
Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...
Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...
Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...Skills Matter
 
Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...
Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...
Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...Skills Matter
 
Progressive f# tutorials nyc don syme on keynote f# in the open source world
Progressive f# tutorials nyc don syme on keynote f# in the open source worldProgressive f# tutorials nyc don syme on keynote f# in the open source world
Progressive f# tutorials nyc don syme on keynote f# in the open source worldSkills Matter
 
Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...
Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...
Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...Skills Matter
 
Dmitry mozorov on code quotations code as-data for f#
Dmitry mozorov on code quotations code as-data for f#Dmitry mozorov on code quotations code as-data for f#
Dmitry mozorov on code quotations code as-data for f#Skills Matter
 
A poet's guide_to_acceptance_testing
A poet's guide_to_acceptance_testingA poet's guide_to_acceptance_testing
A poet's guide_to_acceptance_testingSkills Matter
 
Russ miles-cloudfoundry-deep-dive
Russ miles-cloudfoundry-deep-diveRuss miles-cloudfoundry-deep-dive
Russ miles-cloudfoundry-deep-diveSkills Matter
 
Simon Peyton Jones: Managing parallelism
Simon Peyton Jones: Managing parallelismSimon Peyton Jones: Managing parallelism
Simon Peyton Jones: Managing parallelismSkills Matter
 
I went to_a_communications_workshop_and_they_t
I went to_a_communications_workshop_and_they_tI went to_a_communications_workshop_and_they_t
I went to_a_communications_workshop_and_they_tSkills Matter
 

More from Skills Matter (20)

5 things cucumber is bad at by Richard Lawrence
5 things cucumber is bad at by Richard Lawrence5 things cucumber is bad at by Richard Lawrence
5 things cucumber is bad at by Richard Lawrence
 
Patterns for slick database applications
Patterns for slick database applicationsPatterns for slick database applications
Patterns for slick database applications
 
Scala e xchange 2013 haoyi li on metascala a tiny diy jvm
Scala e xchange 2013 haoyi li on metascala a tiny diy jvmScala e xchange 2013 haoyi li on metascala a tiny diy jvm
Scala e xchange 2013 haoyi li on metascala a tiny diy jvm
 
Oscar reiken jr on our success at manheim
Oscar reiken jr on our success at manheimOscar reiken jr on our success at manheim
Oscar reiken jr on our success at manheim
 
Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...
Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...
Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...
 
Cukeup nyc ian dees on elixir, erlang, and cucumberl
Cukeup nyc ian dees on elixir, erlang, and cucumberlCukeup nyc ian dees on elixir, erlang, and cucumberl
Cukeup nyc ian dees on elixir, erlang, and cucumberl
 
Cukeup nyc peter bell on getting started with cucumber.js
Cukeup nyc peter bell on getting started with cucumber.jsCukeup nyc peter bell on getting started with cucumber.js
Cukeup nyc peter bell on getting started with cucumber.js
 
Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...
Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...
Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...
 
Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...
Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...
Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...
 
Progressive f# tutorials nyc don syme on keynote f# in the open source world
Progressive f# tutorials nyc don syme on keynote f# in the open source worldProgressive f# tutorials nyc don syme on keynote f# in the open source world
Progressive f# tutorials nyc don syme on keynote f# in the open source world
 
Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...
Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...
Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...
 
Dmitry mozorov on code quotations code as-data for f#
Dmitry mozorov on code quotations code as-data for f#Dmitry mozorov on code quotations code as-data for f#
Dmitry mozorov on code quotations code as-data for f#
 
A poet's guide_to_acceptance_testing
A poet's guide_to_acceptance_testingA poet's guide_to_acceptance_testing
A poet's guide_to_acceptance_testing
 
Russ miles-cloudfoundry-deep-dive
Russ miles-cloudfoundry-deep-diveRuss miles-cloudfoundry-deep-dive
Russ miles-cloudfoundry-deep-dive
 
Serendipity-neo4j
Serendipity-neo4jSerendipity-neo4j
Serendipity-neo4j
 
Simon Peyton Jones: Managing parallelism
Simon Peyton Jones: Managing parallelismSimon Peyton Jones: Managing parallelism
Simon Peyton Jones: Managing parallelism
 
Plug 20110217
Plug   20110217Plug   20110217
Plug 20110217
 
Lug presentation
Lug presentationLug presentation
Lug presentation
 
I went to_a_communications_workshop_and_they_t
I went to_a_communications_workshop_and_they_tI went to_a_communications_workshop_and_they_t
I went to_a_communications_workshop_and_they_t
 
Plug saiku
Plug   saikuPlug   saiku
Plug saiku
 

Akka london scala_user_group

Editor's Notes

  1. Scalable: Scala stands for SCALAble language which means that the language is designed to scale with the usage. Concepts and abstractions scale from small to larges Component-Oriented: scala was initially designed as a language to do component oriented programming, with its requirements on reusability, maintainability, orthogonality and extensibility. Coherent: Scala has managed to build a coherent whole while merging the FP and OO paradigms. High level: Scala allows you to program it to very high level utilizing its powerful abstractions both in OO and FP Extensible: It is great for building Domain Specific Languages (DSLs). Since Scala has a good type inference, a very flexible syntax which gives it a dynamic feel similar to Ruby and Python.
  2. Scalable: Scala stands for SCALAble language which means that the language is designed to scale with the usage. Concepts and abstractions scale from small to larges Component-Oriented: scala was initially designed as a language to do component oriented programming, with its requirements on reusability, maintainability, orthogonality and extensibility. Coherent: Scala has managed to build a coherent whole while merging the FP and OO paradigms. High level: Scala allows you to program it to very high level utilizing its powerful abstractions both in OO and FP Extensible: It is great for building Domain Specific Languages (DSLs). Since Scala has a good type inference, a very flexible syntax which gives it a dynamic feel similar to Ruby and Python.
  3. Scalable: Scala stands for SCALAble language which means that the language is designed to scale with the usage. Concepts and abstractions scale from small to larges Component-Oriented: scala was initially designed as a language to do component oriented programming, with its requirements on reusability, maintainability, orthogonality and extensibility. Coherent: Scala has managed to build a coherent whole while merging the FP and OO paradigms. High level: Scala allows you to program it to very high level utilizing its powerful abstractions both in OO and FP Extensible: It is great for building Domain Specific Languages (DSLs). Since Scala has a good type inference, a very flexible syntax which gives it a dynamic feel similar to Ruby and Python.
  4. Scalable: Scala stands for SCALAble language which means that the language is designed to scale with the usage. Concepts and abstractions scale from small to larges Component-Oriented: scala was initially designed as a language to do component oriented programming, with its requirements on reusability, maintainability, orthogonality and extensibility. Coherent: Scala has managed to build a coherent whole while merging the FP and OO paradigms. High level: Scala allows you to program it to very high level utilizing its powerful abstractions both in OO and FP Extensible: It is great for building Domain Specific Languages (DSLs). Since Scala has a good type inference, a very flexible syntax which gives it a dynamic feel similar to Ruby and Python.
  5. Scalable: Scala stands for SCALAble language which means that the language is designed to scale with the usage. Concepts and abstractions scale from small to larges Component-Oriented: scala was initially designed as a language to do component oriented programming, with its requirements on reusability, maintainability, orthogonality and extensibility. Coherent: Scala has managed to build a coherent whole while merging the FP and OO paradigms. High level: Scala allows you to program it to very high level utilizing its powerful abstractions both in OO and FP Extensible: It is great for building Domain Specific Languages (DSLs). Since Scala has a good type inference, a very flexible syntax which gives it a dynamic feel similar to Ruby and Python.
  6. Scalable: Scala stands for SCALAble language which means that the language is designed to scale with the usage. Concepts and abstractions scale from small to larges Component-Oriented: scala was initially designed as a language to do component oriented programming, with its requirements on reusability, maintainability, orthogonality and extensibility. Coherent: Scala has managed to build a coherent whole while merging the FP and OO paradigms. High level: Scala allows you to program it to very high level utilizing its powerful abstractions both in OO and FP Extensible: It is great for building Domain Specific Languages (DSLs). Since Scala has a good type inference, a very flexible syntax which gives it a dynamic feel similar to Ruby and Python.
  7. Scalable: Scala stands for SCALAble language which means that the language is designed to scale with the usage. Concepts and abstractions scale from small to larges Component-Oriented: scala was initially designed as a language to do component oriented programming, with its requirements on reusability, maintainability, orthogonality and extensibility. Coherent: Scala has managed to build a coherent whole while merging the FP and OO paradigms. High level: Scala allows you to program it to very high level utilizing its powerful abstractions both in OO and FP Extensible: It is great for building Domain Specific Languages (DSLs). Since Scala has a good type inference, a very flexible syntax which gives it a dynamic feel similar to Ruby and Python.
  8. Scalable: Scala stands for SCALAble language which means that the language is designed to scale with the usage. Concepts and abstractions scale from small to larges Component-Oriented: scala was initially designed as a language to do component oriented programming, with its requirements on reusability, maintainability, orthogonality and extensibility. Coherent: Scala has managed to build a coherent whole while merging the FP and OO paradigms. High level: Scala allows you to program it to very high level utilizing its powerful abstractions both in OO and FP Extensible: It is great for building Domain Specific Languages (DSLs). Since Scala has a good type inference, a very flexible syntax which gives it a dynamic feel similar to Ruby and Python.
  9. Scalable: Scala stands for SCALAble language which means that the language is designed to scale with the usage. Concepts and abstractions scale from small to larges Component-Oriented: scala was initially designed as a language to do component oriented programming, with its requirements on reusability, maintainability, orthogonality and extensibility. Coherent: Scala has managed to build a coherent whole while merging the FP and OO paradigms. High level: Scala allows you to program it to very high level utilizing its powerful abstractions both in OO and FP Extensible: It is great for building Domain Specific Languages (DSLs). Since Scala has a good type inference, a very flexible syntax which gives it a dynamic feel similar to Ruby and Python.
  10. Scalable: Scala stands for SCALAble language which means that the language is designed to scale with the usage. Concepts and abstractions scale from small to larges Component-Oriented: scala was initially designed as a language to do component oriented programming, with its requirements on reusability, maintainability, orthogonality and extensibility. Coherent: Scala has managed to build a coherent whole while merging the FP and OO paradigms. High level: Scala allows you to program it to very high level utilizing its powerful abstractions both in OO and FP Extensible: It is great for building Domain Specific Languages (DSLs). Since Scala has a good type inference, a very flexible syntax which gives it a dynamic feel similar to Ruby and Python.
  11. Scalable: Scala stands for SCALAble language which means that the language is designed to scale with the usage. Concepts and abstractions scale from small to larges Component-Oriented: scala was initially designed as a language to do component oriented programming, with its requirements on reusability, maintainability, orthogonality and extensibility. Coherent: Scala has managed to build a coherent whole while merging the FP and OO paradigms. High level: Scala allows you to program it to very high level utilizing its powerful abstractions both in OO and FP Extensible: It is great for building Domain Specific Languages (DSLs). Since Scala has a good type inference, a very flexible syntax which gives it a dynamic feel similar to Ruby and Python.
  12. Scalable: Scala stands for SCALAble language which means that the language is designed to scale with the usage. Concepts and abstractions scale from small to larges Component-Oriented: scala was initially designed as a language to do component oriented programming, with its requirements on reusability, maintainability, orthogonality and extensibility. Coherent: Scala has managed to build a coherent whole while merging the FP and OO paradigms. High level: Scala allows you to program it to very high level utilizing its powerful abstractions both in OO and FP Extensible: It is great for building Domain Specific Languages (DSLs). Since Scala has a good type inference, a very flexible syntax which gives it a dynamic feel similar to Ruby and Python.
  13. Scalable: Scala stands for SCALAble language which means that the language is designed to scale with the usage. Concepts and abstractions scale from small to larges Component-Oriented: scala was initially designed as a language to do component oriented programming, with its requirements on reusability, maintainability, orthogonality and extensibility. Coherent: Scala has managed to build a coherent whole while merging the FP and OO paradigms. High level: Scala allows you to program it to very high level utilizing its powerful abstractions both in OO and FP Extensible: It is great for building Domain Specific Languages (DSLs). Since Scala has a good type inference, a very flexible syntax which gives it a dynamic feel similar to Ruby and Python.
  14. Scalable: Scala stands for SCALAble language which means that the language is designed to scale with the usage. Concepts and abstractions scale from small to larges Component-Oriented: scala was initially designed as a language to do component oriented programming, with its requirements on reusability, maintainability, orthogonality and extensibility. Coherent: Scala has managed to build a coherent whole while merging the FP and OO paradigms. High level: Scala allows you to program it to very high level utilizing its powerful abstractions both in OO and FP Extensible: It is great for building Domain Specific Languages (DSLs). Since Scala has a good type inference, a very flexible syntax which gives it a dynamic feel similar to Ruby and Python.
  15. Scalable: Scala stands for SCALAble language which means that the language is designed to scale with the usage. Concepts and abstractions scale from small to larges Component-Oriented: scala was initially designed as a language to do component oriented programming, with its requirements on reusability, maintainability, orthogonality and extensibility. Coherent: Scala has managed to build a coherent whole while merging the FP and OO paradigms. High level: Scala allows you to program it to very high level utilizing its powerful abstractions both in OO and FP Extensible: It is great for building Domain Specific Languages (DSLs). Since Scala has a good type inference, a very flexible syntax which gives it a dynamic feel similar to Ruby and Python.
  16. Scalable: Scala stands for SCALAble language which means that the language is designed to scale with the usage. Concepts and abstractions scale from small to larges Component-Oriented: scala was initially designed as a language to do component oriented programming, with its requirements on reusability, maintainability, orthogonality and extensibility. Coherent: Scala has managed to build a coherent whole while merging the FP and OO paradigms. High level: Scala allows you to program it to very high level utilizing its powerful abstractions both in OO and FP Extensible: It is great for building Domain Specific Languages (DSLs). Since Scala has a good type inference, a very flexible syntax which gives it a dynamic feel similar to Ruby and Python.
  17. Scalable: Scala stands for SCALAble language which means that the language is designed to scale with the usage. Concepts and abstractions scale from small to larges Component-Oriented: scala was initially designed as a language to do component oriented programming, with its requirements on reusability, maintainability, orthogonality and extensibility. Coherent: Scala has managed to build a coherent whole while merging the FP and OO paradigms. High level: Scala allows you to program it to very high level utilizing its powerful abstractions both in OO and FP Extensible: It is great for building Domain Specific Languages (DSLs). Since Scala has a good type inference, a very flexible syntax which gives it a dynamic feel similar to Ruby and Python.
  18. Scalable: Scala stands for SCALAble language which means that the language is designed to scale with the usage. Concepts and abstractions scale from small to larges Component-Oriented: scala was initially designed as a language to do component oriented programming, with its requirements on reusability, maintainability, orthogonality and extensibility. Coherent: Scala has managed to build a coherent whole while merging the FP and OO paradigms. High level: Scala allows you to program it to very high level utilizing its powerful abstractions both in OO and FP Extensible: It is great for building Domain Specific Languages (DSLs). Since Scala has a good type inference, a very flexible syntax which gives it a dynamic feel similar to Ruby and Python.
  19. Scalable: Scala stands for SCALAble language which means that the language is designed to scale with the usage. Concepts and abstractions scale from small to larges Component-Oriented: scala was initially designed as a language to do component oriented programming, with its requirements on reusability, maintainability, orthogonality and extensibility. Coherent: Scala has managed to build a coherent whole while merging the FP and OO paradigms. High level: Scala allows you to program it to very high level utilizing its powerful abstractions both in OO and FP Extensible: It is great for building Domain Specific Languages (DSLs). Since Scala has a good type inference, a very flexible syntax which gives it a dynamic feel similar to Ruby and Python.
  20. Scalable: Scala stands for SCALAble language which means that the language is designed to scale with the usage. Concepts and abstractions scale from small to larges Component-Oriented: scala was initially designed as a language to do component oriented programming, with its requirements on reusability, maintainability, orthogonality and extensibility. Coherent: Scala has managed to build a coherent whole while merging the FP and OO paradigms. High level: Scala allows you to program it to very high level utilizing its powerful abstractions both in OO and FP Extensible: It is great for building Domain Specific Languages (DSLs). Since Scala has a good type inference, a very flexible syntax which gives it a dynamic feel similar to Ruby and Python.