24
1

Javaforum coin

  • Upload
    squeed

  • View
    620

  • Download
    1

Embed Size (px)

DESCRIPTION

Vilka problem har man historiskt sett haft med att kompilera dynamiska språk till Java bytekod? Vad fanns för work-arounds? Vilka andra roliga saker kan man göra själv med Invokedynamic?Även om du bara har en vag bild på vad en bytekod överhuvudtaget är och varför du skall bry dig om en ny sådan så är det här en presentation som kommer att fördjupa din förståelse av Java på riktigt låg nivå.

Citation preview

Page 1: Javaforum coin

1

Page 2: Javaforum coin

2

The following is intended to outline our general

product direction. It is intended for information

purposes only, and may not be incorporated into

any contract. It is not a commitment to deliver any

material, code, or functionality, and should not

be relied upon in making purchasing decisions.

The development, release, and timing of any

features or functionality described for Oracle’s

products remains at the sole discretion of Oracle.

Page 3: Javaforum coin

<Insert Picture Here>

invokedynamic på 20 minuter

Joel Borggrén-Franck <[email protected]>

Java Platform Group

2

Page 4: Javaforum coin

4

• Det finns en mängd intressanta programmeringsspråk

• JVM:en är långt mycket mer avancerad än andra

VM:ar/runtimes

• Java är inte allas favoritspråk

• Naturligvis vill man köra alla nya spännande språk på

JVM:en

Page 5: Javaforum coin

5

• Dynamiskt typade språk:

– Modifierar klasser vid körtid

– Alternativt, saknar klasser och lägger till properties i körtid

class ExampleClass

def exampleMethod

5

end

end

exampleObject.class.send(:define_method,

"aNewMethod") do

10

end

Page 6: Javaforum coin

6

• Dynamiskt typade språk:

– har ofta inkompatibla sätt att definera/anropa metoder

(defun foo

(var...

&optional (var initform svar)...

&rest var

&key ((keyword var) initform svar)...

&aux (var initform)...))

Page 7: Javaforum coin

7

Invokedynamic, en språkimplementatörs räddare i

nöden

• Invokedynamic är en brygga mellan

språkimplementatören och JVM:en

• Invokedynamic är en byggsten som gör det mycket

enklare att implementera andra språk än Java på

JVM:en

• Invokedynamic är awesome, om du gillar

språkimplementation

• Invokedynamic kommer säkert användas av Java

någon gång i framtiden

Page 8: Javaforum coin

<Insert Picture Here>

Coin på 20 minuter

Joel Borggrén-Franck <[email protected]>

Java Platform Group

Page 9: Javaforum coin

9

<Insert Picture Here>

Intro till JSR-334: Project Coin

Small change for Java

• Kort bakgrund

• Vad innehåller Coin?

– Varför ska du bry dig?

Page 10: Javaforum coin

10

• Startade som en förfrågan till OpenJDK-communityn

• “Making things programmers do everyday easier.”

• Förslagen skulle vara små i:

– Specifikation

– Implementation

– Testning

• Över 70 förslag

– 1100 e-mail som diskuterade förslagen

Project Coin: Bakgrund

Page 11: Javaforum coin

11

Project Coin: Bakgrund

• De 6 förslag som implementerades är:

– Binary integral literals and underscores in numeric literals

– Strings in switch

– Multi-catch and more precise rethrow

– Improved Type Inference for Generic Instance Creation

– try-with-resources statement

– Simplified Varargs Method Invocation

Page 12: Javaforum coin

12

• Så om du ger mig en miljon, 100000

• Nya sätt att skriva tal (Iiterals)

• Både heltal och flyttal

• Ex:

– 1234_5678

– 0x1.ffff_ffff_ffff_fP1_023 // Double.MAX_VALUE

• Så om du ger mig en miljon, 1_000_000

Underscores in numeric literals

Page 13: Javaforum coin

13

• För oss som jobbar med bitar

• ”Uh, så jag måste maska bit 12 och 13”

– ”val = val & 0xC00;”, right?

• Kanske bättre:– val = val & 0b1100000000000;

• Mycket bättre:– val = val & 0b1_1000_0000_0000;

• Eller i hex:– val = val & 0x1800;

Binary integral literals

Page 14: Javaforum coin

14

• Java 6:

– switch on char, byte, short, int, Character, Byte,

Short, Integer or an enum type

• I Java 7 också String:

String s = ...;

switch (s) {

case "foo":

return 1;

case "bar":

return 2;

}

Strings in switch

Page 15: Javaforum coin

15

• En switch förväntas vara snabb

• Strängjämförelse kan ta lång tid O(length)

• Transformera till 2 switchar

Strings in switch

String s = …

switch(s){

case ”foo”: //pos==1

case ”bar”: //pos==2

}

int pos = 0;

switch(s.hashCode()) {

case ”foo”.hashCode():

if s.equals(”foo”)

pos = 1;

case ”bar”.hashCode():

switch (pos) {

case 1:

Page 16: Javaforum coin

16

Multi-catch and more precise rethrow

try {

foo();

bar();

} catch (IOException e) {

log(e); throw e;

} catch (FileNotFoundException e) {

log(e); throw e;

}

} catch (FooException e) {

log(e); throw e;

}

Page 17: Javaforum coin

17

Multi-catch and more precise rethrow

•Eller

try {

foo();

bar();

} catch (Exception e) {

log(e); throw e;

}

Page 18: Javaforum coin

18

Multi-catch and more precise rethrow

• I Java 7 kan vi nu fånga flera exceptions i samma catch-block:

try {

foo();

bar();

} catch (IOException |

FileNotFoundException |

FooException |

BarException e) {

log(e); throw e;

}

Page 19: Javaforum coin

19

• Java 6:

Map<String, List<String>> myMap =

new HashMap<String, List<String>>();

• Java 7:

Map<String, List<String>> myMap = new

HashMap<>();

Improved Type Inference for Generic Instance

Creation (diamond)

Page 20: Javaforum coin

20

• Spot the bugs:

ResourceHog r = new ResourceHog();

ResourceHog r2 = new AnotherResourceHog();

try {

doStuff();

} catch ( … ) {

} finally {

r.close();

r2.close();

}

try-with-resources statement

Page 21: Javaforum coin

21

• Lösningen är jobbig:

ResourceHog r = new ResourceHog();

try {

ResourceHog r2 = new AnotherResourceHog();

try {

doStuff();

} catch ( … ) {

} finally {

if (null != r2) r2.close();

}

} finally {

if (null != r) r.close();

}

try-with-resources statement

Page 22: Javaforum coin

22

• I Java 7

try (ResourceHog r = new ResourceHog();

ResourceHog r2 = new AnotherResourceHog()) {

} catch ( … ) {

}

• Det kräver att ResourceHog implementerar interfacet

java.lang.auto.AutoClosable;

try-with-resources statement

Page 23: Javaforum coin

23

• Booring

Simplified Varargs Method Invocation

Page 24: Javaforum coin

24

Q&A