Srikanth Sankaran - EclipseCon France2018 · PDF fileEclipseCon NA 2014 | JDT Embraces Lambda...

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

Transcript of Srikanth Sankaran - EclipseCon France2018 · PDF fileEclipseCon NA 2014 | JDT Embraces Lambda...

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

1

Srikanth SankaranIBM India

Stephan HerrmannGK Software

Noopur Gupta

IBM India

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

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

4

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

5

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

6

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

7

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

8

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

9

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

10

LambdaExpression ::= LambdaParameters '->' LambdaBody

LambdaParameters -> BeginLambda LambdaParameterList

LambdaParameterList -> '(' FormalParameterListopt ')„

LambdaBody -> Expression

LambdaBody -> Block

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

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

11

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

12

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

13

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

14

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.

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

16

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

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

18

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

19

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

20

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

21

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

Collectors.toMap(..)

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

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

22

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

23

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

24

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

25

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

26

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

27

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

28

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

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

30

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

31

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

Enter

+Ctrl 1

32

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

33

Enter

+Ctrl 1

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

34

Enter

+Ctrl 1

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

35

Enter

+Ctrl 1

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

36

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

37

Lambda Expression:

Method Reference:

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

38

Demo

Examples:

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

39

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

40

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

41

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

42

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

43

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

44

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

45

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

46

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

47

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

48

Far too risky to

cram late into 8

(Nov 2013)

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

49

List <: List<String> ?

Raw types

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

50

“Problem detected during type inference: ...”

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

51

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

52

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

53

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

54

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

55

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

56

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

57

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

58

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

59

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

EclipseCon NA 2014 | JDT Embraces Lambda Expressions

61

EVALUATE THIS SESSION

Sign-in: www.eclipsecon.org

Select session from schedule

Evaluate:

1

2

3