On understanding types, data abstraction, and polymorphism
ACM Computing Surveys (CSUR) - The MIT Press scientific computation series
A semantics of multiple inheritance
Information and Computation - Semantics of Data Types
Inheritance in smalltalk-80: a denotational definition
POPL '88 Proceedings of the 15th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
POPL '90 Proceedings of the 17th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
F-bounded polymorphism for object-oriented programming
FPCA '89 Proceedings of the fourth international conference on Functional programming languages and computer architecture
Decidable bounded quantification
POPL '94 Proceedings of the 21st ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Bounded quantification is undecidable
Theoretical aspects of object-oriented programming
A syntactic approach to type soundness
Information and Computation
Divergence of F≤ type checking
Theoretical Computer Science
TIL: a type-directed optimizing compiler for ML
PLDI '96 Proceedings of the ACM SIGPLAN 1996 conference on Programming language design and implementation
An interpretation of objects and object types
POPL '96 Proceedings of the 23rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Proceedings of the 24th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Type dispatch for named hierarchical types
Proceedings of the fourth ACM SIGPLAN international conference on Functional programming
From system F to typed assembly language
ACM Transactions on Programming Languages and Systems (TOPLAS)
Basic theory of F-bounded quantification
Information and Computation
A certifying compiler for Java
PLDI '00 Proceedings of the ACM SIGPLAN 2000 conference on Programming language design and implementation
An efficient class and object encoding
OOPSLA '00 Proceedings of the 15th 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)
Type-preserving compilation of Featherweight Java
ACM Transactions on Programming Languages and Systems (TOPLAS)
A Theory of Objects
Java Virtual Machine Specification
Java Virtual Machine Specification
Guarded recursive datatype constructors
POPL '03 Proceedings of the 30th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Programming Objects with ML-ART, an Extension to ML with Abstract and Record Types
TACS '94 Proceedings of the International Conference on Theoretical Aspects of Computer Software
Intersection Types and Bounded Polymorphism
TLCA '93 Proceedings of the International Conference on Typed Lambda Calculi and Applications
Recursive Types Are not Conservative over F
TLCA '93 Proceedings of the International Conference on Typed Lambda Calculi and Applications
Compiling Java to a Typed Lambda-Calculus: A Preliminary Report
TIC '98 Proceedings of the Second International Workshop on Types in Compilation
Simple, Efficient Object Encoding using Intersection Types
Simple, Efficient Object Encoding using Intersection Types
Type systems for object-oriented programming languages
Type systems for object-oriented programming languages
A type-preserving compiler infrastructure
A type-preserving compiler infrastructure
The open verifier framework for foundational verifiers
TLDI '05 Proceedings of the 2005 ACM SIGPLAN international workshop on Types in languages design and implementation
Decidable subclassing-bounded quantification
TLDI '05 Proceedings of the 2005 ACM SIGPLAN international workshop on Types in languages design and implementation
Type-based verification of sssembly language for compiler debugging
TLDI '05 Proceedings of the 2005 ACM SIGPLAN international workshop on Types in languages design and implementation
A verifiable SSA program representation for aggressive compiler optimization
Conference record of the 33rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Deconstructing process isolation
Proceedings of the 2006 workshop on Memory system performance and correctness
A typed intermediate language for compiling multiple inheritance
Proceedings of the 34th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A garbage-collecting typed assembly language
TLDI '07 Proceedings of the 2007 ACM SIGPLAN international workshop on Types in languages design and implementation
Singularity: rethinking the software stack
ACM SIGOPS Operating Systems Review - Systems work at Microsoft Research
A general framework for certifying garbage collectors and their mutators
Proceedings of the 2007 ACM SIGPLAN conference on Programming language design and implementation
Type-preserving compilation for large-scale optimizing object-oriented compilers
Proceedings of the 2008 ACM SIGPLAN conference on Programming language design and implementation
A typed intermediate language for supporting interfaces
Proceedings of the 11th International Workshop on Formal Techniques for Java-like Programs
Inferable object-oriented typed assembly language
PLDI '10 Proceedings of the 2010 ACM SIGPLAN conference on Programming language design and implementation
Typed compilation against non-manifest base classes
CASSIS'05 Proceedings of the Second international conference on Construction and Analysis of Safe, Secure, and Interoperable Smart Devices
Software modeling language with frames and multi-abstractions: an overview
ICAISC'12 Proceedings of the 11th international conference on Artificial Intelligence and Soft Computing - Volume Part II
Hi-index | 0.00 |
Traditional class and object encodings are difficult to use in practical type-preserving compilers because of the complexity of the encodings. We propose a simple typed intermediate language for compiling object-oriented languages and prove its soundness. The key ideas are to preserve lightweight notions of classes and objects instead of compiling them away and to separate name-based subclassing from structure-based subtyping. The language can express standard implementation techniques for both dynamic dispatch and runtime type tests. It has decidable type checking even with subtyping between quantified types with different bounds. Because of its simplicity, the language is a more suitable starting point for a practical type-preserving compiler than traditional encoding techniques.