Selective specialization for object-oriented languages
PLDI '95 Proceedings of the ACM SIGPLAN 1995 conference on Programming language design and implementation
Proceedings of the tenth annual conference on Object-oriented programming systems, languages, and applications
Bidirectional object layout for separate compilation
Proceedings of the tenth annual conference on Object-oriented programming systems, languages, and applications
Minimizing row displacement dispatch tables
Proceedings of the tenth annual conference on Object-oriented programming systems, languages, and applications
Inside the C++ object model
The direct cost of virtual function calls in C++
Proceedings of the 11th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Fast static analysis of C++ virtual function calls
Proceedings of the 11th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Using role components in implement collaboration-based designs
Proceedings of the 11th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Concrete type inference: delivering object-oriented applications
Concrete type inference: delivering object-oriented applications
Object-oriented programming: a unified foundation
Object-oriented programming: a unified foundation
Object-oriented software construction (2nd ed.)
Object-oriented software construction (2nd ed.)
Theoretical Computer Science
Pizza into Java: translating theory into practice
Proceedings of the 24th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Efficient dynamic dispatch without virtual function tables: the SmallEiffel compiler
Proceedings of the 12th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Efficient type inclusion tests
Proceedings of the 12th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Back to the future: the story of Squeak, a practical Smalltalk written in itself
Proceedings of the 12th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Java virtual machine
Fast algorithms for compressed multimethod dispatch table generation
ACM Transactions on Programming Languages and Systems (TOPLAS)
Fast and compact dispatching for dynamic object-oriented languages
Information Processing Letters
Cache-conscious structure definition
Proceedings of the ACM SIGPLAN 1999 conference on Programming language design and implementation
Time and space efficient method-lookup for object-oriented programs
Proceedings of the seventh annual ACM-SIAM symposium on Discrete algorithms
Space and time-efficient memory layout for multiple inheritance
Proceedings of the 14th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Proceedings of the 14th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Class hierarchy specialization
Acta Informatica
Design and implementation of generics for the .NET Common language runtime
Proceedings of the ACM SIGPLAN 2001 conference on Programming language design and implementation
Efficient implementation of Java interfaces: Invokeinterface considered harmless
OOPSLA '01 Proceedings of the 16th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
ACM Transactions on Software Engineering and Methodology (TOSEM)
A framework for call graph construction algorithms
ACM Transactions on Programming Languages and Systems (TOPLAS)
The C++ Programming Language, Third Edition
The C++ Programming Language, Third Edition
Efficient Polymorphic Calls
Net Common Language Runtimeunleashed
Net Common Language Runtimeunleashed
Fast algorithm for creating space efficient dispatching tables with application to multi-dispatching
OOPSLA '02 Proceedings of the 17th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Fast subtype checking in the HotSpot JVM
JGI '02 Proceedings of the 2002 joint ACM-ISCOPE conference on Java Grande
Incremental algorithms for dispatching in dynamically typed languages
POPL '03 Proceedings of the 30th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Type Inference for Late Binding: The SmallEiffel Compiler
JMLC '97 Proceedings of the Joint Modular Languages Conference on Modular Programming Languages
Optimization of Object-Oriented Programs Using Static Class Hierarchy Analysis
ECOOP '95 Proceedings of the 9th European Conference on Object-Oriented Programming
Message Dispatch on Pipelined Processors
ECOOP '95 Proceedings of the 9th European Conference on Object-Oriented Programming
Type-Safe Compilation of Covariant Specialization: A Practical Case
ECCOP '96 Proceedings of the 10th European Conference on Object-Oriented Programming
The Complexity of Type Analysis of Object Oriented Programs
ECCOP '98 Proceedings of the 12th European Conference on Object-Oriented Programming
Empirical Study of Object-Layout Strategies and Optimization Techniques
ECOOP '00 Proceedings of the 14th European Conference on Object-Oriented Programming
Precise Constraint-Based Type Inference for Java
ECOOP '01 Proceedings of the 15th European Conference on Object-Oriented Programming
ECOOP '01 Proceedings of the 15th European Conference on Object-Oriented Programming
Stress-testing Control Structures for Dynamic Dispatch in Java
Proceedings of the 2nd Java Virtual Machine Research and Technology Symposium
Safe dynamic multiple inheritance
Nordic Journal of Computing
ASE '00 Proceedings of the 15th IEEE international conference on Automated software engineering
Quantifying and evaluating the space overhead for alternative C++ memory layouts
Software—Practice & Experience
Jam---designing a Java extension with mixins
ACM Transactions on Programming Languages and Systems (TOPLAS)
Declaring and checking non-null types in an object-oriented language
OOPSLA '03 Proceedings of the 18th annual ACM SIGPLAN conference on Object-oriented programing, systems, languages, and applications
Java(TM) Language Specification, The (3rd Edition) (Java (Addison-Wesley))
Java(TM) Language Specification, The (3rd Edition) (Java (Addison-Wesley))
Efficient subtyping tests with PQ-encoding
ACM Transactions on Programming Languages and Systems (TOPLAS)
Link-time static analysis for efficient separate compilation of object-oriented languages
PASTE '05 Proceedings of the 6th ACM SIGPLAN-SIGSOFT workshop on Program analysis for software tools and engineering
The DaCapo benchmarks: java benchmarking development and analysis
Proceedings of the 21st annual ACM SIGPLAN conference on Object-oriented programming systems, languages, and applications
SableVM: a research framework for the efficient execution of java bytecode
JVM'01 Proceedings of the 2001 Symposium on JavaTM Virtual Machine Research and Technology Symposium - Volume 1
Dynamic type checking in jalapeño
JVM'01 Proceedings of the 2001 Symposium on JavaTM Virtual Machine Research and Technology Symposium - Volume 1
Efficient dynamic dispatching with type slicing
ACM Transactions on Programming Languages and Systems (TOPLAS)
Perfect hashing as an almost perfect subtype test
ACM Transactions on Programming Languages and Systems (TOPLAS)
Programming in Scala: A Comprehensive Step-by-step Guide
Programming in Scala: A Comprehensive Step-by-step Guide
Empirical assessment of object-oriented implementations with multiple inheritance and static typing
Proceedings of the 24th ACM SIGPLAN conference on Object oriented programming systems languages and applications
Metamodeling semantics of multiple inheritance
Science of Computer Programming
Coloring, a versatile technique for implementing object-oriented languages
Software—Practice & Experience
Perfect class hashing and numbering for object-oriented implementation
Software—Practice & Experience
Ada 2005 reference manual: language and standard libraries
Ada 2005 reference manual: language and standard libraries
Empirical assessment of object-oriented implementations with multiple inheritance and static typing
Proceedings of the 24th ACM SIGPLAN conference on Object oriented programming systems languages and applications
Empirical assessment of C++-like implementations for multiple inheritance
Proceedings of the Workshop on the Implementation, Compilation, Optimization of Object-Oriented Languages, Programs and Systems
Efficient compilation of .NET programs for embedded systems
Proceedings of the Workshop on the Implementation, Compilation, Optimization of Object-Oriented Languages, Programs and Systems
Metamodeling semantics of multiple inheritance
Science of Computer Programming
Hi-index | 0.00 |
Object-oriented programming represents an original implementation issue due to its philosophy of making the program behavior depend on the dynamic type of objects. This is expressed by the late binding mechanism, aka message sending. The underlying principle is that the address of the actually called procedure is not statically determined at compile-time, but depends on the dynamic type of a distinguished parameter known as the receiver. A similar issue arises with attributes, because their position in the object layout may also depend on the object's dynamic type. Furthermore, subtyping introduces another original feature (i.e., runtime subtype checks). All three mechanisms need specific implementations and data structures. In static typing, late binding is generally implemented with so-called virtual function tables. These tables reduce method calls to pointers to functions via a small fixed number of extra indirections. It follows that object-oriented programming yields some overhead, as compared to the usual procedural languages. The different techniques and their resulting overhead depend on several parameters. First, inheritance and subtyping may be single or multiple, and even a mixing is possible, as in Java and ˙NET which present single inheritance for classes and multiple subtyping for interfaces. Multiple inheritance is a well-known complication. Second, the production of executable programs may involve various schemes, from global compilation, which implies the closed-world assumption (CWA), as the whole program is known at compile time, to separate compilation and dynamic loading, where each program unit is compiled and loaded independently of any usage, hence under the open-world assumption (OWA). Global compilation is well-known to facilitate optimization. This article reviews the various implementation techniques available in static typing and in the three cases of single inheritance, multiple inheritance, and multiple subtyping. This language-independent survey focuses on separate compilation and dynamic loading, as they represent the most commonly used and the most demanding framework. However, many works have been undertaken in the global compilation framework, mostly for dynamically typed languages, but also applied to the EIFFEL language. Hence, we also examine global techniques and how they can improve implementation efficiency. Finally, mixed frameworks that combine open and closed world assumptions are considered. For instance, just-in-time (JIT) compilers work under provisional CWA, at the expense of possible recompilations. In contrast, we present an experimental compiler-linker, where separate compilation implies the OWA, whereas the whole program is finally linked under the CWA.