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

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

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

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

Avatar for Russel Winder

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: [email protected] twitter: @russel_winder Web: http://www.russel.org.uk
  2. 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. • …
  3. 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.
  4. 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 • ?
  5. 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.
  6. 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.
  7. 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.
  8. Copyright © 2015 Russel Winder 14 Frege • Pure functional

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

    • Object-oriented. • Integrated modules system via pods. • Targets JVM and CLR.
  10. 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.
  11. 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
  12. 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.
  13. Copyright © 2015 Russel Winder 33 Because addition is commutative

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

    c + d + e + f = ( a + b ) + ( c + d ) + ( e + f )
  15. 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.
  16. 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.
  17. Copyright © 2015 Russel Winder 48 Java is not the

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

    Frege, … are the future of static languages on the Java Platform.
  19. Copyright © 2015 Russel Winder 52 Java 8 has been

    the biggest revolution in Java since 1994. Bigger than Java 5.
  20. 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.
  21. Copyright © 2015 Russel Winder 57 JavaFX in the distribution:

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

    default methods in interfaces, associated collections enhancements.
  23. Copyright © 2015 Russel Winder 60 Java is Dead Long

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

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

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

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