SlideShare a Scribd company logo
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

PPT
Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en
PDF
Javaforum indy
PDF
Groovy moppingjavaforum
PPT
Hula hoops
PPT
PPTX
The telephone
PPT
PDF
Personal kaizen
Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en
Javaforum indy
Groovy moppingjavaforum
Hula hoops
The telephone
Personal kaizen

More from Squeed (6)

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

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