jdt embraces lambda expressions - eclipsecon north america 2014

62
EclipseCon NA 2014 | JDT Embraces Lambda Expressions 1 Srikanth Sankaran IBM India Stephan Herrmann GK Software Noopur Gupta IBM India

Upload: noopur-gupta

Post on 11-May-2015

667 views

Category:

Technology


3 download

DESCRIPTION

Java 8 is coming. It is happening right here. Developers of your favorite Java IDE are participating in shaping this long awaited milestone for the Java ecosystem: On time with the GA of Java 8, JDT will ship its first release with support for developing in Java 8. If you have a basic understanding of the new features in Java 8, come here and learn how the JDT team mastered the challenges of lifting the Eclipse Java IDE to the next language version. The main focus of this talk will be on lambda expressions, touching also some changes in the libraries that leverage lambda expressions. We will expose some examples demonstrating the complexity of the language and mention some caveats which should help you avoid some unpleasent surprises. We will demo how to get started using Java 8 in Eclipse and show the latest tool features for working with lambda expressions including new quick assists etc. Finally, we'll give a retrospective discussion of the situation of the JDT team, in terms of team changes, contributors, deadlines, interaction with expert groups, with the Eclipse community, and more.

TRANSCRIPT

Page 1: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

1

Srikanth SankaranIBM India

Stephan HerrmannGK Software

Noopur Gupta

IBM India

Page 2: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

2

Java 8 features:

JSR335 - Project Lambda

Lambda Expressions & Method References

Extensions to

Overload resolution & Type inference

Support for “code carrying” interface methods.

JSR308 - Type Annotations

JEP120 - Repeating Annotations

JEP118 - Method Parameter Reflection

JSR269 - Pluggable Annotation Processor API &

javax.lang.model API enhancements for Java 8

Page 4: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

4

Page 5: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

5

Page 6: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

6

Page 7: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

7

Page 8: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

8

Page 9: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

9

Page 10: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

10

LambdaExpression ::= LambdaParameters '->' LambdaBody

LambdaParameters -> BeginLambda LambdaParameterList

LambdaParameterList -> '(' FormalParameterListopt ')„

LambdaBody -> Expression

LambdaBody -> Block

I i = BeginLambda (x) -> { };

Page 11: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

11

Page 12: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

12

Page 13: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

13

Page 14: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

14

Page 15: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

15

Scanning + Parsing => Parse tree

+ Resolution => Resolved parse tree

+ Data/control flow analysis => Flow analyzed parse tree

+ Code generation => Class files.

() -> { throw new Exception(); } is void and value compatible.

Page 16: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

16

Page 17: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

17

o Changes the very notion of a type.

o Some subsystems should view @NonNull String != @ReadOnly String

o while others should view them as being the same.

o Abstractions need to support either world view efficiently.

String is a String is a String

Page 18: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

18

Page 19: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

19

Page 20: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

20

Page 21: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

21

Collectors.<Person,String,Integer>toMap(..)

Collectors.toMap(..)

Collector<String,Integer> coll = new MyCollector<>();

Page 22: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

22

Page 23: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

23

Page 24: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

24

Page 25: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

25

Page 26: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

26

Page 27: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

27

Page 28: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

28

Page 29: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

29

Recipe for disaster:● implement java.util.List → compile against JRE 7 → OK

● upgrade to JRE 8 but compile as 1.7

Undefined compiler behavior● 1.7 compiler cannot handle default methods (from .class)

● exact answer depends on compiler implementation details

● there is no specification

● ecj and javac differ

● assimilation is difficult

Page 30: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

30

Page 31: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

31

Page 32: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

Enter

+Ctrl 1

32

Page 33: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

33

Enter

+Ctrl 1

Page 34: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

34

Enter

+Ctrl 1

Page 35: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

35

Enter

+Ctrl 1

Page 36: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

36

Page 37: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

37

Lambda Expression:

Method Reference:

Page 38: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

38

Demo

Examples:

Page 39: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

39

Page 40: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

40

Page 41: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

41

Page 42: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

42

Page 43: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

43

Page 44: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

44

Page 45: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

45

Page 46: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

46

Page 47: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

47

Page 48: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

48

Far too risky to

cram late into 8

(Nov 2013)

Page 49: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

49

List <: List<String> ?

Raw types

Page 50: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

50

“Problem detected during type inference: ...”

Page 51: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

51

Page 52: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

52

Page 53: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

53

Page 54: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

54

Page 55: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

55

Page 56: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

56

Page 57: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

57

Page 58: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

58

Page 59: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

59

Page 60: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

60

Dramatis personæ - The usual suspects

Jay Arthanareeswaran

Deepak Azad

Shankha Banerjee

Anirban Chakarborty

Vikas Chandra

Noopur Gupta

Ayushman Jain

Manju Mathew

Manoj Palat

Srikanth Sankaran

Sarika Sinha

Jesper S. Møller

Stephan Herrmann

Markus Keller

Dani Megert

Andy Clement

Steve Francisco

Michael Rennie

Olivier Thomann

Curtis Windatt

Walter Harley

David Williams

Page 61: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

61

Page 62: JDT Embraces Lambda Expressions - EclipseCon North America 2014

EVALUATE THIS SESSION

Sign-in: www.eclipsecon.org

Select session from schedule

Evaluate:

1

2

3