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

Java is dead, long live Scala, Kotlin, Ceylon, etc

Embed Size (px)

Citation preview

Copyright © 2014 Russel Winder 1

Java is DeadLong Live Scala, Kotlin, Ceylon,

etc.

Russel Winder

email: [email protected]: @russel_winder

Web: 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

● Gosu

● ?

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

Gosu

● Top-level functions.

● Object-oriented.

● Scripts.

Copyright © 2014 Russel Winder 15

?

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 16

Copyright © 2014 Russel Winder 17

Code!

Copyright © 2014 Russel Winder 18

Copyright © 2014 Russel Winder 19

Copyright © 2014 Russel Winder 20

Copyright © 2014 Russel Winder 21

What is the value of ?

Copyright © 2014 Russel Winder 22

Well that's easy, it's…

Copyright © 2014 Russel Winder 23

Copyright © 2014 Russel Winder 24

Obviously.

Copyright © 2014 Russel Winder 25

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

Copyright © 2014 Russel Winder 26

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+ x2dx

Copyright © 2014 Russel Winder 27

One possible algorithm

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

π=4n∑i=1

n 1

1+(i−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 28

Because addition is commutative andassociative, expression can be

decomposed into sums of partial sums.

Copyright © 2014 Russel Winder 29

a + b + c + d + e + f

=

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

Copyright © 2014 Russel Winder 30

Scatter Gather—

map reduce

data parallel

Copyright © 2014 Russel Winder 31

Code!

Copyright © 2014 Russel Winder 32

ScalaKotlinCeylon

Copyright © 2014 Russel Winder 33

?

Copyright © 2014 Russel Winder 34

Surprise time…

Copyright © 2014 Russel Winder 35

JVM is a Groovy place

Copyright © 2014 Russel Winder 36

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.

Copyright © 2014 Russel Winder 37

Groovy

A statically typed,compiled language.

Copyright © 2014 Russel Winder 38

@TypeChecked

@CompileStatic

Copyright © 2014 Russel Winder 39

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 40

Code!

Copyright © 2014 Russel Winder 41

Copyright © 2014 Russel Winder 42

Code!

Copyright © 2014 Russel Winder 43

Did I mention invokedynamic?

Copyright © 2014 Russel Winder 44

Code!

Copyright © 2014 Russel Winder 45

Java is Dead!

Copyright © 2014 Russel Winder 46

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

on the JVM.

Copyright © 2014 Russel Winder 47

2014-03-18

Copyright © 2014 Russel Winder 48

Java 8Released

Copyright © 2014 Russel Winder 49

Java 8 is the biggest revolution in Java since 1994.

Bigger than Java 5.

Copyright © 2014 Russel Winder 50

Has Java revived?

Is this a new lease of life?

Copyright © 2014 Russel Winder 51

What's Interesting in Java 8?

● G1 garbage collector.

● Nashorn.

● JavaFX.

● Lambda expressions.

● Default methods in interfaces (traits).

● Enhanced collections.

● Method references.

Copyright © 2014 Russel Winder 52

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

Copyright © 2014 Russel Winder 53

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

Copyright © 2014 Russel Winder 54

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

Copyright © 2014 Russel Winder 55

Lambda expressions,default methods in interfaces,

associated collections enhancements.

Copyright © 2014 Russel Winder 56

Code!

Copyright © 2014 Russel Winder 57

Copyright © 2014 Russel Winder 58

Code!

Copyright © 2014 Russel Winder 59

Java is DeadLong Live Scala, Kotlin, Ceylon,

etc.

Russel Winder

email: [email protected]: @russel_winder

Web: http://www.russel.org.uk

Copyright © 2014 Russel Winder 60

Java is DeadLong Live Java

Russel Winder

email: [email protected]: @russel_winder

Web: http://www.russel.org.uk

Copyright © 2014 Russel Winder 61

Java is DeadLong Live Groovy

Russel Winder

email: [email protected]: @russel_winder

Web: http://www.russel.org.uk