How to make ad-hoc polymorphism less ad hoc
POPL '89 Proceedings of the 16th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Polymorphic type inference and abstract data types
ACM Transactions on Programming Languages and Systems (TOPLAS)
Design patterns: elements of reusable object-oriented software
Design patterns: elements of reusable object-oriented software
Component software: beyond object-oriented programming
Component software: beyond object-oriented programming
Contraint-based polymorphism in Cecil: towards a practical and static type system
Proceedings of the 13th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Framework integration problems, causes, solutions
Communications of the ACM
LEDA: a platform for combinatorial and geometric computing
LEDA: a platform for combinatorial and geometric computing
Normalized Cuts and Image Segmentation
IEEE Transactions on Pattern Analysis and Machine Intelligence
On the design of CGAL a computational geometry algorithms library
Software—Practice & Experience - Special issue on discrete algorithm engineering
The boost graph library: user guide and reference manual
The boost graph library: user guide and reference manual
The Matrix Template Library: Generic Components for High-Performance Scientific Computing
Computing in Science and Engineering
Introduction to the Special Section on Graph Algorithms in Computer Vision
IEEE Transactions on Pattern Analysis and Machine Intelligence - Graph Algorithms and Computer Vision
TEXTAL: A Pattern Recognition System for Interpreting Electron Density Maps
Proceedings of the Seventh International Conference on Intelligent Systems for Molecular Biology
ECOOP '01 Proceedings of the 15th European Conference on Object-Oriented Programming
Filling regions in binary raster images: A graph-theoretic approach
SIGGRAPH '80 Proceedings of the 7th annual conference on Computer graphics and interactive techniques
Concept-controlled polymorphism
Proceedings of the 2nd international conference on Generative programming and component engineering
Efficient Graph-Based Image Segmentation
International Journal of Computer Vision
Proceedings of the 32nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Proceedings of the tenth ACM SIGPLAN international conference on Functional programming
Lifting sequential graph algorithms for distributed-memory parallel computation
OOPSLA '05 Proceedings of the 20th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Algorithm specialization in generic programming: challenges of constrained generics in C++
Proceedings of the 2006 ACM SIGPLAN conference on Programming language design and implementation
Concepts: linguistic support for generic programming in C++
Proceedings of the 21st annual ACM SIGPLAN conference on Object-oriented programming systems, languages, and applications
Software extension and integration with type classes
Proceedings of the 5th international conference on Generative programming and component engineering
An extended comparative study of language support for generic programming
Journal of Functional Programming
Runtime concepts for the C++ standard template library
Proceedings of the 2008 ACM symposium on Applied computing
STAPL: an adaptive, generic parallel C++ library
LCPC'01 Proceedings of the 14th international conference on Languages and compilers for parallel computing
Effecting parallel graph eigensolvers through library composition
IPDPS'06 Proceedings of the 20th international conference on Parallel and distributed processing
From types to type requirements: genericity for model-driven engineering
Software and Systems Modeling (SoSyM)
Template metaprogramming techniques for concept-based specialization
Scientific Programming
Hi-index | 0.00 |
This paper explores the definition, applications, and limitations of concepts and concept maps in C++, with a focus on library composition. We also compare and contrast concepts to adaptation mechanisms in other languages. Efficient, non-intrusive adaptation mechanisms are essential when adapting data structures to a library's API. Development with reusable components is a widely practiced method of building software. Components vary in form, ranging from source code to non-modifiable binary libraries. The Concepts language features, slated to appear in the next version of C++, have been designed with such compositions in mind, promising an improved ability to create generic, non-intrusive, efficient, and identity-preserving adapters. We report on two cases of data structure adaptation between different libraries, and illustrate best practices and idioms. First, we adapt GUI widgets from several libraries, with differing APIs, for use with a generic layout engine. We further develop this example to describe the run-time concept idiom, extending the applicability of concepts to domains where run-time polymorphism is required. Second, we compose an image processing library and a graph algorithm library, by making use of a transparent adaptation layer, enabling the efficient application of graph algorithms to the image processing domain. We use the adaptation layer to realize a few key algorithms, and report little or no performance degradation.