1 Copyright © 2013, Oracle and/or its affiliates. All ...Java 8 for Compiler Writers Daniel Smith...

33
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 1

Transcript of 1 Copyright © 2013, Oracle and/or its affiliates. All ...Java 8 for Compiler Writers Daniel Smith...

Page 1: 1 Copyright © 2013, Oracle and/or its affiliates. All ...Java 8 for Compiler Writers Daniel Smith JSR 335 Specification Author

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 1

Page 2: 1 Copyright © 2013, Oracle and/or its affiliates. All ...Java 8 for Compiler Writers Daniel Smith JSR 335 Specification Author

Java 8 for Compiler Writers Daniel Smith JSR 335 Specification Author

Page 3: 1 Copyright © 2013, Oracle and/or its affiliates. All ...Java 8 for Compiler Writers Daniel Smith JSR 335 Specification Author

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 3

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 4: 1 Copyright © 2013, Oracle and/or its affiliates. All ...Java 8 for Compiler Writers Daniel Smith JSR 335 Specification Author

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 4

* Subject to change

Page 5: 1 Copyright © 2013, Oracle and/or its affiliates. All ...Java 8 for Compiler Writers Daniel Smith JSR 335 Specification Author

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 5

New Java SE 8 VM-related Features

§ Default Methods

§  Lambda Metafactory

§  Type Annotations

§ Misc.: Repeatable Annotations, Parameter Reflection

Page 6: 1 Copyright © 2013, Oracle and/or its affiliates. All ...Java 8 for Compiler Writers Daniel Smith JSR 335 Specification Author

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 6

Default Methods: Overview

§  Java source allows an interface to declare a method as “default” and give it a body.

§ A default method’s body should be invoked if the class hierarchy doesn’t provide an implementation.

§  Interfaces can also declare private and static methods, which are never inherited.

JSR 335

Page 7: 1 Copyright © 2013, Oracle and/or its affiliates. All ...Java 8 for Compiler Writers Daniel Smith JSR 335 Specification Author

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 7

Default Methods: Class File Format

§ Methods in interfaces don’t have to be abstract (and thus permit Code) § Methods in interfaces allow additional modifiers §  invokestatic and invokespecial accept InterfaceMethodrefs

(the instructions are overloaded) * Applies to version 52.0+ class files

Page 8: 1 Copyright © 2013, Oracle and/or its affiliates. All ...Java 8 for Compiler Writers Daniel Smith JSR 335 Specification Author

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 8

Default Methods: Permitted Interface Flags

public bridgeprivate varargsprotected nativestatic abstractfinal strictsynchronized synthetic

Key Green: previously permitted Yellow: newly permitted Grey: not permitted

* All methods must be public or private (not package-access)

Page 9: 1 Copyright © 2013, Oracle and/or its affiliates. All ...Java 8 for Compiler Writers Daniel Smith JSR 335 Specification Author

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 9

Default Methods: Permitted Invocation Forms

invokevirtual C.m invokevirtual I.minvokeinterface C.m invokeinterface I.minvokestatic C.m invokestatic I.minvokespecial C.m invokespecial I.m

Key Green: previously permitted Yellow: newly permitted Grey: not permitted

Page 10: 1 Copyright © 2013, Oracle and/or its affiliates. All ...Java 8 for Compiler Writers Daniel Smith JSR 335 Specification Author

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 10

Default Methods: Semantics of Invocation

Method Reference

Resolved Method

Selected Method

Page 11: 1 Copyright © 2013, Oracle and/or its affiliates. All ...Java 8 for Compiler Writers Daniel Smith JSR 335 Specification Author

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 11

Default Methods: Maximally Specific Methods

The maximally specific superinterface methods of a class for a name+descriptor is the set of all methods satisfying: § Declared in a superinterface § Matching name and descriptor § Neither private nor static§ Not trumped by a satisfactory method in a subinterface

Page 12: 1 Copyright © 2013, Oracle and/or its affiliates. All ...Java 8 for Compiler Writers Daniel Smith JSR 335 Specification Author

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 12

Default Methods: Maximally Specific Example

interface I { void m(); }interface J { default void m() { System.out.println(“J.m”); } }interface K extends I { default void m() { System.out.println(“K.m”); } }class C implements I, J {}class D extends C implements K {}Result for C: { I.m, J.m }Result for D: { J.m, K.m }

Page 13: 1 Copyright © 2013, Oracle and/or its affiliates. All ...Java 8 for Compiler Writers Daniel Smith JSR 335 Specification Author

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 13

Default Methods: Resolution

Resolving method reference T.m()V

§ Try T § Try T’s superclasses § Try the maximally specific superinterface methods

–  Pick one §  NoSuchMethodError

Page 14: 1 Copyright © 2013, Oracle and/or its affiliates. All ...Java 8 for Compiler Writers Daniel Smith JSR 335 Specification Author

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 14

Default Methods: Selection

Selecting an implementation of U.m()V from S

§ Try S§ Try S’s superclasses § Try the maximally specific superinterface methods

–  If exactly one is non-abstract, select it §  AbstractMethodError or IncompatibleClassChangeError

Page 15: 1 Copyright © 2013, Oracle and/or its affiliates. All ...Java 8 for Compiler Writers Daniel Smith JSR 335 Specification Author

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 15

Default Methods: Semantics of invokeinterface

§ Resolve I.m()V (result is an interface method or an Object method) § Select an implementation from the receiver’s class

(By design, affects behavior of invocations in old class files.)

Page 16: 1 Copyright © 2013, Oracle and/or its affiliates. All ...Java 8 for Compiler Writers Daniel Smith JSR 335 Specification Author

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 16

Default Methods: Semantics of invokevirtual

§ Resolve C.m()V (result is a class method or an interface method) § Select an implementation from the receiver’s class

(By design, affects behavior of invocations in old class files.)

Page 17: 1 Copyright © 2013, Oracle and/or its affiliates. All ...Java 8 for Compiler Writers Daniel Smith JSR 335 Specification Author

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 17

Default Methods: Semantics of invokestatic

§ For class methods, no change § For interface methods:

–  Resolve I.m()V–  Select the resolved method

Page 18: 1 Copyright © 2013, Oracle and/or its affiliates. All ...Java 8 for Compiler Writers Daniel Smith JSR 335 Specification Author

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 18

Default Methods: Semantics of invokespecial

§ Three instructions in one (other references are prohibited): –  Invoke <init> methods –  Invoke a class’s or interface’s own methods (probably private) –  Invoke superclass or direct superinterface methods

Page 19: 1 Copyright © 2013, Oracle and/or its affiliates. All ...Java 8 for Compiler Writers Daniel Smith JSR 335 Specification Author

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 19

Default Methods: Semantics of invokespecial

§ For class methods (where current class D is a subclass of C): –  Resolve C.m()V–  Select an implementation from the superclass of D*

§ For interface methods (where current class D implements I): –  Resolve I.m()V–  Select an implementation from I

* Assuming ACC_SUPER is set

Invoking super methods

Page 20: 1 Copyright © 2013, Oracle and/or its affiliates. All ...Java 8 for Compiler Writers Daniel Smith JSR 335 Specification Author

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 20

Default Methods: Summary

§  In version 52.0 class files: –  Interface methods don’t have to be abstract, can be public/private and

instance/static–  invokestatic and invokespecial can reference interface methods

§  In all class files: –  Resolution and selection are updated to new inheritance model

Page 21: 1 Copyright © 2013, Oracle and/or its affiliates. All ...Java 8 for Compiler Writers Daniel Smith JSR 335 Specification Author

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 21

Lambda Metafactory: Overview

§ Lambda expressions and method refs in Java source are compiled to: –  A method –  Captured values –  A target functional interface –  An invokedynamic call to a runtime library

§ Evaluation produces an object that: –  Implements the interface via the method –  Stores the captured values

Page 22: 1 Copyright © 2013, Oracle and/or its affiliates. All ...Java 8 for Compiler Writers Daniel Smith JSR 335 Specification Author

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 22

Lambda Metafactory: Contract

§  Inputs –  A set of interfaces to implement { Predicate, Serializable } –  Types of captured values (String, int) –  A method name “test” –  A set of method descriptors to implement { (Object)Z } –  A generics-instantiated descriptor (File)Z–  A method implementation SomeClass.lambda$0

§ Output: a factory (String, int) → Predicate & Serializable

Page 23: 1 Copyright © 2013, Oracle and/or its affiliates. All ...Java 8 for Compiler Writers Daniel Smith JSR 335 Specification Author

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 23

Lambda Metafactory: API

package java.lang.invoke;public class LambdaMetafactory { public static CallSite metafactory(MethodHandles.Lookup caller, String invokedName, MethodType invokedType, MethodType samType, MethodHandle implMethod, MethodType instantiatedMethodType);...

Page 24: 1 Copyright © 2013, Oracle and/or its affiliates. All ...Java 8 for Compiler Writers Daniel Smith JSR 335 Specification Author

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 24

Lambda Metafactory: API

public static CallSite altMetafactory(MethodHandles.Lookup caller, String invokedName, MethodType invokedType, Object... args); // MethodType samType, // MethodHandle implMethod, // MethodType instantiatedMethodType, // int flags, // int icount, Class... markerInterfaces, // int tcount, MethodType... bridges);}

Page 25: 1 Copyright © 2013, Oracle and/or its affiliates. All ...Java 8 for Compiler Writers Daniel Smith JSR 335 Specification Author

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 25

Lambda Metafactory: Relevance

§ Strictly speaking, just a library § But highly optimized (ideally…) for the VM §  Java is committed to it, other compilers can benefit from the free

engineering work

Page 26: 1 Copyright © 2013, Oracle and/or its affiliates. All ...Java 8 for Compiler Writers Daniel Smith JSR 335 Specification Author

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 26

Type Annotations: Overview

§  Java source allows type uses and type parameter declarations to be annotated

–  @Target(ElementType.TYPE_USE) –  @Target(ElementType.TYPE_PARAMETER)

§ Annotations can be processed by a tool or compiler plug-in to enforce custom typing rules (e.g., @NotNull)

JSR 308

Page 27: 1 Copyright © 2013, Oracle and/or its affiliates. All ...Java 8 for Compiler Writers Daniel Smith JSR 335 Specification Author

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 27

Type Annotations: Class File Attributes

§ New attributes: –  RuntimeVisibleTypeAnnotations–  RuntimeInvisibleTypeAnnotations

§ Stored on the smallest enclosing class, field, method, or Code

Page 28: 1 Copyright © 2013, Oracle and/or its affiliates. All ...Java 8 for Compiler Writers Daniel Smith JSR 335 Specification Author

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 28

Type Annotations: Contents of an Annotation

type_annotation { target_type; // the type of the targeted program element target_info; // identifies the targeted program element target_path; // identifies targeted type in a compound type type_index; element_value_pairs;}

Page 29: 1 Copyright © 2013, Oracle and/or its affiliates. All ...Java 8 for Compiler Writers Daniel Smith JSR 335 Specification Author

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 29

Type Annotations: Accessing

§  javax.lang.model§  javax.ide§  com.sun.source.tree

Page 30: 1 Copyright © 2013, Oracle and/or its affiliates. All ...Java 8 for Compiler Writers Daniel Smith JSR 335 Specification Author

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 30

Repeatable Annotations

§  Java source supports multiple uses of the same annotation instance if the annotation

§  @Repeatable to opt in and define the container annotation type § No VM impact

Page 31: 1 Copyright © 2013, Oracle and/or its affiliates. All ...Java 8 for Compiler Writers Daniel Smith JSR 335 Specification Author

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 31

Parameter Reflection

§ New attribute: MethodParametersConsists of a list of names and access flags

§ Compilers should provide an opt-in facility § Access reflectively with Method.getParameters()

By default, “arg0”, “arg1”, …

Page 32: 1 Copyright © 2013, Oracle and/or its affiliates. All ...Java 8 for Compiler Writers Daniel Smith JSR 335 Specification Author

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 32

New Java SE 8 VM-related Features

§ Default Methods

§  Lambda Metafactory

§  Type Annotations

§ Misc.: Repeatable Annotations, Parameter Reflection

Page 33: 1 Copyright © 2013, Oracle and/or its affiliates. All ...Java 8 for Compiler Writers Daniel Smith JSR 335 Specification Author

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 33