Smalltalk-80: the language and its implementation
Smalltalk-80: the language and its implementation
Keynote address - data abstraction and hierarchy
OOPSLA '87 Addendum to the proceedings on Object-oriented programming systems, languages and applications (Addendum)
Eiffel: the language
Design patterns: elements of reusable object-oriented software
Design patterns: elements of reusable object-oriented software
Optimizing multi-method dispatch using compressed dispatch tables
OOPSLA '94 Proceedings of the ninth annual conference on Object-oriented programming systems, language, and applications
The design and evolution of C++
The design and evolution of C++
Theory and Practice of Object Systems - Special issue: type systems
Parasitic methods: an implementation of multi-methods for Java
Proceedings of the 12th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Generic programming and the STL: using and extending the C++ Standard Template Library
Generic programming and the STL: using and extending the C++ Standard Template Library
Efficient multiple and predicated dispatching
Proceedings of the 14th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
MultiJava: modular open classes and symmetric multiple dispatch for Java
OOPSLA '00 Proceedings of the 15th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Modern C++ design: generic programming and design patterns applied
Modern C++ design: generic programming and design patterns applied
Visitor combination and traversal control
OOPSLA '01 Proceedings of the 16th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
The C++ Programming Language
The Java Programming Language
Introduction to Algorithms
Object-Oriented Multi-Methods in Cecil
ECOOP '92 Proceedings of the European Conference on Object-Oriented Programming
Relaxed MultiJava: balancing extensibility and modular typechecking
OOPSLA '03 Proceedings of the 18th annual ACM SIGPLAN conference on Object-oriented programing, systems, languages, and applications
Simula Begin
Common Lisp: The Language
Software—Practice & Experience
Software—Practice & Experience - Research Articles
Concepts: linguistic support for generic programming in C++
Proceedings of the 21st annual ACM SIGPLAN conference on Object-oriented programming systems, languages, and applications
An operational semantics and type safety prooffor multiple inheritance in C++
Proceedings of the 21st annual ACM SIGPLAN conference on Object-oriented programming systems, languages, and applications
COOTS'01 Proceedings of the 6th conference on USENIX Conference on Object-Oriented Technologies and Systems - Volume 6
The Python Language Reference Manual
The Python Language Reference Manual
Supporting SELL for high-performance computing
LCPC'05 Proceedings of the 18th international conference on Languages and Compilers for Parallel Computing
Efficient multimethods in a single dispatch language
ECOOP'05 Proceedings of the 19th European conference on Object-Oriented Programming
Featherweight Java with dynamic and static overloading
Science of Computer Programming
Symmetric encapsulated multi-methods to abstract over application structure
Proceedings of the 2009 ACM symposium on Applied Computing
CZ: multiple inheritance without diamonds
Proceedings of the 24th ACM SIGPLAN conference on Object oriented programming systems languages and applications
Dynamic algorithm selection for runtime concepts
Science of Computer Programming
Checking structural integrity for metadata repository systems by means of description logics
DASFAA'10 Proceedings of the 15th international conference on Database systems for advanced applications
JavaGI: The Interaction of Type Classes with Interfaces and Inheritance
ACM Transactions on Programming Languages and Systems (TOPLAS)
A safe implementation of dynamic overloading in java-like languages
FSEN'09 Proceedings of the Third IPM international conference on Fundamentals of Software Engineering
Abstraction over implementation structure with symmetrically encapsulated multimethods
Science of Computer Programming
Proceedings of the 2013 companion publication for conference on Systems, programming, & applications: software for humanity
Proceedings of the 12th international conference on Generative programming: concepts & experiences
Hi-index | 0.00 |
Multiple dispatch - the selection of a function to be invoked based on the dynamic type of two or more arguments - is a solution to several classical problems in object-oriented programming. Open multi-methods generalize multiple dispatch towards open-class extensions, which improve separation of concerns and provisions for retroactive design. We present the rationale, design, implementation, and performance of a language feature, called open multi-methods, for C++. Our open multi-methods support both repeated and virtual inheritance. Our call resolution rules generalize both virtual function dispatch and overload resolution semantics. After using all information from argument types, these rules can resolve further ambiguities by using covariant return types. Great care was taken to integrate open multi-methods with existing C++ language features and rules. We describe a model implementation and compare its performance and space requirements to existing open multi-method extensions and workaround techniques for C++. Compared to these techniques, our approach is simpler to use, catches more user mistakes, and resolves more ambiguities through link-time analysis, runs significantly faster, and requires less memory. In particular, the runtime cost of calling an open multi method is constant and less than the cost of a double dispatch (two virtual function calls). Finally, we provide a sketch of a design for open multi-methods in the presence of dynamic loading and linking of libraries.