SlideShare a Scribd company logo
1 of 48
Download to read offline
https://github.com/rssh/scala-gopher 
. 
Ruslan Shevchenko <ruslan@shevchenko.kiev.ua> 
@rssh1
https://github.com/rssh/scala-gopher 
• CSP = Communicating Sequential Processes. 
• Tony Hoar. 
• classical paper from 1978 
• book: http://www.usingcsp.com/ (1985) 
• Languages 
• Occam (1983) for specialized hardware [transputers] 
• Go (2007) - got popular: 
• Rob Pike (C, Plan9) 
• in Google
https://github.com/rssh/scala-gopher 
Write (“blocked”) Read (“blocked”) 
Channel (buffered) 
Channel (unbuffered) 
Computation blocks 
are connected 
by channels 
// in INMOS transputers - physically
Flow A Flow B
Flow A Flow B
Flow A Flow B
Flow A Flow B
Flow A Flow B
Flow A Flow B
Flow A Flow B
Flow A Flow B
https://github.com/rssh/scala-gopher 
❖ Simple mental model 
❖ Ability to “coordinate” between input/output sinks 
go func(){ 
for { select { 
case x <- inX: 
var y <- inY 
if (x == y) { 
fmt.fprintf(“Bingo!”) 
} 
case q <- inQuit: 
break; 
} }() 
} 
// Go
https://github.com/rssh/scala-gopher 
❖ Simple mental model 
❖ Ability to “coordinate” between import 
go func(){ 
for { select { 
case x <- inX: 
var y <- inY 
if (x == y) { 
fmt.fprintf(“Bingo!”) 
} 
case q <- inQuit: 
break; 
} }() 
} 
waits 
// Go
https://github.com/rssh/scala-gopher
https://github.com/rssh/scala-gopher 
scala-gopher: 
• Not ‘emulation of go in scala’ but 
• ‘CSP constructs in scala-way' 
• Asynchronous 
• build on top of Akka and SIP 22 - async 
// ‘block’ is not block 
// ‘wait’ is not wait
https://github.com/rssh/scala-gopher 
go func(){ 
for { select { 
case x <- inX: 
var y <- inY 
if (x == y) { 
fmt.fprintf(“Bingo!”) 
} 
case q <- inQuit: 
break; 
} }() 
} 
select.forever { 
case x: inX.read => 
val y = inY.read 
if (x == y) { 
Console.println(“Bingo!”) 
} 
case q: inQuit.read => 
currentFlow.exit(()) 
} 
Go Scala
https://github.com/rssh/scala-gopher 
go func(){ 
for { select { 
case x <- inX: 
var y <- inY 
if (x == y) { 
fmt.fprintf(“Bingo!”) 
} 
case q <- inQuit: 
break; 
} }() 
} 
select.forever { 
case x: inX.read => 
val y = inY.read 
if (x == y) { 
Console.println(“Bingo!”) 
} 
case q: inQuit.read => 
currentFlow.exit(()) 
} 
Go Scala 
3 constructions (common combination)
https://github.com/rssh/scala-gopher 
select.forever { 
case x: inX.read => 
val y = inY.read 
if (x == y) { 
Console.println(“Bingo!”) 
} 
case q: inQuit.read => 
currentFlow.exit(()) 
} 
// select.forever: basic construct 
Scala
https://github.com/rssh/scala-gopher 
select.forever { 
case x: String if (x==(inX|1inX2).read) => 
val y = inY.read 
if (x == y) { 
Console.println(“Bingo!”) 
} 
case q: Boolean if (q==inQuit.read) => 
currentFlow.exit(()) 
} 
Scala
https://github.com/rssh/scala-gopher 
Unblocked: 
selector: 
forever: apply(choice: PartialFunction[Any,Unit]): Future[Unit] 
once: apply[T](choice: PartialFunction[Any,T]): Future[T] 
go[T]: Future[T] 
“Blocked”: (must be inside ‘go’ or ‘async’ ): 
forever: foreach(choice: PartialFunction[Any,Unit]): Unit 
once: foreach[T](choice: PartialFunction[Any,T]): T
https://github.com/rssh/scala-gopher 
Inside Partial Function: 
❖ reading from Input[A] and do something 
❖ Channel[A], Future[A], user input 
❖ writing to Output[A] and do something 
❖ Channel[A], user output 
❖ do something on idle. 
“ do something” wrapped in async block, 
so we can ‘block’ there
https://github.com/rssh/scala-gopher 
Input[A]: 
❖ unblocked: 
❖ aread, atake, aforeach 
❖ ‘blocked:’ 
❖ read, take, foreach …. 
❖ composition 
❖ map, filter, zip, or, dup 
❖ construction 
open: ‘wait’ 
closed: throw exception on 
reading after ‘last’ element 
❖ channel, future, collection, own implementation
https://github.com/rssh/scala-gopher 
Output[A]: 
❖ unblocked: 
❖ awrite, awriteAll, 
❖ ‘blocked:’ 
❖ write, writeAll …. 
❖ composition 
❖ — (?) 
❖ construction 
open: ‘wait’ 
closed: throw exception on 
writing element 
❖ channel, actor, own implementation
https://github.com/rssh/scala-gopher 
Channel[A]: 
❖ Input[A] + Output[A] 
❖ garbage-collected. 
❖ gopherApi.makeChannel 
❖ can be buffered
https://github.com/rssh/scala-gopher 
Timeouts: 
val (inReady, inTimeouts) = in.withInputTimeouts(30 seconds) 
for(s <- selector.forever) { 
case a:inReady.read => 
Console.println(s“received ${a}”) 
case t:inTimeouts.read => 
Console.println(“timeout occurred”) 
} 
Input => withInputTimeouts 
Output => withOutputTimeouts
https://github.com/rssh/scala-gopher 
go[T](T :=> Future[T]) 
❖ async + defer/recover 
❖ defer(callback: =>Unit): Unit 
[finally] 
❖ recover(handler: PartialFunction[Throwable,T]):Boolean 
go { 
val source = fetchSource(url) 
val csv = parseCsv(source) 
val svFile = new FileOutputStream(csv.name, append=true) 
defer{ 
val r = recover{ 
case FileNotFoundException => signal(“file not found”) 
} 
if (!r) svFile.close() 
} 
for(s <- csv.data) svFile.print(s) 
} 
[catch]
https://github.com/rssh/scala-gopher 
go[T](T :=> Future[T]) 
go { 
val source = fetchSource(url) 
val csv = parseCsv(source) 
val svFile = new FileOutputStream(csv.name, append=true) 
defer{ 
val r = recover{ 
case FileNotFoundException => signal(“file not found”) 
} 
if (!r) svFile.close() 
} 
for(s <- csv.data) svFile.print(s) 
}
https://github.com/rssh/scala-gopher 
goScope[T](T :=> T) 
goScope { 
val in = new FileInputStream(inf) 
defer { in.close() } 
val out = new FileOutputStream(outf) 
defer{ out.close() } 
out.getChannel().transferFrom(in.getChannel, 
0,Long.MaxValue) 
}
https://github.com/rssh/scala-gopher 
❖ All “essential” functionality of CSP model 
❖ Fully asynchronous implementation 
❖ In normal language, with generic, typing, .. 
❖ …. more: scala is object-oriented.
https://github.com/rssh/scala-gopher 
Reusable block: 
❖ Set of input and output ports. 
❖ Some internal state 
❖ Functionality for signal transformations 
Transputer:
https://github.com/rssh/scala-gopher 
trait Bingo extends SelectTransputer { 
val inX = InPort[Int]() 
val inY = InPort[Int]() 
val out = OutPort[Boolean]() 
loop { 
case x: inX.read => 
val y = inY.read 
Console.println(s"Bingo checker, received ${x}, ${y}”) 
out.write(x==y) 
} 
}
https://github.com/rssh/scala-gopher 
trait Acceptor extends SelectTransputer { 
val inA = InPort[Boolean]() 
@volatile var (nBingos, nPairs) = (0,0) 
loop { 
case x: inA.read => 
Console.println(s"acceptor: ${nPairs} ${nBingos} ${x}") 
if (x) { 
nBingos += 1 
} 
nPairs += 1 
} 
}
https://github.com/rssh/scala-gopher 
val inX = gopherApi.makeChannel[Int]() 
val inY = gopherApi.makeChannel[Int]() 
val bingo = gopherApi.makeTransputer[Bingo] 
val acceptor = gopherApi.makeTransputer[Acceptor] 
bingo.inX connect inX 
bingo.inY connect inY 
bingo.out connect acceptor.inA 
(bingo + acceptor).start()
https://github.com/rssh/scala-gopher 
Transputers 
❖ Like ‘actors’ but works with ports 
❖ We can ‘wait’ inside 
❖ Connected via channels. 
❖ Restartable 
// in remind of INMOS transputers
Select 
select.foreach { 
…………… 
}
Par 
P1 
P2 P3 
P1 + P2 + P3
Replicate 
Mapping 
gopherApi.replicate[X](5)
Replicate 
gopherApi.replicate[X](5).in.distribute(_ % 10) 
Mapping 
Element e from in will be directed to (e%10) instance of X
https://github.com/rssh/scala-gopher 
❖ Select: [handle one transformation] 
❖ Parallel[ transputers are run in parallel] 
❖ Replicated 
❖ [ run in parallel N instances.] 
❖ [ custom logic for port shuffling ] 
Transputer Supervisor => ActorSystem 
Transputers
Implementation
Implementation 
sealed trait Continuated[T] 
case class ContRead[A,T]( callback , input, flow) extends Continuated[T] 
case class ContWrite[A,T]( callback , output, flow) .. 
case class ContSkip[T](callback, flow) … 
case class Done[T]( value , flow) …….. 
case object Never ………. 
// simular to Iteratee
Implementation 
sealed trait Continuated[T] 
case class ContRead[A,T]( callback , input, flow) extends Continuated[T]
Implementation 
sealed trait Continuated[T] 
case class ContRead[A,T]( 
function: ContRead[A,B] => Option[ 
ContRead.In[A] => 
Future[Continuated[T]] 
] , 
input, 
flow) extends Continuated[T]
Implementation 
sealed trait Continuated[T] 
case class ContRead[A,T]( 
function: ContRead[A,B] => Option[ 
ContRead.In[A] => 
Future[Continuated[T]] 
] , 
input, 
flow) extends Continuated[T] 
Value, Skip, Failure 
Read as Protocol: 
(check, if available, read, return next step)
Implementation 
Flow 
Dispatch Actor 
wait in channel read/write 
Flow 
wait in select
scala-gopher 
❖ CSP within scala ecosystem 
❖ Channels complementary to RxStreams 
❖ ‘async rw/async callback’ 
❖ Transducers complementary to Actors 
❖ ‘transform streams/event reactions’ 
❖ Can be used together.
scala-gopher 
❖ https://github.com/rssh/scala-gopher 
❖ Ruslan Shevchenko 
❖ @rssh1 
❖ Questions ?

More Related Content

What's hot

The Design of the Scalaz 8 Effect System
The Design of the Scalaz 8 Effect SystemThe Design of the Scalaz 8 Effect System
The Design of the Scalaz 8 Effect SystemJohn De Goes
 
Halogen: Past, Present, and Future
Halogen: Past, Present, and FutureHalogen: Past, Present, and Future
Halogen: Past, Present, and FutureJohn De Goes
 
Triton and symbolic execution on gdb
Triton and symbolic execution on gdbTriton and symbolic execution on gdb
Triton and symbolic execution on gdbWei-Bo Chen
 
Virtual machine and javascript engine
Virtual machine and javascript engineVirtual machine and javascript engine
Virtual machine and javascript engineDuoyi Wu
 
Triton and Symbolic execution on GDB@DEF CON China
Triton and Symbolic execution on GDB@DEF CON ChinaTriton and Symbolic execution on GDB@DEF CON China
Triton and Symbolic execution on GDB@DEF CON ChinaWei-Bo Chen
 
An introduction to ROP
An introduction to ROPAn introduction to ROP
An introduction to ROPSaumil Shah
 
Redesigning Common Lisp
Redesigning Common LispRedesigning Common Lisp
Redesigning Common Lispfukamachi
 
Scalaz By Example (An IO Taster) -- PDXScala Meetup Jan 2014
Scalaz By Example (An IO Taster) -- PDXScala Meetup Jan 2014Scalaz By Example (An IO Taster) -- PDXScala Meetup Jan 2014
Scalaz By Example (An IO Taster) -- PDXScala Meetup Jan 2014Susan Potter
 
Introduction to Rust language programming
Introduction to Rust language programmingIntroduction to Rust language programming
Introduction to Rust language programmingRodolfo Finochietti
 
LINQ Inside
LINQ InsideLINQ Inside
LINQ Insidejeffz
 
Incremental Development with Lisp: Building a Game and a Website
Incremental Development with Lisp: Building a Game and a WebsiteIncremental Development with Lisp: Building a Game and a Website
Incremental Development with Lisp: Building a Game and a WebsiteJames Long
 
Go concurrency
Go concurrencyGo concurrency
Go concurrencysiuyin
 
How Functions Work
How Functions WorkHow Functions Work
How Functions WorkSaumil Shah
 
A CTF Hackers Toolbox
A CTF Hackers ToolboxA CTF Hackers Toolbox
A CTF Hackers ToolboxStefan
 
Javascript engine performance
Javascript engine performanceJavascript engine performance
Javascript engine performanceDuoyi Wu
 
Modern C++ Lunch and Learn
Modern C++ Lunch and LearnModern C++ Lunch and Learn
Modern C++ Lunch and LearnPaul Irwin
 
Java/Scala Lab: Анатолий Кметюк - Scala SubScript: Алгебра для реактивного пр...
Java/Scala Lab: Анатолий Кметюк - Scala SubScript: Алгебра для реактивного пр...Java/Scala Lab: Анатолий Кметюк - Scala SubScript: Алгебра для реактивного пр...
Java/Scala Lab: Анатолий Кметюк - Scala SubScript: Алгебра для реактивного пр...GeeksLab Odessa
 

What's hot (20)

The Design of the Scalaz 8 Effect System
The Design of the Scalaz 8 Effect SystemThe Design of the Scalaz 8 Effect System
The Design of the Scalaz 8 Effect System
 
Halogen: Past, Present, and Future
Halogen: Past, Present, and FutureHalogen: Past, Present, and Future
Halogen: Past, Present, and Future
 
Triton and symbolic execution on gdb
Triton and symbolic execution on gdbTriton and symbolic execution on gdb
Triton and symbolic execution on gdb
 
Virtual machine and javascript engine
Virtual machine and javascript engineVirtual machine and javascript engine
Virtual machine and javascript engine
 
Triton and Symbolic execution on GDB@DEF CON China
Triton and Symbolic execution on GDB@DEF CON ChinaTriton and Symbolic execution on GDB@DEF CON China
Triton and Symbolic execution on GDB@DEF CON China
 
An introduction to ROP
An introduction to ROPAn introduction to ROP
An introduction to ROP
 
C# for Java Developers
C# for Java DevelopersC# for Java Developers
C# for Java Developers
 
Redesigning Common Lisp
Redesigning Common LispRedesigning Common Lisp
Redesigning Common Lisp
 
Advance ROP Attacks
Advance ROP AttacksAdvance ROP Attacks
Advance ROP Attacks
 
Rcpp11
Rcpp11Rcpp11
Rcpp11
 
Scalaz By Example (An IO Taster) -- PDXScala Meetup Jan 2014
Scalaz By Example (An IO Taster) -- PDXScala Meetup Jan 2014Scalaz By Example (An IO Taster) -- PDXScala Meetup Jan 2014
Scalaz By Example (An IO Taster) -- PDXScala Meetup Jan 2014
 
Introduction to Rust language programming
Introduction to Rust language programmingIntroduction to Rust language programming
Introduction to Rust language programming
 
LINQ Inside
LINQ InsideLINQ Inside
LINQ Inside
 
Incremental Development with Lisp: Building a Game and a Website
Incremental Development with Lisp: Building a Game and a WebsiteIncremental Development with Lisp: Building a Game and a Website
Incremental Development with Lisp: Building a Game and a Website
 
Go concurrency
Go concurrencyGo concurrency
Go concurrency
 
How Functions Work
How Functions WorkHow Functions Work
How Functions Work
 
A CTF Hackers Toolbox
A CTF Hackers ToolboxA CTF Hackers Toolbox
A CTF Hackers Toolbox
 
Javascript engine performance
Javascript engine performanceJavascript engine performance
Javascript engine performance
 
Modern C++ Lunch and Learn
Modern C++ Lunch and LearnModern C++ Lunch and Learn
Modern C++ Lunch and Learn
 
Java/Scala Lab: Анатолий Кметюк - Scala SubScript: Алгебра для реактивного пр...
Java/Scala Lab: Анатолий Кметюк - Scala SubScript: Алгебра для реактивного пр...Java/Scala Lab: Анатолий Кметюк - Scala SubScript: Алгебра для реактивного пр...
Java/Scala Lab: Анатолий Кметюк - Scala SubScript: Алгебра для реактивного пр...
 

Viewers also liked

Why scala is not my ideal language and what I can do with this
Why scala is not my ideal language and what I can do with thisWhy scala is not my ideal language and what I can do with this
Why scala is not my ideal language and what I can do with thisRuslan Shevchenko
 
Few simple-type-tricks in scala
Few simple-type-tricks in scalaFew simple-type-tricks in scala
Few simple-type-tricks in scalaRuslan Shevchenko
 
SE 20016 - programming languages landscape.
SE 20016 - programming languages landscape.SE 20016 - programming languages landscape.
SE 20016 - programming languages landscape.Ruslan Shevchenko
 
Happy birthday to Prof. Yunus - you change foundation
Happy birthday to Prof.  Yunus - you change foundationHappy birthday to Prof.  Yunus - you change foundation
Happy birthday to Prof. Yunus - you change foundationThe Grameen Creative Lab
 
The Last Poets-JAZZOETRY & MADE IN AMERIKKKA
The Last Poets-JAZZOETRY & MADE IN AMERIKKKAThe Last Poets-JAZZOETRY & MADE IN AMERIKKKA
The Last Poets-JAZZOETRY & MADE IN AMERIKKKARBG Communiversity
 
Making first impression in business writing dl
Making first impression in business writing dlMaking first impression in business writing dl
Making first impression in business writing dlDebbie Lahav
 
Notating pop music
Notating pop musicNotating pop music
Notating pop musicxjkoboe
 
The most incredible shopping malls
The most incredible shopping mallsThe most incredible shopping malls
The most incredible shopping mallsFernando Perdomo
 
Kessan 1708682945115077
Kessan 1708682945115077Kessan 1708682945115077
Kessan 1708682945115077yoshikawa0521
 
Team nova news c22 and c23 2014
Team nova news c22 and c23 2014Team nova news c22 and c23 2014
Team nova news c22 and c23 2014Kathrine Brazil
 
Palestra cheng nutrition
Palestra cheng nutritionPalestra cheng nutrition
Palestra cheng nutritionfruticultura
 
Kankroli Tyre Plant(KTP), A unit of JK Tyre & Industries Limited
Kankroli Tyre Plant(KTP), A unit of JK Tyre & Industries LimitedKankroli Tyre Plant(KTP), A unit of JK Tyre & Industries Limited
Kankroli Tyre Plant(KTP), A unit of JK Tyre & Industries LimitedIndia Water Portal
 
X2 t08 04 inequality techniques (2012)
X2 t08 04 inequality techniques (2012)X2 t08 04 inequality techniques (2012)
X2 t08 04 inequality techniques (2012)Nigel Simmons
 
Web Security Programming I I
Web  Security  Programming  I IWeb  Security  Programming  I I
Web Security Programming I IPavu Jas
 
Al Fazl International 21st October 2016 - Weekly
Al Fazl International 21st October  2016 - WeeklyAl Fazl International 21st October  2016 - Weekly
Al Fazl International 21st October 2016 - Weeklymuzaffertahir9
 
Getting Started with Splunk Breakout Session
Getting Started with Splunk Breakout SessionGetting Started with Splunk Breakout Session
Getting Started with Splunk Breakout SessionSplunk
 

Viewers also liked (20)

Why scala is not my ideal language and what I can do with this
Why scala is not my ideal language and what I can do with thisWhy scala is not my ideal language and what I can do with this
Why scala is not my ideal language and what I can do with this
 
Few simple-type-tricks in scala
Few simple-type-tricks in scalaFew simple-type-tricks in scala
Few simple-type-tricks in scala
 
SE 20016 - programming languages landscape.
SE 20016 - programming languages landscape.SE 20016 - programming languages landscape.
SE 20016 - programming languages landscape.
 
Happy birthday to Prof. Yunus - you change foundation
Happy birthday to Prof.  Yunus - you change foundationHappy birthday to Prof.  Yunus - you change foundation
Happy birthday to Prof. Yunus - you change foundation
 
D11jl
D11jlD11jl
D11jl
 
The Last Poets-JAZZOETRY & MADE IN AMERIKKKA
The Last Poets-JAZZOETRY & MADE IN AMERIKKKAThe Last Poets-JAZZOETRY & MADE IN AMERIKKKA
The Last Poets-JAZZOETRY & MADE IN AMERIKKKA
 
Oppa (33)
Oppa (33)Oppa (33)
Oppa (33)
 
Making first impression in business writing dl
Making first impression in business writing dlMaking first impression in business writing dl
Making first impression in business writing dl
 
Notating pop music
Notating pop musicNotating pop music
Notating pop music
 
The most incredible shopping malls
The most incredible shopping mallsThe most incredible shopping malls
The most incredible shopping malls
 
Kessan 1708682945115077
Kessan 1708682945115077Kessan 1708682945115077
Kessan 1708682945115077
 
Team nova news c22 and c23 2014
Team nova news c22 and c23 2014Team nova news c22 and c23 2014
Team nova news c22 and c23 2014
 
Palestra cheng nutrition
Palestra cheng nutritionPalestra cheng nutrition
Palestra cheng nutrition
 
Trigical for Trigeminal Neuralgia Treatment
Trigical for Trigeminal Neuralgia TreatmentTrigical for Trigeminal Neuralgia Treatment
Trigical for Trigeminal Neuralgia Treatment
 
Kankroli Tyre Plant(KTP), A unit of JK Tyre & Industries Limited
Kankroli Tyre Plant(KTP), A unit of JK Tyre & Industries LimitedKankroli Tyre Plant(KTP), A unit of JK Tyre & Industries Limited
Kankroli Tyre Plant(KTP), A unit of JK Tyre & Industries Limited
 
X2 t08 04 inequality techniques (2012)
X2 t08 04 inequality techniques (2012)X2 t08 04 inequality techniques (2012)
X2 t08 04 inequality techniques (2012)
 
Web Security Programming I I
Web  Security  Programming  I IWeb  Security  Programming  I I
Web Security Programming I I
 
Java PU solution
Java PU solution Java PU solution
Java PU solution
 
Al Fazl International 21st October 2016 - Weekly
Al Fazl International 21st October  2016 - WeeklyAl Fazl International 21st October  2016 - Weekly
Al Fazl International 21st October 2016 - Weekly
 
Getting Started with Splunk Breakout Session
Getting Started with Splunk Breakout SessionGetting Started with Splunk Breakout Session
Getting Started with Splunk Breakout Session
 

Similar to scala-gopher: async implementation of CSP for scala

Using Flow-based programming to write tools and workflows for Scientific Comp...
Using Flow-based programming to write tools and workflows for Scientific Comp...Using Flow-based programming to write tools and workflows for Scientific Comp...
Using Flow-based programming to write tools and workflows for Scientific Comp...Samuel Lampa
 
Implementation of 'go-like' language constructions in scala [english version]
Implementation of 'go-like' language constructions in scala [english version] Implementation of 'go-like' language constructions in scala [english version]
Implementation of 'go-like' language constructions in scala [english version] Ruslan Shevchenko
 
Diving into HHVM Extensions (php[tek] 2016)
Diving into HHVM Extensions (php[tek] 2016)Diving into HHVM Extensions (php[tek] 2016)
Diving into HHVM Extensions (php[tek] 2016)James Titcumb
 
Lego: A brick system build by scala
Lego: A brick system build by scalaLego: A brick system build by scala
Lego: A brick system build by scalalunfu zhong
 
A Recovering Java Developer Learns to Go
A Recovering Java Developer Learns to GoA Recovering Java Developer Learns to Go
A Recovering Java Developer Learns to GoMatt Stine
 
Haskell retrospective
Haskell retrospectiveHaskell retrospective
Haskell retrospectivechenge2k
 
Apache Gobblin: Bridging Batch and Streaming Data Integration. Big Data Meetu...
Apache Gobblin: Bridging Batch and Streaming Data Integration. Big Data Meetu...Apache Gobblin: Bridging Batch and Streaming Data Integration. Big Data Meetu...
Apache Gobblin: Bridging Batch and Streaming Data Integration. Big Data Meetu...Shirshanka Das
 
Stream or not to Stream?

Stream or not to Stream?
Stream or not to Stream?

Stream or not to Stream?
Lukasz Byczynski
 
Ruslan.shevchenko: most functional-day-kiev 2014
Ruslan.shevchenko: most functional-day-kiev 2014Ruslan.shevchenko: most functional-day-kiev 2014
Ruslan.shevchenko: most functional-day-kiev 2014Ruslan Shevchenko
 
Go lang introduction
Go lang introductionGo lang introduction
Go lang introductionyangwm
 
Writing Docker monitoring agent with Go
Writing Docker monitoring agent with GoWriting Docker monitoring agent with Go
Writing Docker monitoring agent with GoNaoki AINOYA
 
Communicating Sequential Processes (CSP) in JavaScript
Communicating Sequential Processes (CSP) in JavaScriptCommunicating Sequential Processes (CSP) in JavaScript
Communicating Sequential Processes (CSP) in JavaScriptMax Klymyshyn
 
TypeScript와 Flow: 
자바스크립트 개발에 정적 타이핑 도입하기
TypeScript와 Flow: 
자바스크립트 개발에 정적 타이핑 도입하기TypeScript와 Flow: 
자바스크립트 개발에 정적 타이핑 도입하기
TypeScript와 Flow: 
자바스크립트 개발에 정적 타이핑 도입하기Heejong Ahn
 
Building Go Web Apps
Building Go Web AppsBuilding Go Web Apps
Building Go Web AppsMark
 
Containerd Project Update: FOSDEM 2018
Containerd Project Update: FOSDEM 2018Containerd Project Update: FOSDEM 2018
Containerd Project Update: FOSDEM 2018Phil Estes
 
2015-GopherCon-Talk-Uptime.pdf
2015-GopherCon-Talk-Uptime.pdf2015-GopherCon-Talk-Uptime.pdf
2015-GopherCon-Talk-Uptime.pdfUtabeUtabe
 
Scala is java8.next()
Scala is java8.next()Scala is java8.next()
Scala is java8.next()daewon jeong
 
Debugging node in prod
Debugging node in prodDebugging node in prod
Debugging node in prodYunong Xiao
 

Similar to scala-gopher: async implementation of CSP for scala (20)

Using Flow-based programming to write tools and workflows for Scientific Comp...
Using Flow-based programming to write tools and workflows for Scientific Comp...Using Flow-based programming to write tools and workflows for Scientific Comp...
Using Flow-based programming to write tools and workflows for Scientific Comp...
 
Implementation of 'go-like' language constructions in scala [english version]
Implementation of 'go-like' language constructions in scala [english version] Implementation of 'go-like' language constructions in scala [english version]
Implementation of 'go-like' language constructions in scala [english version]
 
Diving into HHVM Extensions (php[tek] 2016)
Diving into HHVM Extensions (php[tek] 2016)Diving into HHVM Extensions (php[tek] 2016)
Diving into HHVM Extensions (php[tek] 2016)
 
Lego: A brick system build by scala
Lego: A brick system build by scalaLego: A brick system build by scala
Lego: A brick system build by scala
 
A Recovering Java Developer Learns to Go
A Recovering Java Developer Learns to GoA Recovering Java Developer Learns to Go
A Recovering Java Developer Learns to Go
 
Haskell retrospective
Haskell retrospectiveHaskell retrospective
Haskell retrospective
 
Apache Gobblin: Bridging Batch and Streaming Data Integration. Big Data Meetu...
Apache Gobblin: Bridging Batch and Streaming Data Integration. Big Data Meetu...Apache Gobblin: Bridging Batch and Streaming Data Integration. Big Data Meetu...
Apache Gobblin: Bridging Batch and Streaming Data Integration. Big Data Meetu...
 
Stream or not to Stream?

Stream or not to Stream?
Stream or not to Stream?

Stream or not to Stream?

 
Ruslan.shevchenko: most functional-day-kiev 2014
Ruslan.shevchenko: most functional-day-kiev 2014Ruslan.shevchenko: most functional-day-kiev 2014
Ruslan.shevchenko: most functional-day-kiev 2014
 
Python1
Python1Python1
Python1
 
Go lang introduction
Go lang introductionGo lang introduction
Go lang introduction
 
Twig Templating
Twig TemplatingTwig Templating
Twig Templating
 
Writing Docker monitoring agent with Go
Writing Docker monitoring agent with GoWriting Docker monitoring agent with Go
Writing Docker monitoring agent with Go
 
Communicating Sequential Processes (CSP) in JavaScript
Communicating Sequential Processes (CSP) in JavaScriptCommunicating Sequential Processes (CSP) in JavaScript
Communicating Sequential Processes (CSP) in JavaScript
 
TypeScript와 Flow: 
자바스크립트 개발에 정적 타이핑 도입하기
TypeScript와 Flow: 
자바스크립트 개발에 정적 타이핑 도입하기TypeScript와 Flow: 
자바스크립트 개발에 정적 타이핑 도입하기
TypeScript와 Flow: 
자바스크립트 개발에 정적 타이핑 도입하기
 
Building Go Web Apps
Building Go Web AppsBuilding Go Web Apps
Building Go Web Apps
 
Containerd Project Update: FOSDEM 2018
Containerd Project Update: FOSDEM 2018Containerd Project Update: FOSDEM 2018
Containerd Project Update: FOSDEM 2018
 
2015-GopherCon-Talk-Uptime.pdf
2015-GopherCon-Talk-Uptime.pdf2015-GopherCon-Talk-Uptime.pdf
2015-GopherCon-Talk-Uptime.pdf
 
Scala is java8.next()
Scala is java8.next()Scala is java8.next()
Scala is java8.next()
 
Debugging node in prod
Debugging node in prodDebugging node in prod
Debugging node in prod
 

More from Ruslan Shevchenko

Embedding Generic Monadic Transformer into Scala. [Tfp2022]
Embedding Generic Monadic Transformer into Scala. [Tfp2022]Embedding Generic Monadic Transformer into Scala. [Tfp2022]
Embedding Generic Monadic Transformer into Scala. [Tfp2022]Ruslan Shevchenko
 
Papers We Love / Kyiv : PAXOS (and little about other consensuses )
Papers We Love / Kyiv :  PAXOS (and little about other consensuses )Papers We Love / Kyiv :  PAXOS (and little about other consensuses )
Papers We Love / Kyiv : PAXOS (and little about other consensuses )Ruslan Shevchenko
 
Scala / Technology evolution
Scala  / Technology evolutionScala  / Technology evolution
Scala / Technology evolutionRuslan Shevchenko
 
{co/contr} variance from LSP
{co/contr} variance  from LSP{co/contr} variance  from LSP
{co/contr} variance from LSPRuslan Shevchenko
 
Java & low latency applications
Java & low latency applicationsJava & low latency applications
Java & low latency applicationsRuslan Shevchenko
 
Jslab rssh: JS as language platform
Jslab rssh:  JS as language platformJslab rssh:  JS as language platform
Jslab rssh: JS as language platformRuslan Shevchenko
 
Behind OOD: domain modelling in post-OO world.
Behind OOD:  domain modelling in post-OO world.Behind OOD:  domain modelling in post-OO world.
Behind OOD: domain modelling in post-OO world.Ruslan Shevchenko
 
Programming Languages: some news for the last N years
Programming Languages: some news for the last N yearsProgramming Languages: some news for the last N years
Programming Languages: some news for the last N yearsRuslan Shevchenko
 
JDays Lviv 2014: Java8 vs Scala: Difference points & innovation stream
JDays Lviv 2014:  Java8 vs Scala:  Difference points & innovation streamJDays Lviv 2014:  Java8 vs Scala:  Difference points & innovation stream
JDays Lviv 2014: Java8 vs Scala: Difference points & innovation streamRuslan Shevchenko
 
Web architecture - overview of techniques.
Web architecture - overview of  techniques.Web architecture - overview of  techniques.
Web architecture - overview of techniques.Ruslan Shevchenko
 
Javascript in modern scala backend. [russian]
Javascript in modern scala backend.  [russian]  Javascript in modern scala backend.  [russian]
Javascript in modern scala backend. [russian] Ruslan Shevchenko
 
implementation of 'go'-like language constructions in scala (russian)
implementation of 'go'-like language constructions in scala (russian)implementation of 'go'-like language constructions in scala (russian)
implementation of 'go'-like language constructions in scala (russian)Ruslan Shevchenko
 
Play/Scala as application platform (for http://wbcamp.in.ua 2013)
Play/Scala as application platform  (for http://wbcamp.in.ua 2013)Play/Scala as application platform  (for http://wbcamp.in.ua 2013)
Play/Scala as application platform (for http://wbcamp.in.ua 2013)Ruslan Shevchenko
 

More from Ruslan Shevchenko (20)

Embedding Generic Monadic Transformer into Scala. [Tfp2022]
Embedding Generic Monadic Transformer into Scala. [Tfp2022]Embedding Generic Monadic Transformer into Scala. [Tfp2022]
Embedding Generic Monadic Transformer into Scala. [Tfp2022]
 
Svitla talks 2021_03_25
Svitla talks 2021_03_25Svitla talks 2021_03_25
Svitla talks 2021_03_25
 
Akka / Lts behavior
Akka / Lts behaviorAkka / Lts behavior
Akka / Lts behavior
 
Papers We Love / Kyiv : PAXOS (and little about other consensuses )
Papers We Love / Kyiv :  PAXOS (and little about other consensuses )Papers We Love / Kyiv :  PAXOS (and little about other consensuses )
Papers We Love / Kyiv : PAXOS (and little about other consensuses )
 
Scala / Technology evolution
Scala  / Technology evolutionScala  / Technology evolution
Scala / Technology evolution
 
{co/contr} variance from LSP
{co/contr} variance  from LSP{co/contr} variance  from LSP
{co/contr} variance from LSP
 
Scala jargon cheatsheet
Scala jargon cheatsheetScala jargon cheatsheet
Scala jargon cheatsheet
 
Java & low latency applications
Java & low latency applicationsJava & low latency applications
Java & low latency applications
 
IDLs
IDLsIDLs
IDLs
 
R ext world/ useR! Kiev
R ext world/ useR!  KievR ext world/ useR!  Kiev
R ext world/ useR! Kiev
 
Jslab rssh: JS as language platform
Jslab rssh:  JS as language platformJslab rssh:  JS as language platform
Jslab rssh: JS as language platform
 
Behind OOD: domain modelling in post-OO world.
Behind OOD:  domain modelling in post-OO world.Behind OOD:  domain modelling in post-OO world.
Behind OOD: domain modelling in post-OO world.
 
Programming Languages: some news for the last N years
Programming Languages: some news for the last N yearsProgramming Languages: some news for the last N years
Programming Languages: some news for the last N years
 
JDays Lviv 2014: Java8 vs Scala: Difference points & innovation stream
JDays Lviv 2014:  Java8 vs Scala:  Difference points & innovation streamJDays Lviv 2014:  Java8 vs Scala:  Difference points & innovation stream
JDays Lviv 2014: Java8 vs Scala: Difference points & innovation stream
 
Web architecture - overview of techniques.
Web architecture - overview of  techniques.Web architecture - overview of  techniques.
Web architecture - overview of techniques.
 
R scala 17_05_2014
R scala 17_05_2014R scala 17_05_2014
R scala 17_05_2014
 
Javascript in modern scala backend. [russian]
Javascript in modern scala backend.  [russian]  Javascript in modern scala backend.  [russian]
Javascript in modern scala backend. [russian]
 
Osdn2013 rssh
Osdn2013 rsshOsdn2013 rssh
Osdn2013 rssh
 
implementation of 'go'-like language constructions in scala (russian)
implementation of 'go'-like language constructions in scala (russian)implementation of 'go'-like language constructions in scala (russian)
implementation of 'go'-like language constructions in scala (russian)
 
Play/Scala as application platform (for http://wbcamp.in.ua 2013)
Play/Scala as application platform  (for http://wbcamp.in.ua 2013)Play/Scala as application platform  (for http://wbcamp.in.ua 2013)
Play/Scala as application platform (for http://wbcamp.in.ua 2013)
 

Recently uploaded

Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEEVICTOR MAESTRE RAMIREZ
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...confluent
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsChristian Birchler
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsSafe Software
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxTier1 app
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Angel Borroy López
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样umasea
 
PREDICTING RIVER WATER QUALITY ppt presentation
PREDICTING  RIVER  WATER QUALITY  ppt presentationPREDICTING  RIVER  WATER QUALITY  ppt presentation
PREDICTING RIVER WATER QUALITY ppt presentationvaddepallysandeep122
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfDrew Moseley
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Cizo Technology Services
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Mater
 
Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Hr365.us smith
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalLionel Briand
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf31events.com
 
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdfExploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdfkalichargn70th171
 
Cyber security and its impact on E commerce
Cyber security and its impact on E commerceCyber security and its impact on E commerce
Cyber security and its impact on E commercemanigoyal112
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureDinusha Kumarasiri
 

Recently uploaded (20)

Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEE
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data Streams
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
 
Odoo Development Company in India | Devintelle Consulting Service
Odoo Development Company in India | Devintelle Consulting ServiceOdoo Development Company in India | Devintelle Consulting Service
Odoo Development Company in India | Devintelle Consulting Service
 
PREDICTING RIVER WATER QUALITY ppt presentation
PREDICTING  RIVER  WATER QUALITY  ppt presentationPREDICTING  RIVER  WATER QUALITY  ppt presentation
PREDICTING RIVER WATER QUALITY ppt presentation
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdf
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
 
2.pdf Ejercicios de programación competitiva
2.pdf Ejercicios de programación competitiva2.pdf Ejercicios de programación competitiva
2.pdf Ejercicios de programación competitiva
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)
 
Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)
 
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort ServiceHot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive Goal
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf
 
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdfExploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
 
Cyber security and its impact on E commerce
Cyber security and its impact on E commerceCyber security and its impact on E commerce
Cyber security and its impact on E commerce
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with Azure
 

scala-gopher: async implementation of CSP for scala