Evolving The Java Language
-
Upload
qconlondon2008 -
Category
Technology
-
view
653 -
download
0
Transcript of Evolving The Java Language
![Page 1: Evolving The Java Language](https://reader033.fdocuments.in/reader033/viewer/2022052900/5563a62ad8b42aae0d8b4eec/html5/thumbnails/1.jpg)
Evolvingthe
Java Programming Language
Neal Gafter
![Page 2: Evolving The Java Language](https://reader033.fdocuments.in/reader033/viewer/2022052900/5563a62ad8b42aae0d8b4eec/html5/thumbnails/2.jpg)
Overview
The Challenge of Evolving a LanguageDesign PrinciplesDesign GoalsJDK7 and JDK8
![Page 3: Evolving The Java Language](https://reader033.fdocuments.in/reader033/viewer/2022052900/5563a62ad8b42aae0d8b4eec/html5/thumbnails/3.jpg)
Challenge: Evolving a Language
“What is it like trying to extend a mature lan-guage?” -Brian Goetz
![Page 4: Evolving The Java Language](https://reader033.fdocuments.in/reader033/viewer/2022052900/5563a62ad8b42aae0d8b4eec/html5/thumbnails/4.jpg)
Challenge: Evolving a Language
“What is it like trying to extend a mature lan-guage?”
ma-ture: adjective1. having completed natural growth and de-
velopment.2. completed, perfected, or elaborated in full.3. (of an industry, technology, market, etc.) no
longer developing or expanding.
![Page 5: Evolving The Java Language](https://reader033.fdocuments.in/reader033/viewer/2022052900/5563a62ad8b42aae0d8b4eec/html5/thumbnails/5.jpg)
Challenge: Evolving a Language
Q: What is it like trying to extend a mature language?
A: It is impossible, by definition.
![Page 6: Evolving The Java Language](https://reader033.fdocuments.in/reader033/viewer/2022052900/5563a62ad8b42aae0d8b4eec/html5/thumbnails/6.jpg)
Challenge: Evolving a Language
Q: What is it like trying to extend a widely de-ployed language?
A: Language change is influenced by existing code and APIs.
![Page 7: Evolving The Java Language](https://reader033.fdocuments.in/reader033/viewer/2022052900/5563a62ad8b42aae0d8b4eec/html5/thumbnails/7.jpg)
Existing APIs affect change
Support retrofitting existing APIs:With compatible behavior
![Page 8: Evolving The Java Language](https://reader033.fdocuments.in/reader033/viewer/2022052900/5563a62ad8b42aae0d8b4eec/html5/thumbnails/8.jpg)
Existing APIs affect change
Support retrofitting existing APIs:With compatible behavior
Consistent with existing designDon't expose, create design flaws
![Page 9: Evolving The Java Language](https://reader033.fdocuments.in/reader033/viewer/2022052900/5563a62ad8b42aae0d8b4eec/html5/thumbnails/9.jpg)
Existing APIs affect change
Some case studies:
Generics (vs erasure)Wildcards (vs declaration-site variance)Autoboxing, unboxing (vs wrappers)Varargs (vs overloading)For-each (vs Iterator)
![Page 10: Evolving The Java Language](https://reader033.fdocuments.in/reader033/viewer/2022052900/5563a62ad8b42aae0d8b4eec/html5/thumbnails/10.jpg)
Generics (vs erasure)
Adding reified generics is compatibleMay not allow retrofitting existing code
CollectionWeakReference
![Page 11: Evolving The Java Language](https://reader033.fdocuments.in/reader033/viewer/2022052900/5563a62ad8b42aae0d8b4eec/html5/thumbnails/11.jpg)
Wildcards (vs declaration-site variance)
There is a simpler alternative to wildcards: declaration-site variance
'wildcards' appear on type definitionsUse sites much simplerCan retrofit most APIs
but not Collection
![Page 12: Evolving The Java Language](https://reader033.fdocuments.in/reader033/viewer/2022052900/5563a62ad8b42aae0d8b4eec/html5/thumbnails/12.jpg)
Autoboxing, unboxing
Type systems form a lattice
Object / \Number Runnable | /Integer / \ / null
![Page 13: Evolving The Java Language](https://reader033.fdocuments.in/reader033/viewer/2022052900/5563a62ad8b42aae0d8b4eec/html5/thumbnails/13.jpg)
Autoboxing, unboxing
Adding conversions can break the lattice
long <----------> Long | | | |int <----------> Integer
Existing boxed types don't have this relation.
![Page 14: Evolving The Java Language](https://reader033.fdocuments.in/reader033/viewer/2022052900/5563a62ad8b42aae0d8b4eec/html5/thumbnails/14.jpg)
Autoboxing, unboxing
Solutions
Introduce new boxing interfaces; orPatchwork specification
![Page 15: Evolving The Java Language](https://reader033.fdocuments.in/reader033/viewer/2022052900/5563a62ad8b42aae0d8b4eec/html5/thumbnails/15.jpg)
for-each (vs iterator)
Iterator has a vestigal remove method.Introduce java.lang.Iterator without it?Cannot retrofit Collection
without requiring recompile
(existing implementations don't implementiterator() that returns the new type)
![Page 16: Evolving The Java Language](https://reader033.fdocuments.in/reader033/viewer/2022052900/5563a62ad8b42aae0d8b4eec/html5/thumbnails/16.jpg)
Design Principles
![Page 17: Evolving The Java Language](https://reader033.fdocuments.in/reader033/viewer/2022052900/5563a62ad8b42aae0d8b4eec/html5/thumbnails/17.jpg)
Design Principles
Encourage desirable practices (that might not otherwise be followed) my making them easy
synchronizedAnnotations isolate configuration dataGenerics for typesafe APIs
![Page 18: Evolving The Java Language](https://reader033.fdocuments.in/reader033/viewer/2022052900/5563a62ad8b42aae0d8b4eec/html5/thumbnails/18.jpg)
Design Principles
Encourage desirable practicesIsolate language from specific APIs
![Page 19: Evolving The Java Language](https://reader033.fdocuments.in/reader033/viewer/2022052900/5563a62ad8b42aae0d8b4eec/html5/thumbnails/19.jpg)
Design Principles
Encourage desirable practicesIsolate language from specific APIsPrefer reading over writing
clarity over conciseness
![Page 20: Evolving The Java Language](https://reader033.fdocuments.in/reader033/viewer/2022052900/5563a62ad8b42aae0d8b4eec/html5/thumbnails/20.jpg)
Design Principles
Encourage desirable practicesIsolate language from specific APIsPrefer reading over writingPrefer static typing
![Page 21: Evolving The Java Language](https://reader033.fdocuments.in/reader033/viewer/2022052900/5563a62ad8b42aae0d8b4eec/html5/thumbnails/21.jpg)
Design Principles
Encourage desirable practicesIsolate language from specific APIsPrefer reading over writingPrefer static typingRemain backward compatible
![Page 22: Evolving The Java Language](https://reader033.fdocuments.in/reader033/viewer/2022052900/5563a62ad8b42aae0d8b4eec/html5/thumbnails/22.jpg)
Short-term design Goals
Regularize Existing LanguageImprove diagnostics vs genericsFix type inferenceString switchLimited operator overloadingImproved catch clauses
Modularity
![Page 23: Evolving The Java Language](https://reader033.fdocuments.in/reader033/viewer/2022052900/5563a62ad8b42aae0d8b4eec/html5/thumbnails/23.jpg)
Improve Diagnostics vs Generics
interface Box<T> {
T get();
void put(T t);
}class Tmp {
static void test(Box<? extends Number> box) {
box.put(box.get());
}
}
Error: put(capture#417 of ? extends java.lang.Number)
in Box<capture#417 of ? extends java.lang.Number> cannot be applied to (java.lang.Number)
box.put(box.get());
^
![Page 24: Evolving The Java Language](https://reader033.fdocuments.in/reader033/viewer/2022052900/5563a62ad8b42aae0d8b4eec/html5/thumbnails/24.jpg)
Improve Diagnostics vs Generics
interface Box<T> {
T get();
void put(T t);
}class Tmp {
static void test(Box<? extends Number> box) {
box.put(box.get());
}
}
Error: cannot call put(T) as a member of in Box<? ex-
tends java.lang.Number> box.put(box.get());
^
![Page 25: Evolving The Java Language](https://reader033.fdocuments.in/reader033/viewer/2022052900/5563a62ad8b42aae0d8b4eec/html5/thumbnails/25.jpg)
Fix Type Inference: constructors
Today:
Map<String, List<String>> anagrams = new HashMap<String, List<String>>();
![Page 26: Evolving The Java Language](https://reader033.fdocuments.in/reader033/viewer/2022052900/5563a62ad8b42aae0d8b4eec/html5/thumbnails/26.jpg)
Fix Type Inference: constructors
Proposed:
Map<String, List<String>> anagrams = new HashMap<>();
![Page 27: Evolving The Java Language](https://reader033.fdocuments.in/reader033/viewer/2022052900/5563a62ad8b42aae0d8b4eec/html5/thumbnails/27.jpg)
Fix Type Inference: arguments
Today:
public <E> Set<E> emptySet() { … }
void timeWaitsFor(Set<Man> people) { … }
// * Won't compile!
timeWaitsFor(Collections.emptySet());
![Page 28: Evolving The Java Language](https://reader033.fdocuments.in/reader033/viewer/2022052900/5563a62ad8b42aae0d8b4eec/html5/thumbnails/28.jpg)
Fix Type Inference: arguments
Today:
public <E> Set<E> emptySet() { … }
void timeWaitsFor(Set<Man> people) { … }
// OK
timeWaitsFor(Collections.<Man>emptySet());
![Page 29: Evolving The Java Language](https://reader033.fdocuments.in/reader033/viewer/2022052900/5563a62ad8b42aae0d8b4eec/html5/thumbnails/29.jpg)
Fix Type Inference: arguments
Proposed:
public <E> Set<E> emptySet() { … }
void timeWaitsFor(Set<Man> people) { … }
// OK
timeWaitsFor(Collections.emptySet());
![Page 30: Evolving The Java Language](https://reader033.fdocuments.in/reader033/viewer/2022052900/5563a62ad8b42aae0d8b4eec/html5/thumbnails/30.jpg)
String Switch
Today
static boolean booleanFromString(String s) {
if (s.equals("true")) {
return true;
} else if (s.equals("false")) {
return false;
} else {
throw new IllegalArgumentException(s);
}
}
![Page 31: Evolving The Java Language](https://reader033.fdocuments.in/reader033/viewer/2022052900/5563a62ad8b42aae0d8b4eec/html5/thumbnails/31.jpg)
String Switch
Proposed
static boolean booleanFromString(String s) {
switch(s) {
case "true":
return true;
case "false":
return false;
default:
throw new IllegalArgumentException(s);
}
}
![Page 32: Evolving The Java Language](https://reader033.fdocuments.in/reader033/viewer/2022052900/5563a62ad8b42aae0d8b4eec/html5/thumbnails/32.jpg)
Limited Operator Overloading
Today
enum Size { SMALL, MEDIUM, LARGE }
if (mySize.compareTo(yourSize) >= 0)
System.out.println(“You can wear my pants.”);
![Page 33: Evolving The Java Language](https://reader033.fdocuments.in/reader033/viewer/2022052900/5563a62ad8b42aae0d8b4eec/html5/thumbnails/33.jpg)
Limited Operator Overloading
Proposed
enum Size { SMALL, MEDIUM, LARGE }
if (mySize > yourSize)
System.out.println(“You can wear my pants.”);
![Page 34: Evolving The Java Language](https://reader033.fdocuments.in/reader033/viewer/2022052900/5563a62ad8b42aae0d8b4eec/html5/thumbnails/34.jpg)
Improved Catch Clauses: multi
Today:
try {
return klass.newInstance();
} catch (InstantiationException e) {
throw new AssertionError(e);
} catch (IllegalAccessException e) {
throw new AssertionError(e);
}
![Page 35: Evolving The Java Language](https://reader033.fdocuments.in/reader033/viewer/2022052900/5563a62ad8b42aae0d8b4eec/html5/thumbnails/35.jpg)
Improved Catch Clauses: multi
Proposed:
try {
return klass.newInstance();
} catch (InstantiationException | IllegalAccessException e) {
throw new AssertionError(e);
}
![Page 36: Evolving The Java Language](https://reader033.fdocuments.in/reader033/viewer/2022052900/5563a62ad8b42aae0d8b4eec/html5/thumbnails/36.jpg)
Improved Catch Clauses: rethrow
Today:
try {
doable.doit(); // Throws several types
} catch (Throwable ex) {
logger.log(ex);
throw ex; // Error: Throwable not declared
}
![Page 37: Evolving The Java Language](https://reader033.fdocuments.in/reader033/viewer/2022052900/5563a62ad8b42aae0d8b4eec/html5/thumbnails/37.jpg)
Improved Catch Clauses: rethrow
Proposed:
try {
doable.doit(); // Throws several types
} catch (final Throwable ex) {
logger.log(ex);
throw ex; // OK: Throws the same several types
}
![Page 38: Evolving The Java Language](https://reader033.fdocuments.in/reader033/viewer/2022052900/5563a62ad8b42aae0d8b4eec/html5/thumbnails/38.jpg)
Others?
Properties?Serialization annotations?
![Page 39: Evolving The Java Language](https://reader033.fdocuments.in/reader033/viewer/2022052900/5563a62ad8b42aae0d8b4eec/html5/thumbnails/39.jpg)
Long-term goals
Regularize Existing LanguageReificationFurther Generics simplification
Concurrency supportImmutable dataControl AbstractionClosuresActors, etc.
![Page 40: Evolving The Java Language](https://reader033.fdocuments.in/reader033/viewer/2022052900/5563a62ad8b42aae0d8b4eec/html5/thumbnails/40.jpg)
JDK7
jsrs 277 + 294 (modularity)Maintenance review of jsr14“Small” language issuesPossibly jsr308
(limited by time, resources)
![Page 41: Evolving The Java Language](https://reader033.fdocuments.in/reader033/viewer/2022052900/5563a62ad8b42aae0d8b4eec/html5/thumbnails/41.jpg)
JDK8
ReificationControl Abstraction
Further out: Immutable data, pattern match-ing, further operator overloading?
![Page 42: Evolving The Java Language](https://reader033.fdocuments.in/reader033/viewer/2022052900/5563a62ad8b42aae0d8b4eec/html5/thumbnails/42.jpg)
Q&A