OOPLSA '86 Conference proceedings on Object-oriented programming systems, languages and applications
F-bounded polymorphism for object-oriented programming
FPCA '89 Proceedings of the fourth international conference on Functional programming languages and computer architecture
Design patterns: elements of reusable object-oriented software
Design patterns: elements of reusable object-oriented software
A syntactic approach to type soundness
Information and Computation
Theory and Practice of Object Systems - Special issue: type systems
Making the future safe for the past: adding genericity to the Java programming language
Proceedings of the 13th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Featherweight Java: a minimal core calculus for Java and GJ
ACM Transactions on Programming Languages and Systems (TOPLAS)
A Statically Safe Alternative to Virtual Types
ECCOP '98 Proceedings of the 12th European Conference on Object-Oriented Programming
ECOOP '01 Proceedings of the 15th European Conference on Object-Oriented Programming
Adding wildcards to the Java programming language
Proceedings of the 2004 ACM symposium on Applied computing
Scalable extensibility via nested inheritance
OOPSLA '04 Proceedings of the 19th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Scalable component abstractions
OOPSLA '05 Proceedings of the 20th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Variant parametric types: A flexible subtyping scheme for generics
ACM Transactions on Programming Languages and Systems (TOPLAS)
J&: nested intersection for scalable software composition
Proceedings of the 21st annual ACM SIGPLAN conference on Object-oriented programming systems, languages, and applications
Tribe: a simple virtual class calculus
Proceedings of the 6th international conference on Aspect-oriented software development
Lightweight scalable components
GPCE '07 Proceedings of the 6th international conference on Generative programming and component engineering
Variant path types for scalable extensibility
Proceedings of the 22nd annual ACM SIGPLAN conference on Object-oriented programming systems and applications
Confessions of a used programming language salesman
Proceedings of the 22nd annual ACM SIGPLAN conference on Object-oriented programming systems and applications
Lightweight family polymorphism*
Journal of Functional Programming
Proceedings of the 23rd ACM SIGPLAN conference on Object-oriented programming systems languages and applications
GPCE '08 Proceedings of the 7th international conference on Generative programming and component engineering
Matching ThisType to subtyping
Proceedings of the 2009 ACM symposium on Applied Computing
On subtyping, wildcards, and existential types
Proceedings of the 11th International Workshop on Formal Techniques for Java-like Programs
The essence of data access in Cω: the power is in the dot!
ECOOP'05 Proceedings of the 19th European conference on Object-Oriented Programming
Variance and generalized constraints for C# generics
ECOOP'06 Proceedings of the 20th European conference on Object-Oriented Programming
JavaGI: The Interaction of Type Classes with Interfaces and Inheritance
ACM Transactions on Programming Languages and Systems (TOPLAS)
Proceedings of the 25th European conference on Object-oriented programming
Science of Computer Programming
Cast insertion strategies for gradually-typed objects
Proceedings of the 9th symposium on Dynamic languages
Hi-index | 0.00 |
Bruce and Foster proposed the language LOOJ, an extension of Java with the notion of MyType, which represents the type of a self reference and changes its meaning along with inheritance. MyType is useful to write extensible yet type-safe classes for objects with recursive interfaces, that is, ones with methods that take or return objects of the same type as the receiver. Although LOOJ has also generics, MyType has been introduced as a feature rather orthogonal to generics. As a result, LOOJ cannot express an interface that refers to the same generic class recursively but with different type arguments. This is a significant limitation because such an interface naturally arises in practice, for example, in a generic collection class with method map(), which converts a collection to the same kind of collection of a different element type. Altherr and Cremet and Moors, Piessens, and Odersky gave solutions to this problem but they used a highly sophisticated combination of advanced mechanisms such as abstract type members, higher-order type constructors, and F-bounded polymorphism. In this paper, we give another solution by introducing self type constructors, which integrate MyType and generics so that MyType can take type arguments in a generic class. Self type constructors are tailored to writing recursive interfaces more concicely than previous solutions. We demonstrate the expressive power of self type constructors by means of examples, formalize a core language with self type constructors, and prove its type safety.