Object-oriented programming with flavors
OOPLSA '86 Conference proceedings on Object-oriented programming systems, languages and applications
OOPSLA/ECOOP '90 Proceedings of the European conference on object-oriented programming on Object-oriented programming systems, languages, and applications
The programming language jigsaw: mixins, modularity and multiple inheritance
The programming language jigsaw: mixins, modularity and multiple inheritance
An extension of system F with subtyping
Information and Computation - Special conference issue: international conference on theoretical aspects of computer software
Design patterns: elements of reusable object-oriented software
Design patterns: elements of reusable object-oriented software
Proceedings of the 24th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Pizza into Java: translating theory into practice
Proceedings of the 24th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Adding type parameterization to the Java language
Proceedings of the 12th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
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
Compatible genericity with run-time types for 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
Proceedings of the 14th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
OOPWORK '86 Proceedings of the 1986 SIGPLAN workshop on Object-oriented programming
Design and implementation of generics for the .NET Common language runtime
Proceedings of the ACM SIGPLAN 2001 conference on Programming language design and implementation
Jiazzi: new-age components for old-fasioned Java
OOPSLA '01 Proceedings of the 16th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Types and programming languages
Types and programming languages
The case for run-time types in generic Java
PPPJ '02/IRE '02 Proceedings of the inaugural conference on the Principles and Practice of programming, 2002 and Proceedings of the second workshop on Intermediate representation engineering for virtual machines, 2002
Efficient Implementation of Run-time Generic Types for Java
Proceedings of the IFIP TC2/WG2.1 Working Conference on Generic Programming
A theory of mixin modules: algebraic laws and reduction semantics
Mathematical Structures in Computer Science
A theory of mixin modules: basic and derived operators
Mathematical Structures in Computer Science
Object-oriented units of measurement
OOPSLA '04 Proceedings of the 19th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Parametric polymorphism for Java: is there any hope in sight?
ACM SIGPLAN Notices
Selective method combination in mixin-based composition
Proceedings of the 2005 ACM symposium on Applied computing
Safe instantiation in generic Java
Science of Computer Programming - Special issue: Principles and practices of programming in Java (PPPJ 2004)
An object-oriented approach to datatype-generic programming
Proceedings of the 2006 ACM SIGPLAN workshop on Generic programming
Deriving components from genericity
Proceedings of the 2007 ACM symposium on Applied computing
Lightweight scalable components
GPCE '07 Proceedings of the 6th international conference on Generative programming and component engineering
Component nextgen: a sound and expressive component framework for java
Proceedings of the 22nd annual ACM SIGPLAN conference on Object-oriented programming systems and applications
Expressive and safe static reflection with MorphJ
Proceedings of the 2008 ACM SIGPLAN conference on Programming language design and implementation
Genericity in Java: persistent and database systems implications
The VLDB Journal — The International Journal on Very Large Data Bases
GPCE '08 Proceedings of the 7th international conference on Generative programming and component engineering
Implicit First Class Genericity
SC '09 Proceedings of the 8th International Conference on Software Composition
The Design of Monty: a Programming/Scripting Language
Electronic Notes in Theoretical Computer Science (ENTCS)
Contracts for first-class classes
Proceedings of the 6th symposium on Dynamic languages
Morphing: Structurally shaping a class by reflecting on others
ACM Transactions on Programming Languages and Systems (TOPLAS)
Shakeins: nonintrusive aspects for middleware frameworks
Transactions on Aspect-Oriented Software Development II
Magda: a new language for modularity
ECOOP'12 Proceedings of the 26th European conference on Object-Oriented Programming
Proceedings of the ACM international conference on Object oriented programming systems languages and applications
Morphing: safely shaping a class in the image of others
ECOOP'07 Proceedings of the 21st European conference on Object-Oriented Programming
A Rewriting Logic Approach to Static Checking of Units of Measurement in C
Electronic Notes in Theoretical Computer Science (ENTCS)
Miniboxing: improving the speed to code size tradeoff in parametric polymorphism translations
Proceedings of the 2013 ACM SIGPLAN international conference on Object oriented programming systems languages & applications
Contracts for First-Class Classes
ACM Transactions on Programming Languages and Systems (TOPLAS)
Hi-index | 0.00 |
This paper describes how to add first-class generic types---including mixins---to strongly-typed OO languages with nominal subtyping such as Java and C#. A generic type system is "first-class" if generic types can appear in any context where conventional types can appear. In this context, a mixin is simply a generic class that extends one of its type parameters, e.g., a class C that extends T. Although mixins of this form are widely used in Cpp (via templates), they are clumsy and error-prone because Cpp treats mixins as macros, forcing each mixin instantiation to be separately compiled and type-checked. The abstraction embodied in a mixin is never separately analyzed.Our formulation of mixins using first-class genericity accommodates sound local (class-by-class) type checking. A mixin can be fully type-checked given symbol tables for each of the classes that it directly references---the same context in which Java performs incremental class compilation. To our knowledge, no previous formal analysis of first-class genericity in languages with nominal type systems has been conducted, which is surprising because nominal subtyping has become predominant in mainstream object-oriented programming languages.What makes our treatment of first-class genericity particularly interesting and important is the fact that it can be added to the existing Java language without any change to the underlying Java Virtual Machine. Moreover, the extension is backward compatible with legacy Java source and class files. Although our discussion of a practical implementation strategy focuses on Java, the same implementation techniques could be applied to other object-oriented languages such as C# or Eiffel that support incremental compilation, dynamic class loading, and nominal subtyping.