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

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