Java is dead, long live Scala Kotlin Ceylon etc.

4,720 views
4,477 views

Published on

Presentation at ACCU 2014 focused on Java 8 and the languages trying to compete against it, include Scala, Kotlin, Ceylon, and Groovy.

Published in: Technology
3 Comments
12 Likes
Statistics
Notes
No Downloads
Views
Total views
4,720
On SlideShare
0
From Embeds
0
Number of Embeds
85
Actions
Shares
0
Downloads
36
Comments
3
Likes
12
Embeds 0
No embeds

No notes for slide

Java is dead, long live Scala Kotlin Ceylon etc.

  1. 1. Copyright © 2014 Russel Winder 1 Java is Dead Long Live Scala, Kotlin, Ceylon, etc. Russel Winder email: russel@winder.org.uk xmpp: russel@winder.org.uk twitter: @russel_winder Web: http://www.russel.org.uk
  2. 2. Copyright © 2014 Russel Winder 2 Java is Dead
  3. 3. Copyright © 2014 Russel Winder 3 Java is Dying
  4. 4. Copyright © 2014 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. 5. Copyright © 2014 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 actually been doing this for a while.) ● Have a reasonable module system, cf. Jigsaw vs. OSGi. ● Be a real object-oriented language.
  6. 6. Copyright © 2014 Russel Winder 6 Prognosis: not great
  7. 7. Copyright © 2014 Russel Winder 7 Alternatives?
  8. 8. Copyright © 2014 Russel Winder 8 Create a new language ● Java is a statically typed, compiled language, so create a new statically typed compiled language: ● Scala ● Kotlin ● Ceylon ● Fantom ● ?
  9. 9. Copyright © 2014 Russel Winder 9 Gross oversimplifications…
  10. 10. Copyright © 2014 Russel Winder 10 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.
  11. 11. Copyright © 2014 Russel Winder 11 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.
  12. 12. Copyright © 2014 Russel Winder 12 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.
  13. 13. Copyright © 2014 Russel Winder 13 Fantom ● Top-level functions. ● Object-oriented. ● Integrated modules system via pods. ● Targets JVM and CLR.
  14. 14. Copyright © 2014 Russel Winder 14 ? The identity of this statically typed, object-oriented (with functional bits) language for the JVM will remain unnamed at this time to preserve the air of mystery and suspense.
  15. 15. Copyright © 2014 Russel Winder 15
  16. 16. Copyright © 2014 Russel Winder 16 Code!
  17. 17. Copyright © 2014 Russel Winder 17
  18. 18. Copyright © 2014 Russel Winder 18 
  19. 19. Copyright © 2014 Russel Winder 19
  20. 20. Copyright © 2014 Russel Winder 20 What is the value of ? Easy, it's known exactly. It's . Obviously.
  21. 21. Copyright © 2014 Russel Winder 21 It's simples Александр Орлов 2009
  22. 22. Copyright © 2014 Russel Winder 22 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
  23. 23. Copyright © 2014 Russel Winder 23 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.
  24. 24. Copyright © 2014 Russel Winder 24 Because addition is commutative and associative, expression can be decomposed into sums of partial sums.
  25. 25. Copyright © 2014 Russel Winder 25 a + b + c + d + e + f = ( a + b ) + ( c + d ) + ( e + f )
  26. 26. Copyright © 2014 Russel Winder 26 Scatter Gather— map reduce data parallel
  27. 27. Copyright © 2014 Russel Winder 27 Code!
  28. 28. Copyright © 2014 Russel Winder 28 Scala Kotlin Ceylon Fantom
  29. 29. Copyright © 2014 Russel Winder 29 ?
  30. 30. Copyright © 2014 Russel Winder 30 Surprise time…
  31. 31. Copyright © 2014 Russel Winder 31 JVM is a Groovy place
  32. 32. Copyright © 2014 Russel Winder 32 Groovy ● Top-level functions ● Object-oriented with functional features. ● Extension methods. ● Compiles to JVM bytes codes or JavaScript (cf. GrooScript) ● A dynamic language with a run time meta-object protocol.
  33. 33. Copyright © 2014 Russel Winder 33 Groovy A statically typed, compiled language.
  34. 34. Copyright © 2014 Russel Winder 34 @TypeChecked @CompileStatic
  35. 35. Copyright © 2014 Russel Winder 35 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.
  36. 36. Copyright © 2014 Russel Winder 36 Code!
  37. 37. Copyright © 2014 Russel Winder 37
  38. 38. Copyright © 2014 Russel Winder 38 Code!
  39. 39. Copyright © 2014 Russel Winder 39 Did I mention invokedynamic?
  40. 40. Copyright © 2014 Russel Winder 40 Code!
  41. 41. Copyright © 2014 Russel Winder 41 Java is Dead!
  42. 42. Copyright © 2014 Russel Winder 42 Groovy (or Scala, Kotlin, Ceylon, Fantom, )… is the future of static languages on the JVM.
  43. 43. Copyright © 2014 Russel Winder 43 2014-03-18
  44. 44. Copyright © 2014 Russel Winder 44 Java 8 Released
  45. 45. Copyright © 2014 Russel Winder 45 Java 8 is the biggest revolution in Java since 1994. Bigger than Java 5.
  46. 46. Copyright © 2014 Russel Winder 46 Has Java revived? Is this a new lease of life?
  47. 47. Copyright © 2014 Russel Winder 47 What's Interesting in Java 8? ● G1 garbage collector. ● Nashorn. ● JavaFX. ● Lambda expressions. ● Default methods in interfaces (traits). ● Enhanced collections.
  48. 48. Copyright © 2014 Russel Winder 48 G1 garbage collector is now the standard: no more PermGen.
  49. 49. Copyright © 2014 Russel Winder 49 Nashorn comes as standard: Server-side JavaScript without Rhino.
  50. 50. Copyright © 2014 Russel Winder 50 JavaFX in the distribution: you will want to use GroovyFX though.
  51. 51. Copyright © 2014 Russel Winder 51 Lambda expressions, default methods in interfaces, associated collections enhancements.
  52. 52. Copyright © 2014 Russel Winder 52 Code!
  53. 53. Copyright © 2014 Russel Winder 53
  54. 54. Copyright © 2014 Russel Winder 54 Code!
  55. 55. Copyright © 2014 Russel Winder 55 Java is Dead Long Live Scala, Kotlin, Ceylon, etc. Russel Winder email: russel@winder.org.uk xmpp: russel@winder.org.uk twitter: @russel_winder Web: http://www.russel.org.uk
  56. 56. Copyright © 2014 Russel Winder 56 Java is Dead Long Live Java Russel Winder email: russel@winder.org.uk xmpp: russel@winder.org.uk twitter: @russel_winder Web: http://www.russel.org.uk
  57. 57. Copyright © 2014 Russel Winder 57 Java is Dead Long Live Groovy Russel Winder email: russel@winder.org.uk xmpp: russel@winder.org.uk twitter: @russel_winder Web: http://www.russel.org.uk

×