SlideShare ist ein Scribd-Unternehmen logo
1 von 48
Downloaden Sie, um offline zu lesen
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 ?

Weitere ähnliche Inhalte

Was ist angesagt?

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
 

Was ist angesagt? (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: Алгебра для реактивного пр...
 

Andere mochten auch

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
 

Andere mochten auch (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
 

Ähnlich wie 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
 

Ähnlich wie 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
 

Mehr von 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
 

Mehr von 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)
 

Kürzlich hochgeladen

A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxComplianceQuest1
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdfWave PLM
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionSolGuruz
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...OnePlan Solutions
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantAxelRicardoTrocheRiq
 
DNT_Corporate presentation know about us
DNT_Corporate presentation know about usDNT_Corporate presentation know about us
DNT_Corporate presentation know about usDynamic Netsoft
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software DevelopersVinodh Ram
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...OnePlan Solutions
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Steffen Staab
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...gurkirankumar98700
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...harshavardhanraghave
 

Kürzlich hochgeladen (20)

A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service Consultant
 
DNT_Corporate presentation know about us
DNT_Corporate presentation know about usDNT_Corporate presentation know about us
DNT_Corporate presentation know about us
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software Developers
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 

scala-gopher: async implementation of CSP for scala