How to make ad-hoc polymorphism less ad hoc
POPL '89 Proceedings of the 16th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
PLDI '93 Proceedings of the ACM SIGPLAN 1993 conference on Programming language design and implementation
The design and evolution of C++
The design and evolution of C++
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
Modern C++ design: generic programming and design patterns applied
Modern C++ design: generic programming and design patterns applied
The boost graph library: user guide and reference manual
The boost graph library: user guide and reference manual
The C++ Programming Language
Principal type-schemes for functional programs
POPL '82 Proceedings of the 9th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
ECOOP '93 Proceedings of the 7th European Conference on Object-Oriented Programming
C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond (C++ in Depth Series)
Conference record of the 33rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Algorithm specialization in generic programming: challenges of constrained generics in C++
Proceedings of the 2006 ACM SIGPLAN conference on Programming language design and implementation
The C++ Standard Library Extensions: A Tutorial and Reference
The C++ Standard Library Extensions: A Tutorial and Reference
Concepts: linguistic support for generic programming in C++
Proceedings of the 21st annual ACM SIGPLAN conference on Object-oriented programming systems, languages, and applications
Library composition and adaptation using c++ concepts
GPCE '07 Proceedings of the 6th international conference on Generative programming and component engineering
Elements of Programming
STAPL: an adaptive, generic parallel C++ library
LCPC'01 Proceedings of the 14th international conference on Languages and compilers for parallel computing
Keynote speech: abstraction and the c++ machine model
ICESS'04 Proceedings of the First international conference on Embedded Software and Systems
Design of concept libraries for c++
SLE'11 Proceedings of the 4th international conference on Software Language Engineering
Hi-index | 0.00 |
The choice of requirements for an argument of a generic type or algorithm is a central design issue in generic programming. In the context of C++, a specification of requirements for a template argument or a set of template arguments is called a concept. In this paper, we present a novel tool, TACE (template analysis and concept extraction), designed to help programmers understand the requirements that their code de facto imposes on arguments and help simplify and generalize those through comparisons with libraries of well-defined and precisely-specified concepts. TACE automatically extracts requirements from the body of function templates. These requirements are expressed using the notation and semantics developed by the ISO C++ standards committee. TACE converts implied requirements into concept definitions and compares them against concepts from a repository. Components of a well-defined library exhibit commonalities that allow us to detect problems by comparing requirements from many components: Design and implementation problems manifest themselves as minor variations in requirements. TACE points to source code that cannot be constrained by concepts and to code where small modifications would allow the use of less constraining concepts. For people who use a version of C++ with concept support, TACE can serve as a core engine for automated source code rejuvenation.