Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Java is Dead, Long Live Ceylon, Kotlin, etc.

Java is Dead, Long Live Ceylon, Kotlin, etc.

Slides from my DevoxxUK 2015 presentation. Compare and contrast of JVM-based strongly-typed, statically compiled languages: Java, Ceylon, Kotlin, Scala, Frege, Groovy.

Code is on GitHub: https://github.com/russel/Pi_Quadrature

Ca04455902d1b207348b6d406432718f?s=128

Russel Winder

June 19, 2015
Tweet

More Decks by Russel Winder

Other Decks in Technology

Transcript

  1. Copyright © 2015 Russel Winder 1 Java is Dead Long

    Live Ceylon, Kotlin, etc. Dr Russel Winder email: russel@winder.org.uk twitter: @russel_winder Web: http://www.russel.org.uk
  2. Copyright © 2015 Russel Winder 2 Java is Dead

  3. Copyright © 2015 Russel Winder 3 Java is Dying

  4. Copyright © 2015 Russel Winder 4 What are the symptoms?

    • Java is seriously verbose. • Java has poor type inference. • Java has only low-level support for concurrency and parallelism. • Java generates a dependency hell . “ ” • Java is a 1990s imperative language that isn't really object-oriented. • …
  5. Copyright © 2015 Russel Winder 5 Is there a cure?

    • Can Java: • Be less verbose. • Have better type inferencing. • Do concurrency and parallelism better. (Doug Lea, Brian Goetz and others have been doing great work on this for a while, but ) … • Have a reasonable module system, cf. Jigsaw vs. OSGi. • Be a real object-oriented language.
  6. Copyright © 2015 Russel Winder 6 Prognosis: not great

  7. Copyright © 2015 Russel Winder 7 Trust me I'm a

    doctor.
  8. Copyright © 2015 Russel Winder 8 Alternatives?

  9. Copyright © 2015 Russel Winder 9 Create a new language

    • Java is a statically typed, compiled language, so create a new statically typed compiled language: • Kotlin, Ceylon • Scala, Frege • Fantom • Gosu • ?
  10. Copyright © 2015 Russel Winder 10 Gross oversimplifications…

  11. Copyright © 2015 Russel Winder 11 Scala • Integrates functional

    and object-oriented. • Very declarative style of expression. • Strong support for data parallelism. Also Akka for actors and such-like. • Strong static type checking with inferencing and reified generic type parameters.
  12. Copyright © 2015 Russel Winder 12 Kotlin • Top-level functions.

    • Object-oriented, with functional elements • Strong static type checking with inferencing. • Has modules. • Allows extension methods. • Compiles to JavaScript or JVM to support end- to-end Web applications development. • Runs on Android.
  13. Copyright © 2015 Russel Winder 13 Ceylon • Top-level functions.

    • Object oriented with functional features. • Strong static typing with inference. • Explicit module system. • JavaScript and JVM backends so as to be end-to-end for Web applications development.
  14. Copyright © 2015 Russel Winder 14 Frege • Pure functional

    language based on Haskell. • Completely declarative. • Strong static type checking.
  15. Copyright © 2015 Russel Winder 15 Fantom • Top-level functions.

    • Object-oriented. • Integrated modules system via pods. • Targets JVM and CLR.
  16. Copyright © 2015 Russel Winder 16 Gosu • Top-level functions.

    • Object-oriented. • Scripts.
  17. Copyright © 2015 Russel Winder 17 ? The identity of

    this statically typed, object-oriented (with functional bits) language for the JVM will remain unnamed at this time to preserve an air of mystery and suspense.
  18. Copyright © 2015 Russel Winder 18

  19. Copyright © 2015 Russel Winder 19 Code!

  20. Copyright © 2015 Russel Winder 20

  21. Copyright © 2015 Russel Winder 21 

  22. Copyright © 2015 Russel Winder 22

  23. Copyright © 2015 Russel Winder 23 What is the value

    of ?
  24. Copyright © 2015 Russel Winder 24 Well that's easy, it's…

  25. Copyright © 2015 Russel Winder 25 

  26. Copyright © 2015 Russel Winder 26 Exactly.

  27. Copyright © 2015 Russel Winder 27 It's simples. Александр Орлов

    2009
  28. Copyright © 2015 Russel Winder 28 But is it irrational?

  29. Copyright © 2015 Russel Winder 29 Approximating  • What

    is it's value represented as a floating point number? • We can only obtain an approximation. • A plethora of possible algorithms to choose from, a popular one is to employ the following integral equation. π 4 =∫ 0 1 1 1+x2 dx
  30. Copyright © 2015 Russel Winder 30 One possible algorithm •

    Use quadrature to estimate the value of the integral which is the area under the curve. – π= 4 n ∑ i=1 n 1 1+( i−0.5 n ) 2 With n = 3 not much to do, but potentially lots of error. Use n = 107 or n = 109? Embarrassingly parallel.
  31. Copyright © 2015 Russel Winder 31 Code!

  32. Copyright © 2015 Russel Winder 32 Java Ceylon Kotlin Scala

    Frege
  33. Copyright © 2015 Russel Winder 33 Because addition is commutative

    and associative, expression can be decomposed into sums of partial sums.
  34. Copyright © 2015 Russel Winder 34 a + b +

    c + d + e + f = ( a + b ) + ( c + d ) + ( e + f )
  35. Copyright © 2015 Russel Winder 35 Scatter Gather — map

    reduce data parallel
  36. Copyright © 2015 Russel Winder 36 Code!

  37. Copyright © 2015 Russel Winder 37 Java Ceylon Kotlin Scala

  38. Copyright © 2015 Russel Winder 38 ?

  39. Copyright © 2015 Russel Winder 39 Surprise time…

  40. Copyright © 2015 Russel Winder 40 JVM is a Groovy

    place
  41. Copyright © 2015 Russel Winder 41 Groovy • Top-level functions.

    • Object-oriented with functional features. • Extension methods. • Compiles to JVM bytes codes or JavaScript, cf. GrooScript. • Runs on Android. • Scripts. • A dynamic language with a run time meta-object protocol.
  42. Copyright © 2015 Russel Winder 42 Groovy A statically typed,

    compiled language.
  43. Copyright © 2015 Russel Winder 43 @TypeChecked @CompileStatic

  44. Copyright © 2015 Russel Winder 44 Groovy • @TypeChecked: •

    Traditional dynamic Groovy but with full static (compile-time) type checking. • @CompileStatic: • Full static typechecked, compilation to bytecode at compile time. • No dynamic meta- object protocol.
  45. Copyright © 2015 Russel Winder 45 Code!

  46. Copyright © 2015 Russel Winder 46

  47. Copyright © 2015 Russel Winder 47 Code!

  48. Copyright © 2015 Russel Winder 48 Java is not the

    future programming language for the Java Platform.
  49. Copyright © 2015 Russel Winder 49 Kotlin, Ceylon, Groovy, Scala,

    Frege, … are the future of static languages on the Java Platform.
  50. Copyright © 2015 Russel Winder 50 2014-03-18

  51. Copyright © 2015 Russel Winder 51 Java 8 Released

  52. Copyright © 2015 Russel Winder 52 Java 8 has been

    the biggest revolution in Java since 1994. Bigger than Java 5.
  53. Copyright © 2015 Russel Winder 53 Has Java revived? Is

    this a new lease of life?
  54. Copyright © 2015 Russel Winder 54 What's Interesting in Java

    8? • G1 garbage collector. • Nashorn. • JavaFX. • Lambda expressions. • Default methods in interfaces (traits). • Enhanced collections. • Method references.
  55. Copyright © 2015 Russel Winder 55 G1 garbage collector is

    now the standard: no more PermGen.
  56. Copyright © 2015 Russel Winder 56 Nashorn comes as standard:

    Server-side JavaScript without Rhino.
  57. Copyright © 2015 Russel Winder 57 JavaFX in the distribution:

    you will want to use GroovyFX though. Use Griffon
  58. Copyright © 2015 Russel Winder 58 Lambda expressions, method references

    default methods in interfaces, associated collections enhancements.
  59. Copyright © 2015 Russel Winder 59 Code!

  60. Copyright © 2015 Russel Winder 60 Java is Dead Long

    Live Kotlin, Ceylon, etc. Russel Winder email: russel@winder.org.uk twitter: @russel_winder Web: http://www.russel.org.uk
  61. Copyright © 2015 Russel Winder 61 Java is Dead Long

    Live Java Russel Winder email: russel@winder.org.uk twitter: @russel_winder Web: http://www.russel.org.uk
  62. Copyright © 2015 Russel Winder 62 Java is Dead Long

    Live Groovy Russel Winder email: russel@winder.org.uk twitter: @russel_winder Web: http://www.russel.org.uk
  63. Copyright © 2015 Russel Winder 63 Java is Dead Long

    Live Kotlin, Ceylon, etc. Russel Winder email: russel@winder.org.uk twitter: @russel_winder Web: http://www.russel.org.uk