1
The following is intended to outline our generalproduct direction. It is intended for informationpurposes only, and may no...
<Insert Picture Here>                         2invokedynamic på 20 minuterJoel Borggrén-Franck <joel.franck@oracle.com>Jav...
• Det finns en mängd intressanta programmeringsspråk• JVM:en är långt mycket mer avancerad än andra  VM:ar/runtimes• Java ...
• Dynamiskt typade språk:  – Modifierar klasser vid körtid  – Alternativt, saknar klasser och lägger till properties i kör...
• Dynamiskt typade språk:  – har ofta inkompatibla sätt att definera/anropa metoder(defun foo  (var...    &optional (var i...
Invokedynamic, en språkimplementatörs räddare inöden• Invokedynamic är en brygga mellan  språkimplementatören och JVM:en• ...
<Insert Picture Here>Coin på 20 minuterJoel Borggrén-Franck <joel.franck@oracle.com>Java Platform Group
Intro till JSR-334: Project CoinSmall change for Java                                   <Insert Picture Here>• Kort bakgru...
Project Coin: Bakgrund• Startade som en förfrågan till OpenJDK-communityn• “Making things programmers do everyday easier.”...
Project Coin: Bakgrund• De 6 förslag som implementerades är:  – Binary integral literals and underscores in numeric litera...
Underscores in numeric literals•   Så om du ger mig en miljon, 100000•   Nya sätt att skriva tal (Iiterals)•   Både heltal...
Binary integral literals• För oss som jobbar med bitar• ”Uh, så jag måste maska bit 12 och 13”  – ”val = val & 0xC00;”, ri...
Strings in switch• Java 6:  – switch on char, byte, short, int, Character, Byte,    Short, Integer or an enum type• I Java...
Strings in switch    • En switch förväntas vara snabb    • Strängjämförelse kan ta lång tid O(length)    • Transformera ti...
Multi-catch and more precise rethrowtry {      foo();      bar();} catch (IOException e) {      log(e); throw e;} catch (F...
Multi-catch and more precise rethrow•Ellertry {      foo();      bar();} catch (Exception e) {      log(e); throw e;}     ...
Multi-catch and more precise rethrow• I Java 7 kan vi nu fånga flera exceptions i samma catch-block:try {      foo();     ...
Improved Type Inference for Generic InstanceCreation (diamond)• Java 6:Map<String, List<String>> myMap =   new HashMap<Str...
try-with-resources statement• Spot the bugs:ResourceHog r = new ResourceHog();ResourceHog r2 = new AnotherResourceHog();tr...
try-with-resources statement• Lösningen är jobbig:ResourceHog r = new ResourceHog();try {  ResourceHog r2 = new AnotherRes...
try-with-resources statement• I Java 7try (ResourceHog r = new ResourceHog();      ResourceHog r2 = new AnotherResourceHog...
Simplified Varargs Method Invocation• Booring                                       23
Q&A      24
Upcoming SlideShare
Loading in...5
×

Javaforum coin

617

Published on

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å.

Published in: Technology, News & Politics
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
617
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Javaforum coin

  1. 1. 1
  2. 2. The following is intended to outline our generalproduct direction. It is intended for informationpurposes only, and may not be incorporated intoany contract. It is not a commitment to deliver anymaterial, code, or functionality, and should notbe relied upon in making purchasing decisions.The development, release, and timing of anyfeatures or functionality described for Oracle’sproducts remains at the sole discretion of Oracle. 2
  3. 3. <Insert Picture Here> 2invokedynamic på 20 minuterJoel Borggrén-Franck <joel.franck@oracle.com>Java Platform Group
  4. 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 4
  5. 5. • Dynamiskt typade språk: – Modifierar klasser vid körtid – Alternativt, saknar klasser och lägger till properties i körtidclass ExampleClass def exampleMethod 5 endendexampleObject.class.send(:define_method, "aNewMethod") do 10end 5
  6. 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)...)) 6
  7. 7. Invokedynamic, en språkimplementatörs räddare inö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 7
  8. 8. <Insert Picture Here>Coin på 20 minuterJoel Borggrén-Franck <joel.franck@oracle.com>Java Platform Group
  9. 9. Intro till JSR-334: Project CoinSmall change for Java <Insert Picture Here>• Kort bakgrund• Vad innehåller Coin? – Varför ska du bry dig? 9
  10. 10. Project Coin: Bakgrund• 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 10
  11. 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 11
  12. 12. Underscores in numeric literals• 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 12
  13. 13. Binary integral literals• 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; 13
  14. 14. Strings in switch• 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;} 14
  15. 15. Strings in switch • En switch förväntas vara snabb • Strängjämförelse kan ta lång tid O(length) • Transformera till 2 switchar int pos = 0; switch(s.hashCode()) {String s = … case ”foo”.hashCode():switch(s){ if s.equals(”foo”) case ”foo”: //pos==1 pos = 1; … case ”bar”.hashCode(): case ”bar”: //pos==2 …} switch (pos) { case 1: … 15
  16. 16. Multi-catch and more precise rethrowtry { foo(); bar();} catch (IOException e) { log(e); throw e;} catch (FileNotFoundException e) { log(e); throw e;}…} catch (FooException e) { log(e); throw e;} 16
  17. 17. Multi-catch and more precise rethrow•Ellertry { foo(); bar();} catch (Exception e) { log(e); throw e;} 17
  18. 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;} 18
  19. 19. Improved Type Inference for Generic InstanceCreation (diamond)• Java 6:Map<String, List<String>> myMap = new HashMap<String, List<String>>();• Java 7:Map<String, List<String>> myMap = new HashMap<>(); 19
  20. 20. try-with-resources statement• Spot the bugs:ResourceHog r = new ResourceHog();ResourceHog r2 = new AnotherResourceHog();try { doStuff();} catch ( … ) { …} finally { r.close(); r2.close();} 20
  21. 21. try-with-resources statement• 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();} 21
  22. 22. try-with-resources statement• I Java 7try (ResourceHog r = new ResourceHog(); ResourceHog r2 = new AnotherResourceHog()) { …} catch ( … ) { …}• Det kräver att ResourceHog implementerar interfacet java.lang.auto.AutoClosable; 22
  23. 23. Simplified Varargs Method Invocation• Booring 23
  24. 24. Q&A 24
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×