SlideShare a Scribd company logo
Stefan Marr, Hanspeter Mössenböck
AGERE! Workshop
October 26, 2015
Optimizing
Communicating Event-Loop
Languages with Truffle
Research funded by
NS
Initial Goals
• Safety
– Guaranteed Isolation
– No Low-Level Data Races
• Deadlock Freedom
• Performance Competitive with Java
2
NS: A Platform For Concurrency Research
Communicating Event Loops
3
E Programming Language
à la
Communicating Event Loops
4
Actor A Actor B
Actor Principle
Communicating Event Loops
5
Actor A Actor B
But, Actor Not First-Class
Communicating Event Loops
6
Actor A Actor B
Actors Contain Objects
Communicating Event Loops
7
Actor A Actor B
Objects Can Have Far-References
public class PingPong new = Benchmark <: Value (
class Ping new: cnt with: pongAct = (
private pingsLeft ::= cnt. (* mutable slot *)
private pongAct = pongAct. (* immutable slot *)
)(
8
Newspeak
A Class-based Language
Dynamically Typed
No Global/Static State
public class PingPong new = Benchmark <: Value (
class Ping new: cnt with: pongAct = (
private pingsLeft ::= cnt. (* mutable slot *)
private pongAct = pongAct. (* immutable slot *)
)(
9
Newspeak
public ping = (
pongAct <-: ping: self.
pingsLeft := pingsLeft - 1.
)
Communicating Event-Loop Actors
public class PingPong new = Benchmark <: Value (
class Ping new: cnt with: pongAct = (
private pingsLeft ::= cnt. (* mutable slot *)
private pongAct = pongAct. (* immutable slot *)
)(
10
Newspeak
Newspeak Programming Language Draft
Specification Version 0.095
http://bracha.org/newspeak-spec.pdf
With Spec:
public ping = (
pongAct <-: ping: self.
pingsLeft := pingsLeft - 1.
)
: Built on Truffle
11
cnt
1
+
cnt:
=
if
cnt:
=
0
cnt
1
+
cnt:
=if cnt:
=
0
NS
Truffle’s Self-Optimization Approach:
[1] Würthinger, T.; Wöß, A.; Stadler, L.; Duboscq, G.; Simon, D. & Wimmer, C. (2012),
Self-Optimizing AST Interpreters, Proceedings of the 8th Dynamic Languages Symposium.
JIT Compiled
Native Code
Self-Optimized AST
: A Fast Newspeak
12
NS
SOMNS versus Java (Graal Compiler)
On average 1.65x slower (min. −3%, max. 2.6x)
0.0
0.5
1.0
1.5
2.0
2.5
3.0
Bounce
BubbleSort
DeltaBlue
Fannkuch
Json
Mandelbrot
NBody
PageRank
Permute
Queens
QuickSort
Richards
Sieve
Storage
Runtimefactornormalized
toJava
RuntimeFactor
NormalizedtoJava
Lower
Is
Better
vs. JVM Actor Libraries
13
NS
Chameneos
ConcurrentSorted
LinkedList
Counting ForkJoinThroughput PingPong RadixSort ThreadRing Geo Mean
0
1
2
3
4
5
6
7
8
RuntimefactoroverScalaz
lowerisbetter
Akka Jetlang SOMns Scalaz
RuntimeFactor
NormalizedtoScalaz
Lower
Is
Better
Savina Benchmarks
[2] Imam, S. M. & Sarkar, V. (2014), Savina - An Actor Benchmark
Suite: Enabling Empirical Evaluation of Actor Libraries, Proceedings of
the 4th AGERE! Workshop, ACM.
TWO OPTIMIZATIONS
Enforcing Isolation
Asynchronous Sends
14
Enforcing Isolation
15
Enforcing Isolation
16
if (isMutableObject(arg[i])) {
return farReference(arg[i]);
} else if (isValueObject(arg[i]) {
return arg[i];
} else if (isFarReference(arg[i]) && toCurrentActor(arg[i])) {
...
} else if (isFarReference...
} else if (isPromise(arg[i])...
...
public traverse: t col: start to: end = (
(* ... *)
)
worker <-: traverse: table col: 1 to: 10
Optimistic AST Specialization
17
async send
WrapArg WrapArg WrapArgWrapArg
ReadVar
worker
ReadVar
table
worker <-: traverse: table col: 1 to: 10
Literal
1
Literal
10
Optimistic AST Specialization
18
async send
WrapArg WrapArg WrapArg
Unwrap
FarRef
ReadVar
worker
ReadVar
table
worker <-: traverse: table col: 1 to: 10
Literal
1
Literal
10
Optimistic AST Specialization
19
async send
IsValue WrapArg WrapArg
Unwrap
FarRef
ReadVar
worker
ReadVar
table
worker <-: traverse: table col: 1 to: 10
Literal
1
Literal
10
Optimistic AST Specialization
20
async send
IsValue
Unwrap
FarRef
ReadVar
worker
ReadVar
table
worker <-: traverse: table col: 1 to: 10
Literal
1
Literal
10
Impact on Microbenchmarks
21
Speedup Factor over Unoptimized Version
public class With10Args new = Benchmark (
private aValue = Value new.
private obj ::= Object new.
public benchmark = (
self <-: a1: aValue a2: Object new a3: obj
a4: Benchmark a5: aValue
a6: 0 a7: 7 a8: 8 a9: #eee a0: '33'.
) )
with 10
arguments
1.0 1.5 2.0 2.5 3.0
Benchmark
Method Lookup for Asynchronous Sends
22
A1
Event-Loop: Single Point of Reception
B
A2
C
do
get
set
do
a1 <-: do
b <-: get
a2 <-: set
c <-: do
Megamorphic Method Invocations
while (true) {
msg = mailbox.receive()
mthd = msg.obj.getClass().
lookup(msg.selector())
mthd.invoke(obj, msg.args)
}
Optimization: Send-site Caching
23
a1 <-: do
actor(a1) <-: fun(o) {
o.do()
}
Code Transformation
Introduces Inline Cache
With Send-site Caching
24
A1
B
A2
C
do
get
set
do
a1 <-: do
b <-: get
a2 <-: set
c <-: do
while (true) {
msg = mailbox.receive()
msg.fun.
invoke(obj, msg.args)
}fun1(.) {…}
fun2(.) {…}
fun3(.) {…}
fun4(.) {…}
Impact on Microbenchmarks
25
Speedup Factor over Unoptimized Version
public count = (
cnt := cnt + 1.
cnt = iterations
ifTrue: [ completionPP resolve: cnt ]
ifFalse: [ self <-: count ]
)
lookup in cls
lookup in
5th supercls
1.0 1.5 2.0 2.5 3.0
Benchmark
Impact on Microbenchmarks
26
Speedup Factor over Unoptimized Version
public calc: a and: b = (
| r |
r := a * b + b + b – a.
r := r - (a * a * b).
^ r
)
lookup in cls
lookup in
5th supercls
with
int or double
1.0 1.5 2.0 3.0 10.0 50.0 100.0
Benchmark
lookup in cls
lookup in
5th supercls
with
int or double
1.0 1.5 2.0 3.0 10.0 50.0 100.0
Benchmark
public benchmark = (
1 to: numIter do: [:i |
self <-: calc: 2 and: 4.
self <-: calc: 1.2 and: 3.3.
].
)
: Fast And Scalable
• Platform for Concurrency Research
• Initial optimizations
– Send-site Caching + Isolation 27
NS
Chameneos
ConcurrentSorted
LinkedList
Counting ForkJoinThroughput PingPong RadixSort ThreadRing Geo Mean
0
1
2
3
4
5
6
7
8
RuntimefactoroverScalaz
lowerisbetter
Akka Jetlang SOMns ScalazLower
Is
Better
RuntimeFactor
NormalizedtoScalaz

More Related Content

PPTX
Building High-Performance Language Implementations With Low Effort
PPTX
Zero-Overhead Metaprogramming: Reflection and Metaobject Protocols Fast and w...
PPTX
Seminar on Parallel and Concurrent Programming
PPTX
Tracing versus Partial Evaluation: Which Meta-Compilation Approach is Better ...
PPTX
Why Is Concurrent Programming Hard? And What Can We Do about It?
PPTX
Async await in C++
PDF
DConf 2016: Keynote by Walter Bright
PDF
Blocks & GCD
Building High-Performance Language Implementations With Low Effort
Zero-Overhead Metaprogramming: Reflection and Metaobject Protocols Fast and w...
Seminar on Parallel and Concurrent Programming
Tracing versus Partial Evaluation: Which Meta-Compilation Approach is Better ...
Why Is Concurrent Programming Hard? And What Can We Do about It?
Async await in C++
DConf 2016: Keynote by Walter Bright
Blocks & GCD

What's hot (20)

PPTX
C++ Coroutines
PDF
ceph::errorator<> throw/catch-free, compile time-checked exceptions for seast...
PDF
Functional Programming and Composing Actors
PDF
clWrap: Nonsense free control of your GPU
PPTX
Gor Nishanov, C++ Coroutines – a negative overhead abstraction
PDF
Exploiting Concurrency with Dynamic Languages
PPTX
Iron Languages - NYC CodeCamp 2/19/2011
PPTX
Functional Reactive Programming with RxJS
PDF
Good news, everybody! Guile 2.2 performance notes (FOSDEM 2016)
PPTX
Seeing with Python presented at PyCon AU 2014
PDF
Using R in remote computer clusters
PDF
Clojure made-simple - John Stevenson
PDF
[JavaOne 2011] Models for Concurrent Programming
PDF
Loom and concurrency latest
PDF
Grand Central Dispatch - iOS Conf SG 2015
PDF
GCD and OperationQueue.
PDF
Collections forceawakens
PDF
Конверсия управляемых языков в неуправляемые
PDF
Address/Thread/Memory Sanitizer
PDF
Clojure, Plain and Simple
C++ Coroutines
ceph::errorator<> throw/catch-free, compile time-checked exceptions for seast...
Functional Programming and Composing Actors
clWrap: Nonsense free control of your GPU
Gor Nishanov, C++ Coroutines – a negative overhead abstraction
Exploiting Concurrency with Dynamic Languages
Iron Languages - NYC CodeCamp 2/19/2011
Functional Reactive Programming with RxJS
Good news, everybody! Guile 2.2 performance notes (FOSDEM 2016)
Seeing with Python presented at PyCon AU 2014
Using R in remote computer clusters
Clojure made-simple - John Stevenson
[JavaOne 2011] Models for Concurrent Programming
Loom and concurrency latest
Grand Central Dispatch - iOS Conf SG 2015
GCD and OperationQueue.
Collections forceawakens
Конверсия управляемых языков в неуправляемые
Address/Thread/Memory Sanitizer
Clojure, Plain and Simple
Ad

Similar to Optimizing Communicating Event-Loop Languages with Truffle (20)

PPTX
Inferno Scalable Deep Learning on Spark
PDF
Flink Forward SF 2017: Stefan Richter - Improvements for large state and reco...
PDF
Hierarchical free monads and software design in fp
PPTX
Clojure And Swing
PDF
Javantura v4 - Java and lambdas and streams - are they better than for loops ...
PDF
Golang Performance : microbenchmarks, profilers, and a war story
PPTX
Building a Scalable Distributed Stats Infrastructure with Storm and KairosDB
PPTX
" How to survive with 1 billion vectors and not sell a kidney: our low-cost c...
PDF
So you think you can stream.pptx
PDF
Javantura v2 - Replication with MongoDB - what could go wrong... - Philipp Krenn
PDF
PPTX
Sonata- Query-Driven Streaming Network Telemetry -slides.pptx
PDF
Adopting GraalVM - Scale by the Bay 2018
PPTX
Introduction to the Kotlin language
PDF
Direct Code Execution - LinuxCon Japan 2014
PPTX
Java 7 - New Features - by Mihail Stoynov and Svetlin Nakov
PDF
Alex Smola, Professor in the Machine Learning Department, Carnegie Mellon Uni...
PDF
Automatic and Interpretable Machine Learning with H2O and LIME
PDF
L Fu - Dao: a novel programming language for bioinformatics
PPTX
IA3_presentation.pptx
Inferno Scalable Deep Learning on Spark
Flink Forward SF 2017: Stefan Richter - Improvements for large state and reco...
Hierarchical free monads and software design in fp
Clojure And Swing
Javantura v4 - Java and lambdas and streams - are they better than for loops ...
Golang Performance : microbenchmarks, profilers, and a war story
Building a Scalable Distributed Stats Infrastructure with Storm and KairosDB
" How to survive with 1 billion vectors and not sell a kidney: our low-cost c...
So you think you can stream.pptx
Javantura v2 - Replication with MongoDB - what could go wrong... - Philipp Krenn
Sonata- Query-Driven Streaming Network Telemetry -slides.pptx
Adopting GraalVM - Scale by the Bay 2018
Introduction to the Kotlin language
Direct Code Execution - LinuxCon Japan 2014
Java 7 - New Features - by Mihail Stoynov and Svetlin Nakov
Alex Smola, Professor in the Machine Learning Department, Carnegie Mellon Uni...
Automatic and Interpretable Machine Learning with H2O and LIME
L Fu - Dao: a novel programming language for bioinformatics
IA3_presentation.pptx
Ad

More from Stefan Marr (17)

PPTX
Metaprogramming, Metaobject Protocols, Gradual Type Checks: Optimizing the "U...
PPTX
Cloud PARTE: Elastic Complex Event Processing based on Mobile Actors
PPTX
Supporting Concurrency Abstractions in High-level Language Virtual Machines
PDF
Identifying A Unifying Mechanism for the Implementation of Concurrency Abstra...
PDF
Sly and the RoarVM: Parallel Programming with Smalltalk
PDF
Which Problems Does a Multi-Language Virtual Machine Need to Solve in the Mul...
PDF
Sly and the RoarVM: Exploring the Manycore Future of Programming
PDF
PHP.next: Traits
PDF
The Price of the Free Lunch: Programming in the Multicore Era
PDF
Locality and Encapsulation: A Foundation for Concurrency Support in Multi-Lan...
PPTX
Insertion Tree Phasers: Efficient and Scalable Barrier Synchronization for Fi...
PPTX
Encapsulation and Locality: A Foundation for Concurrency Support in Multi-Lan...
PPTX
Intermediate Language Design of High-level Language VMs: Towards Comprehensiv...
PPTX
Virtual Machine Support for Many-Core Architectures: Decoupling Abstract from...
PDF
VMADL: An Architecture Definition Language for Variability and Composition ...
PPT
Metaprogrammierung und Reflection
PPT
Traits: A New Language Feature for PHP?
Metaprogramming, Metaobject Protocols, Gradual Type Checks: Optimizing the "U...
Cloud PARTE: Elastic Complex Event Processing based on Mobile Actors
Supporting Concurrency Abstractions in High-level Language Virtual Machines
Identifying A Unifying Mechanism for the Implementation of Concurrency Abstra...
Sly and the RoarVM: Parallel Programming with Smalltalk
Which Problems Does a Multi-Language Virtual Machine Need to Solve in the Mul...
Sly and the RoarVM: Exploring the Manycore Future of Programming
PHP.next: Traits
The Price of the Free Lunch: Programming in the Multicore Era
Locality and Encapsulation: A Foundation for Concurrency Support in Multi-Lan...
Insertion Tree Phasers: Efficient and Scalable Barrier Synchronization for Fi...
Encapsulation and Locality: A Foundation for Concurrency Support in Multi-Lan...
Intermediate Language Design of High-level Language VMs: Towards Comprehensiv...
Virtual Machine Support for Many-Core Architectures: Decoupling Abstract from...
VMADL: An Architecture Definition Language for Variability and Composition ...
Metaprogrammierung und Reflection
Traits: A New Language Feature for PHP?

Recently uploaded (20)

PPTX
A Presentation on Artificial Intelligence
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
Machine learning based COVID-19 study performance prediction
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PPTX
Big Data Technologies - Introduction.pptx
PDF
Approach and Philosophy of On baking technology
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
KodekX | Application Modernization Development
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
NewMind AI Monthly Chronicles - July 2025
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
A Presentation on Artificial Intelligence
20250228 LYD VKU AI Blended-Learning.pptx
Dropbox Q2 2025 Financial Results & Investor Presentation
Encapsulation_ Review paper, used for researhc scholars
Machine learning based COVID-19 study performance prediction
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
Reach Out and Touch Someone: Haptics and Empathic Computing
NewMind AI Weekly Chronicles - August'25 Week I
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Chapter 3 Spatial Domain Image Processing.pdf
Big Data Technologies - Introduction.pptx
Approach and Philosophy of On baking technology
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
KodekX | Application Modernization Development
Mobile App Security Testing_ A Comprehensive Guide.pdf
NewMind AI Monthly Chronicles - July 2025
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Review of recent advances in non-invasive hemoglobin estimation
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf

Optimizing Communicating Event-Loop Languages with Truffle

  • 1. Stefan Marr, Hanspeter Mössenböck AGERE! Workshop October 26, 2015 Optimizing Communicating Event-Loop Languages with Truffle Research funded by NS
  • 2. Initial Goals • Safety – Guaranteed Isolation – No Low-Level Data Races • Deadlock Freedom • Performance Competitive with Java 2 NS: A Platform For Concurrency Research
  • 3. Communicating Event Loops 3 E Programming Language à la
  • 4. Communicating Event Loops 4 Actor A Actor B Actor Principle
  • 5. Communicating Event Loops 5 Actor A Actor B But, Actor Not First-Class
  • 6. Communicating Event Loops 6 Actor A Actor B Actors Contain Objects
  • 7. Communicating Event Loops 7 Actor A Actor B Objects Can Have Far-References
  • 8. public class PingPong new = Benchmark <: Value ( class Ping new: cnt with: pongAct = ( private pingsLeft ::= cnt. (* mutable slot *) private pongAct = pongAct. (* immutable slot *) )( 8 Newspeak A Class-based Language Dynamically Typed No Global/Static State
  • 9. public class PingPong new = Benchmark <: Value ( class Ping new: cnt with: pongAct = ( private pingsLeft ::= cnt. (* mutable slot *) private pongAct = pongAct. (* immutable slot *) )( 9 Newspeak public ping = ( pongAct <-: ping: self. pingsLeft := pingsLeft - 1. ) Communicating Event-Loop Actors
  • 10. public class PingPong new = Benchmark <: Value ( class Ping new: cnt with: pongAct = ( private pingsLeft ::= cnt. (* mutable slot *) private pongAct = pongAct. (* immutable slot *) )( 10 Newspeak Newspeak Programming Language Draft Specification Version 0.095 http://bracha.org/newspeak-spec.pdf With Spec: public ping = ( pongAct <-: ping: self. pingsLeft := pingsLeft - 1. )
  • 11. : Built on Truffle 11 cnt 1 + cnt: = if cnt: = 0 cnt 1 + cnt: =if cnt: = 0 NS Truffle’s Self-Optimization Approach: [1] Würthinger, T.; Wöß, A.; Stadler, L.; Duboscq, G.; Simon, D. & Wimmer, C. (2012), Self-Optimizing AST Interpreters, Proceedings of the 8th Dynamic Languages Symposium. JIT Compiled Native Code Self-Optimized AST
  • 12. : A Fast Newspeak 12 NS SOMNS versus Java (Graal Compiler) On average 1.65x slower (min. −3%, max. 2.6x) 0.0 0.5 1.0 1.5 2.0 2.5 3.0 Bounce BubbleSort DeltaBlue Fannkuch Json Mandelbrot NBody PageRank Permute Queens QuickSort Richards Sieve Storage Runtimefactornormalized toJava RuntimeFactor NormalizedtoJava Lower Is Better
  • 13. vs. JVM Actor Libraries 13 NS Chameneos ConcurrentSorted LinkedList Counting ForkJoinThroughput PingPong RadixSort ThreadRing Geo Mean 0 1 2 3 4 5 6 7 8 RuntimefactoroverScalaz lowerisbetter Akka Jetlang SOMns Scalaz RuntimeFactor NormalizedtoScalaz Lower Is Better Savina Benchmarks [2] Imam, S. M. & Sarkar, V. (2014), Savina - An Actor Benchmark Suite: Enabling Empirical Evaluation of Actor Libraries, Proceedings of the 4th AGERE! Workshop, ACM.
  • 16. Enforcing Isolation 16 if (isMutableObject(arg[i])) { return farReference(arg[i]); } else if (isValueObject(arg[i]) { return arg[i]; } else if (isFarReference(arg[i]) && toCurrentActor(arg[i])) { ... } else if (isFarReference... } else if (isPromise(arg[i])... ... public traverse: t col: start to: end = ( (* ... *) ) worker <-: traverse: table col: 1 to: 10
  • 17. Optimistic AST Specialization 17 async send WrapArg WrapArg WrapArgWrapArg ReadVar worker ReadVar table worker <-: traverse: table col: 1 to: 10 Literal 1 Literal 10
  • 18. Optimistic AST Specialization 18 async send WrapArg WrapArg WrapArg Unwrap FarRef ReadVar worker ReadVar table worker <-: traverse: table col: 1 to: 10 Literal 1 Literal 10
  • 19. Optimistic AST Specialization 19 async send IsValue WrapArg WrapArg Unwrap FarRef ReadVar worker ReadVar table worker <-: traverse: table col: 1 to: 10 Literal 1 Literal 10
  • 20. Optimistic AST Specialization 20 async send IsValue Unwrap FarRef ReadVar worker ReadVar table worker <-: traverse: table col: 1 to: 10 Literal 1 Literal 10
  • 21. Impact on Microbenchmarks 21 Speedup Factor over Unoptimized Version public class With10Args new = Benchmark ( private aValue = Value new. private obj ::= Object new. public benchmark = ( self <-: a1: aValue a2: Object new a3: obj a4: Benchmark a5: aValue a6: 0 a7: 7 a8: 8 a9: #eee a0: '33'. ) ) with 10 arguments 1.0 1.5 2.0 2.5 3.0 Benchmark
  • 22. Method Lookup for Asynchronous Sends 22 A1 Event-Loop: Single Point of Reception B A2 C do get set do a1 <-: do b <-: get a2 <-: set c <-: do Megamorphic Method Invocations while (true) { msg = mailbox.receive() mthd = msg.obj.getClass(). lookup(msg.selector()) mthd.invoke(obj, msg.args) }
  • 23. Optimization: Send-site Caching 23 a1 <-: do actor(a1) <-: fun(o) { o.do() } Code Transformation Introduces Inline Cache
  • 24. With Send-site Caching 24 A1 B A2 C do get set do a1 <-: do b <-: get a2 <-: set c <-: do while (true) { msg = mailbox.receive() msg.fun. invoke(obj, msg.args) }fun1(.) {…} fun2(.) {…} fun3(.) {…} fun4(.) {…}
  • 25. Impact on Microbenchmarks 25 Speedup Factor over Unoptimized Version public count = ( cnt := cnt + 1. cnt = iterations ifTrue: [ completionPP resolve: cnt ] ifFalse: [ self <-: count ] ) lookup in cls lookup in 5th supercls 1.0 1.5 2.0 2.5 3.0 Benchmark
  • 26. Impact on Microbenchmarks 26 Speedup Factor over Unoptimized Version public calc: a and: b = ( | r | r := a * b + b + b – a. r := r - (a * a * b). ^ r ) lookup in cls lookup in 5th supercls with int or double 1.0 1.5 2.0 3.0 10.0 50.0 100.0 Benchmark lookup in cls lookup in 5th supercls with int or double 1.0 1.5 2.0 3.0 10.0 50.0 100.0 Benchmark public benchmark = ( 1 to: numIter do: [:i | self <-: calc: 2 and: 4. self <-: calc: 1.2 and: 3.3. ]. )
  • 27. : Fast And Scalable • Platform for Concurrency Research • Initial optimizations – Send-site Caching + Isolation 27 NS Chameneos ConcurrentSorted LinkedList Counting ForkJoinThroughput PingPong RadixSort ThreadRing Geo Mean 0 1 2 3 4 5 6 7 8 RuntimefactoroverScalaz lowerisbetter Akka Jetlang SOMns ScalazLower Is Better RuntimeFactor NormalizedtoScalaz

Editor's Notes

  • #2: Talk: 18min + 5min questions
  • #3: Can safe actor languages be efficient & usable enough for complex concurrent applications?