Іван Лаврів "transducers for ruby developers"

17
Transducers for ruby developers @ilavriv

Upload: forge-events

Post on 15-Jan-2017

156 views

Category:

Engineering


5 download

TRANSCRIPT

Page 1: Іван Лаврів "Transducers for ruby developers"

Transducers for ruby developers

@ilavriv

Page 2: Іван Лаврів "Transducers for ruby developers"

About MeFront - End Engineer temy.co

Rust meetups co - organizer

speeker

Teacher for PLLUG Community

twitter: @ilavriv

github: lavriv92

Page 3: Іван Лаврів "Transducers for ruby developers"

History Presented by Rich Hickey

Implemented on Clojure

Page 4: Іван Лаврів "Transducers for ruby developers"
Page 5: Іван Лаврів "Transducers for ruby developers"

What is transducers

Composable algorithmic transformations

Page 6: Іван Лаврів "Transducers for ruby developers"

Concept of transducers All operations with collections can be implemented with redice

function

We don`t know nothing about types of collections

We can compose results

Collectiong results of computions

Page 7: Іван Лаврів "Transducers for ruby developers"

Function composition compose(collection, transformation1, transformation2, … , transformationN)

Page 8: Іван Лаврів "Transducers for ruby developers"

But!Results not reusable

Different types of results

Page 9: Іван Лаврів "Transducers for ruby developers"

Signature

(whatever, input -> whatever ) -> (whatever -> input -> whatever)

Page 10: Іван Лаврів "Transducers for ruby developers"
Page 11: Іван Лаврів "Transducers for ruby developers"

ImplementationClojure - native

Erlang

Ruby

Python3

Page 12: Іван Лаврів "Transducers for ruby developers"

Why i can use transducers Text processing

Operations for collections map, filter, reduce

Needs better performance

Page 13: Іван Лаврів "Transducers for ruby developers"

Transducers map

filter

take

...

Page 14: Іван Лаврів "Transducers for ruby developers"

Transducers and Ruby require ‘transducers’

T = Transducers

t = T.compose(

T.filter(:even?),

T.map(|n| n * 2),

T.take(5))

result = T.transduce(t, :<<, [], 1..100)

Page 15: Іван Лаврів "Transducers for ruby developers"

Ruby transducers-ruby by cognitech lab

Github: https://github.com/cognitect-labs/transducers-ruby

Page 16: Іван Лаврів "Transducers for ruby developers"

Linkshttp://clojure.org/transducers

http://clojure.com/blog/2012/05/15/anatomy-of-reducer.html

https://www.youtube.com/watch?v=6mTbuzafcII

http://cognitect-labs.github.io/

Page 17: Іван Лаврів "Transducers for ruby developers"

Questions?