JSR 335: Project Lambda - Blog Xebiablog.xebia.fr/wp-content/uploads/2012/10/Java-8-Lambda.pdfAround...

34
JSR 335: Project Lambda François Sarradin -- Xebia λ

Transcript of JSR 335: Project Lambda - Blog Xebiablog.xebia.fr/wp-content/uploads/2012/10/Java-8-Lambda.pdfAround...

Page 1: JSR 335: Project Lambda - Blog Xebiablog.xebia.fr/wp-content/uploads/2012/10/Java-8-Lambda.pdfAround Project Lambda In France Curious about Project Lambda ;) [FR] JDK 8: lambdas in

JSR 335:Project LambdaFrançois Sarradin -- Xebia

λ

Page 2: JSR 335: Project Lambda - Blog Xebiablog.xebia.fr/wp-content/uploads/2012/10/Java-8-Lambda.pdfAround Project Lambda In France Curious about Project Lambda ;) [FR] JDK 8: lambdas in

JSR337

Java RoadmapJava 8

aug. 2013Java 7

jul. 2011 Java 9?

● FP / Parallel comp.● Date API improv.● Type annotation● Compact profiles● Nashorn

ModularityPerformanceProductivity

Page 3: JSR 335: Project Lambda - Blog Xebiablog.xebia.fr/wp-content/uploads/2012/10/Java-8-Lambda.pdfAround Project Lambda In France Curious about Project Lambda ;) [FR] JDK 8: lambdas in

Project LambdaWhat's in it?

Project Lambda

JSR335

Collection API Bulk Operations

Lambda Expression Virtual Extension Method

Collection API Parallel CollectionsFunctional API

Page 4: JSR 335: Project Lambda - Blog Xebiablog.xebia.fr/wp-content/uploads/2012/10/Java-8-Lambda.pdfAround Project Lambda In France Curious about Project Lambda ;) [FR] JDK 8: lambdas in

Question

What will be the impactof Project Lambdaon the Java world?

Page 5: JSR 335: Project Lambda - Blog Xebiablog.xebia.fr/wp-content/uploads/2012/10/Java-8-Lambda.pdfAround Project Lambda In France Curious about Project Lambda ;) [FR] JDK 8: lambdas in

AnswerLook at Speed Car!

Page 6: JSR 335: Project Lambda - Blog Xebiablog.xebia.fr/wp-content/uploads/2012/10/Java-8-Lambda.pdfAround Project Lambda In France Curious about Project Lambda ;) [FR] JDK 8: lambdas in

Planning...Presentation + live coding (free to interrupt)

● Genesis

● Lambda of Java

● Project Lambda

Page 7: JSR 335: Project Lambda - Blog Xebiablog.xebia.fr/wp-content/uploads/2012/10/Java-8-Lambda.pdfAround Project Lambda In France Curious about Project Lambda ;) [FR] JDK 8: lambdas in

...And Then● Debate

● Retrospective (agile style!)

● Report○ Xebia blog○ Project Lambda ML

Page 8: JSR 335: Project Lambda - Blog Xebiablog.xebia.fr/wp-content/uploads/2012/10/Java-8-Lambda.pdfAround Project Lambda In France Curious about Project Lambda ;) [FR] JDK 8: lambdas in

Genesis

Page 9: JSR 335: Project Lambda - Blog Xebiablog.xebia.fr/wp-content/uploads/2012/10/Java-8-Lambda.pdfAround Project Lambda In France Curious about Project Lambda ;) [FR] JDK 8: lambdas in

More Processors

Page 10: JSR 335: Project Lambda - Blog Xebiablog.xebia.fr/wp-content/uploads/2012/10/Java-8-Lambda.pdfAround Project Lambda In France Curious about Project Lambda ;) [FR] JDK 8: lambdas in

More ExpressivenessMore Readability

结果 汉字 = new 物().処理();

vs.

fact n = product [1..n]

Is it all Chinese to you?

Page 11: JSR 335: Project Lambda - Blog Xebiablog.xebia.fr/wp-content/uploads/2012/10/Java-8-Lambda.pdfAround Project Lambda In France Curious about Project Lambda ;) [FR] JDK 8: lambdas in

FP & Competition

Guava

Clojure

C# / F#C++

Page 12: JSR 335: Project Lambda - Blog Xebiablog.xebia.fr/wp-content/uploads/2012/10/Java-8-Lambda.pdfAround Project Lambda In France Curious about Project Lambda ;) [FR] JDK 8: lambdas in

(Anonymous) Inner ClassA λ Solution

Iterables.filter(persons, new Predicate<Person>() {

@Overridepublic boolean apply(Person person) {

return person.getAge() >= 18;}

}); // Java + Guava

Page 13: JSR 335: Project Lambda - Blog Xebiablog.xebia.fr/wp-content/uploads/2012/10/Java-8-Lambda.pdfAround Project Lambda In France Curious about Project Lambda ;) [FR] JDK 8: lambdas in

This is what you really need!

Iterables.filter(persons, IS_ADULT);

Predicate<Person> IS_ADULT= new Predicate<Person>() {

@Overridepublic boolean apply(Person person) {

return person.getAge() >= 18;}

});

(Anonymous) Inner ClassA (better?) λ Solution

Page 14: JSR 335: Project Lambda - Blog Xebiablog.xebia.fr/wp-content/uploads/2012/10/Java-8-Lambda.pdfAround Project Lambda In France Curious about Project Lambda ;) [FR] JDK 8: lambdas in

(Anonymous) Inner Class(Not Really) A λ Solution

Average length of Java one-liner is 21 line!@DEVOPS_BORAT - 12/09/2011

● "The pain of anonymous inner classes makes us roll our eyes in the back of our heads every day." (a wise Oracle's client, 01/2011)

Page 15: JSR 335: Project Lambda - Blog Xebiablog.xebia.fr/wp-content/uploads/2012/10/Java-8-Lambda.pdfAround Project Lambda In France Curious about Project Lambda ;) [FR] JDK 8: lambdas in

What about Oracle?

● "It’s time to add closures to Java" (Mark Reinhold, 12/2009)

● "Oracle's position is that Java must evolve -- carefully, of course -- in order to remain competitive." (Brian Goetz - 08/2011)

Page 16: JSR 335: Project Lambda - Blog Xebiablog.xebia.fr/wp-content/uploads/2012/10/Java-8-Lambda.pdfAround Project Lambda In France Curious about Project Lambda ;) [FR] JDK 8: lambdas in

Lambda of Java

Page 17: JSR 335: Project Lambda - Blog Xebiablog.xebia.fr/wp-content/uploads/2012/10/Java-8-Lambda.pdfAround Project Lambda In France Curious about Project Lambda ;) [FR] JDK 8: lambdas in

Here is the λ!

(int x, int y) -> x + y

(x, y) -> x + y

(int x, int y) -> { return x + y; }

(x, y) -> { return x + y; }

Page 18: JSR 335: Project Lambda - Blog Xebiablog.xebia.fr/wp-content/uploads/2012/10/Java-8-Lambda.pdfAround Project Lambda In France Curious about Project Lambda ;) [FR] JDK 8: lambdas in

Other λ forms

m -> {m.put("France", "Paris");m.put("UK", "London");m.put("USA", "Washington");

}

x -> 2 * x

() -> 42

Page 19: JSR 335: Project Lambda - Blog Xebiablog.xebia.fr/wp-content/uploads/2012/10/Java-8-Lambda.pdfAround Project Lambda In France Curious about Project Lambda ;) [FR] JDK 8: lambdas in

Inner Classvs. λ SolutionIterables.filter(persons, new Predicate<Person>() {

@Overridepublic boolean apply(Person p) {

return p.getAge() >= 18;}

}); // Java 5-7 + Guava

Iterables.filter(persons, // Java 8 + Guavap -> p.getAge() >= 18);

Page 20: JSR 335: Project Lambda - Blog Xebiablog.xebia.fr/wp-content/uploads/2012/10/Java-8-Lambda.pdfAround Project Lambda In France Curious about Project Lambda ;) [FR] JDK 8: lambdas in

Method Reference

String::valueOf// like: v -> String.valueOf(v)

Integer::compare// like: (i1, i2) -> Integer.compare(i1, i2)

Arrays.sort(myInts, Integer::compare)

Page 21: JSR 335: Project Lambda - Blog Xebiablog.xebia.fr/wp-content/uploads/2012/10/Java-8-Lambda.pdfAround Project Lambda In France Curious about Project Lambda ;) [FR] JDK 8: lambdas in

Virtual Extension Method(VEM)

interface Message {

String getMessage() default {return "Look Ma'! Interface with code!";

}

}

Page 22: JSR 335: Project Lambda - Blog Xebiablog.xebia.fr/wp-content/uploads/2012/10/Java-8-Lambda.pdfAround Project Lambda In France Curious about Project Lambda ;) [FR] JDK 8: lambdas in

VEMMotivation

Help to extend existing APIs

Minimize rewrite of existing API implementation

eg. Collection API

eg. Hibernate Collection Implementation

VEM

Page 23: JSR 335: Project Lambda - Blog Xebiablog.xebia.fr/wp-content/uploads/2012/10/Java-8-Lambda.pdfAround Project Lambda In France Curious about Project Lambda ;) [FR] JDK 8: lambdas in

Collection API Extended

java.util.functions.*

java.util.streams.*

Extension of Iterable, Iterator, Collection, Map, ...

java.util.Optional

Page 24: JSR 335: Project Lambda - Blog Xebiablog.xebia.fr/wp-content/uploads/2012/10/Java-8-Lambda.pdfAround Project Lambda In France Curious about Project Lambda ;) [FR] JDK 8: lambdas in

Parallel ComputingAs Easy as 1-2-3?

myCollection.parallel().filter(x -> ...).map(x -> ...).reduce((x, y) -> ...) // parallel

myCollection.stream().filter(x -> ...).map(x -> ...).reduce((x, y) -> ...) // sequential

Page 25: JSR 335: Project Lambda - Blog Xebiablog.xebia.fr/wp-content/uploads/2012/10/Java-8-Lambda.pdfAround Project Lambda In France Curious about Project Lambda ;) [FR] JDK 8: lambdas in

Some kata and demos...

Page 26: JSR 335: Project Lambda - Blog Xebiablog.xebia.fr/wp-content/uploads/2012/10/Java-8-Lambda.pdfAround Project Lambda In France Curious about Project Lambda ;) [FR] JDK 8: lambdas in

Project Lambda

Page 27: JSR 335: Project Lambda - Blog Xebiablog.xebia.fr/wp-content/uploads/2012/10/Java-8-Lambda.pdfAround Project Lambda In France Curious about Project Lambda ;) [FR] JDK 8: lambdas in

The Dream Team ;)

photo: @crazybob

Page 28: JSR 335: Project Lambda - Blog Xebiablog.xebia.fr/wp-content/uploads/2012/10/Java-8-Lambda.pdfAround Project Lambda In France Curious about Project Lambda ;) [FR] JDK 8: lambdas in

Web Sites

OpenJDK 8 Web sitehttp://openjdk.java.net/projects/lambda/

JSR335http://jcp.org/en/jsr/detail?id=335

Page 29: JSR 335: Project Lambda - Blog Xebiablog.xebia.fr/wp-content/uploads/2012/10/Java-8-Lambda.pdfAround Project Lambda In France Curious about Project Lambda ;) [FR] JDK 8: lambdas in

Where to Get Java 8

Mercurial repohttp://hg.openjdk.java.net/lambda/lambda

Java SE 8 Early Access (with lambda)http://jdk8.java.net/lambda/

Page 30: JSR 335: Project Lambda - Blog Xebiablog.xebia.fr/wp-content/uploads/2012/10/Java-8-Lambda.pdfAround Project Lambda In France Curious about Project Lambda ;) [FR] JDK 8: lambdas in

Mailing Lists

Technical Discussionmailto:[email protected]://mail.openjdk.java.net/pipermail/lambda-dev/

Libs Spec Discussionhttp://mail.openjdk.java.net/pipermail/lambda-libs-spec-<*>/

Spec Discussionhttp://mail.openjdk.java.net/pipermail/lambda-spec-<*>/

Page 31: JSR 335: Project Lambda - Blog Xebiablog.xebia.fr/wp-content/uploads/2012/10/Java-8-Lambda.pdfAround Project Lambda In France Curious about Project Lambda ;) [FR] JDK 8: lambdas in

Around Project Lambda

OpenJDK OSX Build (7 & 8)http://code.google.com/p/openjdk-osx-build/

Java 8 vs Scala: a Feature Comparisonhttp://www.infoq.com/articles/java-8-vs-scala

H. Gomez

U. PeterS. van den Berg

Page 32: JSR 335: Project Lambda - Blog Xebiablog.xebia.fr/wp-content/uploads/2012/10/Java-8-Lambda.pdfAround Project Lambda In France Curious about Project Lambda ;) [FR] JDK 8: lambdas in

Around Project LambdaIn France

Curious about Project Lambda ;)http://blog.xebia.fr/ [FR]http://kerflyn.wordpress.com/

JDK 8: lambdas in Action [FR]http://www.devoxx.com/display/FR12/JDK+8+demo++lambdas+in+Action

Java 8 et les Lambda [FR]http://thecodersbreakfast.net/index.php?post/2012/05/30/Java-8-et-les-Lambda

G. Tardif

O. Croisier

Guess Who?

Page 33: JSR 335: Project Lambda - Blog Xebiablog.xebia.fr/wp-content/uploads/2012/10/Java-8-Lambda.pdfAround Project Lambda In France Curious about Project Lambda ;) [FR] JDK 8: lambdas in

Project Lambdaand the Community● Transparency

○ Presentations / Publications○ Source code available

● Early testing by community○ Pre-version available○ AdoptOpenJDK (http://java.

net/projects/adoptopenjdk/pages/AdoptOpenJDK)

● Quick feedback○ ML, Hackdays

Page 34: JSR 335: Project Lambda - Blog Xebiablog.xebia.fr/wp-content/uploads/2012/10/Java-8-Lambda.pdfAround Project Lambda In France Curious about Project Lambda ;) [FR] JDK 8: lambdas in

Question● Oneliner, Readability, and Debugability

● Java vs. Competitors

● What to do for Java 8 to be adopted in projects?

● Is there a future for Java?