Slide 1

Slide 1 text

Le petit langage fonctionnel (mais pas que) made in Lyon que vous pouvez modifier vous-mêmes. Julien Ponge Philippe Charrière

Slide 2

Slide 2 text

Principal Software Engineer ( ) @jponge

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

Technical Account Manager ( ) @k33g_org Customer Success Team

Slide 5

Slide 5 text

Jamais édité (oss) https://github.com/3monkeys/play.rules

Slide 6

Slide 6 text

JooFlux Dynamic AOP using invokedynamic April 2012

Slide 7

Slide 7 text

public static java.lang.Object foo(java.lang.Object); Code: 0: ldc #19 2: invokedynamic #29, 0 7: pop 8: aconst_null 9: areturn runtime-bound call site method handles + combinators (type, logic, ...)

Slide 8

Slide 8 text

July 2012 Summer hack for fun…

Slide 9

Slide 9 text

August 2012 Fibonacci… no way back!

Slide 10

Slide 10 text

May 2013 My 1st PR: readln

Slide 11

Slide 11 text

module hello function main = |args| { let message = "Hello, LyonJUG!” var a = 1 a = a + 1 display(message) display(">>> " + a) } local function display = |what| -> println(what)

Slide 12

Slide 12 text

let data = [ [1, 2, 3], tuple[1, 2, 3], array[1, 2, 3], set[1, 2, 3, 3, 1], map[ ["a", 10], ["b", 20] ], vector[1, 2, 3], list[1, 2, 3] ] Tuples Arrays (JVM) LinkedHashSet LinkedHashMap ArrayList LinkedList

Slide 13

Slide 13 text

println("http://google.com": toURL(): getContent(): readFully()) Augmentation on String Augmentation on InputStream

Slide 14

Slide 14 text

struct Point = { x, y } augment Point { function moveBy = |this, dx, dy| { this: x(this: x() + dx) this: y(this: y() + dy) return this } } # struct Point{x=11, y=-4} println(Point(1, 1): moveBy(10, -5)) + toString, equals, hashCode

Slide 15

Slide 15 text

https://unsplash.com/photos/i2KibvLYjqk Golo explorations (+ with Vert.x)

Slide 16

Slide 16 text

https://unsplash.com/photos/sb7RUrRMaC4 Let’s talk about benchmarks…

Slide 17

Slide 17 text

Baseline Java Clojure Golo Groovy JRuby Jython Nashorn ops/s 0 75000 150000 225000 300000 Zulu 1.8 GraalVM Trimorphic dispatch

Slide 18

Slide 18 text

Baseline Java Clojure Golo Groovy JRuby Jython Nashorn ms/op 0 400 800 1200 1600 Zulu 1.8 GraalVM GCD (euclidian)

Slide 19

Slide 19 text

Baseline Java Clojure Golo Groovy 0 75 150 225 300 Zulu 1.8 GraalVM

Slide 20

Slide 20 text

Baseline Java (copy) Baseline Java (streams) Clojure Golo Groovy JRuby Nashorn us/s 0 175 350 525 700 Zulu 1.8 GraalVM filter/map/reduce

Slide 21

Slide 21 text

Baseline Java (copy) Baseline Java (streams) Golo 0 15 30 45 60 GraalVM

Slide 22

Slide 22 text

https://golo-lang.org/ Julien Ponge Philippe Charrière