Java is dead, long live Scala Kotlin Ceylon etc.

Post on 29-Nov-2014

1.238 views 0 download

description

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

Transcript of Java is dead, long live Scala Kotlin Ceylon etc.

Copyright © 2014 Russel Winder 1

Java is DeadLong Live Scala, Kotlin, Ceylon,

etc.

Russel Winder

email: russel@winder.org.ukxmpp: russel@winder.org.uk

twitter: @russel_winderWeb: http://www.russel.org.uk

Copyright © 2014 Russel Winder 2

Java is Dead

Copyright © 2014 Russel Winder 3

Java is Dying

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.

● …

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.

Copyright © 2014 Russel Winder 6

Prognosis: not great

Copyright © 2014 Russel Winder 7

Alternatives?

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

● ?

Copyright © 2014 Russel Winder 9

Gross oversimplifications…

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.

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.

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.

Copyright © 2014 Russel Winder 13

Fantom

● Top-level functions.

● Object-oriented.

● Integrated modules system via pods.

● Targets JVM and CLR.

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.

Copyright © 2014 Russel Winder 15

Copyright © 2014 Russel Winder 16

Code!

Copyright © 2014 Russel Winder 17

Copyright © 2014 Russel Winder 18

Copyright © 2014 Russel Winder 19

Copyright © 2014 Russel Winder 20

What is the value of ?

Easy, it's known exactly.

It's .

Obviously.

Copyright © 2014 Russel Winder 21

It's simples Александр Орлов 2009

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

1x2dx

Copyright © 2014 Russel Winder 23

One possible algorithm

● Use quadrature to estimate the value of the integral which is the area under the curve.–

=4n∑i=1

n 1

1i−0.5n

2

With n = 3 not much to do, but potentially lots of error. Use n = 107 or n = 109?

Embarrassingly parallel.

Copyright © 2014 Russel Winder 24

Because addition is commutative andassociative, expression can be

decomposed into sums of partial sums.

Copyright © 2014 Russel Winder 25

a + b + c + d + e + f

=

( a + b ) + ( c + d ) + ( e + f )

Copyright © 2014 Russel Winder 26

Scatter Gather—

map reduce

data parallel

Copyright © 2014 Russel Winder 27

Code!

Copyright © 2014 Russel Winder 28

ScalaKotlinCeylonFantom

Copyright © 2014 Russel Winder 29

?

Copyright © 2014 Russel Winder 30

Surprise time…

Copyright © 2014 Russel Winder 31

JVM is a Groovy place

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.

Copyright © 2014 Russel Winder 33

Groovy

A statically typed,compiled language.

Copyright © 2014 Russel Winder 34

@TypeChecked

@CompileStatic

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.

Copyright © 2014 Russel Winder 36

Code!

Copyright © 2014 Russel Winder 37

Copyright © 2014 Russel Winder 38

Code!

Copyright © 2014 Russel Winder 39

Did I mention invokedynamic?

Copyright © 2014 Russel Winder 40

Code!

Copyright © 2014 Russel Winder 41

Java is Dead!

Copyright © 2014 Russel Winder 42

Groovy(or Scala, Kotlin, Ceylon, Fantom, )…is the future of static languages

on the JVM.

Copyright © 2014 Russel Winder 43

2014-03-18

Copyright © 2014 Russel Winder 44

Java 8Released

Copyright © 2014 Russel Winder 45

Java 8 is the biggest revolution in Java since 1994.

Bigger than Java 5.

Copyright © 2014 Russel Winder 46

Has Java revived?

Is this a new lease of life?

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.

Copyright © 2014 Russel Winder 48

G1 garbage collector is now the standard: no more PermGen.

Copyright © 2014 Russel Winder 49

Nashorn comes as standard:Server-side JavaScript without Rhino.

Copyright © 2014 Russel Winder 50

JavaFX in the distribution:you will want to use GroovyFX though.

Copyright © 2014 Russel Winder 51

Lambda expressions,default methods in interfaces,

associated collections enhancements.

Copyright © 2014 Russel Winder 52

Code!

Copyright © 2014 Russel Winder 53

Copyright © 2014 Russel Winder 54

Code!

Copyright © 2014 Russel Winder 55

Java is DeadLong Live Scala, Kotlin, Ceylon,

etc.

Russel Winder

email: russel@winder.org.ukxmpp: russel@winder.org.uk

twitter: @russel_winderWeb: http://www.russel.org.uk

Copyright © 2014 Russel Winder 56

Java is DeadLong Live Java

Russel Winder

email: russel@winder.org.ukxmpp: russel@winder.org.uk

twitter: @russel_winderWeb: http://www.russel.org.uk

Copyright © 2014 Russel Winder 57

Java is DeadLong Live Groovy

Russel Winder

email: russel@winder.org.ukxmpp: russel@winder.org.uk

twitter: @russel_winderWeb: http://www.russel.org.uk