SlideShare a Scribd company logo
1 of 24
Download to read offline
1
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.




                                                      2
<Insert Picture Here>




                         2
invokedynamic på 20 minuter
Joel Borggrén-Franck <joel.franck@oracle.com>
Java Platform Group
• 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
• 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


                                                                      5
• 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
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




                                                    7
<Insert Picture Here>




Coin på 20 minuter
Joel Borggrén-Franck <joel.franck@oracle.com>
Java Platform Group
Intro till JSR-334: Project Coin
Small change for Java

                                   <Insert Picture Here>

• Kort bakgrund
• Vad innehåller Coin?
  – Varför ska du bry dig?




                                                      9
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
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
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
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
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
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
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;
}


                                       16
Multi-catch and more precise rethrow


•Eller

try {
      foo();
      bar();
} catch (Exception e) {
      log(e); throw e;
}




                                       17
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
Improved Type Inference for Generic Instance
Creation (diamond)

• Java 6:
Map<String, List<String>> myMap =
   new HashMap<String, List<String>>();

• Java 7:
Map<String, List<String>> myMap = new
   HashMap<>();




                                               19
try-with-resources statement


• Spot the bugs:

ResourceHog r = new ResourceHog();
ResourceHog r2 = new AnotherResourceHog();
try {
   doStuff();
} catch ( … ) {
    …
} finally {
  r.close();
  r2.close();
}

                                             20
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
try-with-resources statement


• I Java 7

try (ResourceHog r = new ResourceHog();
      ResourceHog r2 = new AnotherResourceHog()) {
    …
} catch ( … ) {
  …
}

• Det kräver att ResourceHog implementerar interfacet
  java.lang.auto.AutoClosable;




                                                        22
Simplified Varargs Method Invocation


• Booring




                                       23
Q&A



      24

More Related Content

More from Squeed

Liquibase få kontroll på dina databasförändringar
Liquibase   få kontroll på dina databasförändringarLiquibase   få kontroll på dina databasförändringar
Liquibase få kontroll på dina databasförändringarSqueed
 
Efficient Code Organisation
Efficient Code OrganisationEfficient Code Organisation
Efficient Code OrganisationSqueed
 
Refactoring toward deeper insight java forum
Refactoring toward deeper insight   java forumRefactoring toward deeper insight   java forum
Refactoring toward deeper insight java forumSqueed
 
Javaforum looking into the memory
Javaforum   looking into the memoryJavaforum   looking into the memory
Javaforum looking into the memorySqueed
 
Java one 2011_v0.9
Java one 2011_v0.9Java one 2011_v0.9
Java one 2011_v0.9Squeed
 
Javaforum 20110915
Javaforum 20110915Javaforum 20110915
Javaforum 20110915Squeed
 

More from Squeed (6)

Liquibase få kontroll på dina databasförändringar
Liquibase   få kontroll på dina databasförändringarLiquibase   få kontroll på dina databasförändringar
Liquibase få kontroll på dina databasförändringar
 
Efficient Code Organisation
Efficient Code OrganisationEfficient Code Organisation
Efficient Code Organisation
 
Refactoring toward deeper insight java forum
Refactoring toward deeper insight   java forumRefactoring toward deeper insight   java forum
Refactoring toward deeper insight java forum
 
Javaforum looking into the memory
Javaforum   looking into the memoryJavaforum   looking into the memory
Javaforum looking into the memory
 
Java one 2011_v0.9
Java one 2011_v0.9Java one 2011_v0.9
Java one 2011_v0.9
 
Javaforum 20110915
Javaforum 20110915Javaforum 20110915
Javaforum 20110915
 

Javaforum coin

  • 1. 1
  • 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. 2
  • 3. <Insert Picture Here> 2 invokedynamic på 20 minuter Joel Borggrén-Franck <joel.franck@oracle.com> Java Platform Group
  • 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. • 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 5
  • 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. 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 7
  • 8. <Insert Picture Here> Coin på 20 minuter Joel Borggrén-Franck <joel.franck@oracle.com> Java Platform Group
  • 9. Intro till JSR-334: Project Coin Small change for Java <Insert Picture Here> • Kort bakgrund • Vad innehåller Coin? – Varför ska du bry dig? 9
  • 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. 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. 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. 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. 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. 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. 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; } 16
  • 17. Multi-catch and more precise rethrow •Eller try { foo(); bar(); } catch (Exception e) { log(e); throw e; } 17
  • 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. Improved Type Inference for Generic Instance Creation (diamond) • Java 6: Map<String, List<String>> myMap = new HashMap<String, List<String>>(); • Java 7: Map<String, List<String>> myMap = new HashMap<>(); 19
  • 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. 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. try-with-resources statement • I Java 7 try (ResourceHog r = new ResourceHog(); ResourceHog r2 = new AnotherResourceHog()) { … } catch ( … ) { … } • Det kräver att ResourceHog implementerar interfacet java.lang.auto.AutoClosable; 22
  • 23. Simplified Varargs Method Invocation • Booring 23
  • 24. Q&A 24