среда, 1 августа 2012 г.

Java Type System

    Наследование в Java 8 статично и монотонно. Пример не статичности - в prototype-oriented языках (Java Script), пример не монотонности - C++ с закрытым наследованием, экспертные системы.
    В Java 8 "двухэтажная система": классы + метаклассы. Пример нульэтажонй системы - JavaScript, Одноэтажной - ?, трехэтажной - ?Scala?, бесконечно этажной - ?. [The Art of Metaobject protocol]

The StackMapTable Attribute

Arrays are covariant + generics are invariant = @SafeVarargs needed[JLS]

heap pollution

Big theme: annotations for type cheching
- weeking: @SupressWarning() ({"unchecked, ???"})
- stronging: @NotNull, @Nullable, ???

Цель книги описать систему типов языка Java 8. А именно: детально разобраться, что является типом в Java, описать алгебраические структуры определенные поверх на типов, описать операции на типах (конструктор типа, ???). Попутно будет приведена литература по типам, наиболее интересные примеры. вы сможете подготовиться к собеседованию.


Не нарушает ли рефлексия статической типизации?
Кто чей предок: List, List<Object>, List<?>, List<? extends Object>?
List<Number> и List<Double> - это два разных типа?
Равен ли List<?> к List<?> ?
Что такое type inference, wildcard capturing, ???
Равен ли User - User (class loading)?

Java 8 Type System
    Intro
        Type vs Class
        Static vs Dynamic types
        Strong vs Weak types
        Nominative vs Intersection/Compositional vs Structural types
            Nominal: ?
            Structural: one idiom
        Universal vs Existentional types        
            Universal: generic types
            Existentional: raw types, wildcards
        Compiletime vs Runtime types
        Primitime vs Reference vs Null types
            Null type is a child of every reference type
        System F vs ? vs 


    OOP
        Classes
            Inner classes
                Anonimous inner classes    
            Nested classes
                Anonimous nested classes    
        Interfaces
        Enums
        Arrays
            Broken array types: co-varianve/contra-variance
        Methods
            Overloading
            Overriding
            Static methods
        Fields
            Замещение полей суперкласса полями субкласса
        x
        x
    Generics
        Java generics as F-sub (System F with bounded quantification)
        Java generics as universal types
        Recursive and mutualy recursive generic declarations
        Raw types and wildcards as existential types
        Intersection types

        Dict: bloch: type parametergeneric class or interface, Generic classes and interfaces are collectively known as generic typesEach generic type defines a set of parameterized types, which consist of the class or interface name followed by an angle-bracketed list of actual type parameters corresponding to the generic type’s formal type parameters [JLS, 4.4, 4.5]. each generic type defines a raw type,
        Type inference
            Constructors
            Static meyhods
        Raw types
        Subtyping and Parametric polymorphism
            Covariance and Contravariance
            Bounded quantification
        Wildcard
            Unbounded wildcard types [bloch 113]
    Annotations
    Lambda
    AOP
    Semantics
        операционная семантика языка
        денотационная семантика языка