More Related Content Similar to Java is Dead, Long Live Ceylon, Kotlin, etc (20) More from Russel Winder (20) Java is Dead, Long Live Ceylon, Kotlin, etc1. 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
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.
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
● ?
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.
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.
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 )
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.
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.
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.
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.
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