Golo LyonJUG 2019

Golo LyonJUG 2019

Presented with Philippe Charrière at the Lyon JUG January 2019 session on JVM languages. Other sessions featured Kotlin, Scala and Clojure.

In this talk we presented some elements of Golo, its history, and a binding on top of Vert.x.

50a17cd98aab2cc4d8e144741e11b1b7?s=128

Julien Ponge

January 23, 2019
Tweet

Transcript

  1. Le petit langage fonctionnel (mais pas que) made in Lyon

    que vous pouvez modifier vous-mêmes. Julien Ponge Philippe Charrière
  2. Principal Software Engineer ( ) @jponge

  3. None
  4. Technical Account Manager ( ) @k33g_org Customer Success Team

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

  6. JooFlux Dynamic AOP using invokedynamic April 2012

  7. 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, ...)
  8. July 2012 Summer hack for fun…

  9. August 2012 Fibonacci… no way back!

  10. May 2013 My 1st PR: readln

  11. 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)
  12. 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
  13. println("http://google.com": toURL(): getContent(): readFully()) Augmentation on String Augmentation on InputStream

  14. 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
  15. https://unsplash.com/photos/i2KibvLYjqk Golo explorations (+ with Vert.x)

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

  17. Baseline Java Clojure Golo Groovy JRuby Jython Nashorn ops/s 0

    75000 150000 225000 300000 Zulu 1.8 GraalVM Trimorphic dispatch
  18. Baseline Java Clojure Golo Groovy JRuby Jython Nashorn ms/op 0

    400 800 1200 1600 Zulu 1.8 GraalVM GCD (euclidian)
  19. Baseline Java Clojure Golo Groovy 0 75 150 225 300

    Zulu 1.8 GraalVM
  20. 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
  21. Baseline Java (copy) Baseline Java (streams) Golo 0 15 30

    45 60 GraalVM
  22. https://golo-lang.org/ Julien Ponge Philippe Charrière