A Uniform Terminology for C + + Concepts

The purpose of this note is to specify a uniform terminology for the design and implementation of concepts for C++, based on influential literature on generic programming with concepts. The terminology results from an ongoing work in specifying an infrastructure for implementing C++ concepts, called ConceptClang. We solicit feedback and hope that the terminology will facilitate conversations about C++ concepts as efforts in language support for the feature in question evolve. In this specification, we define each term with an explanation of the rationale behind it, especially when it may conflict with existing terminology, and relate it to ongoing design and implementation efforts. The process highlights key components of the concepts feature and their diverse relationships with either structural or named conformances for matching types to concepts.

[1]  David R. Musser,et al.  Tecton: A Framework for Specifying and Verifying Generic System Components , 1992 .

[2]  Jeremy G. Siek,et al.  A language for generic programming , 2005 .

[3]  Jeremy G. Siek,et al.  Caramel: A Concept Representation System for Generic Programming , 2001 .

[4]  Bjarne Stroustrup,et al.  A Concept Design for the STL , 2012 .

[5]  Benjamin C. Pierce,et al.  Types and programming languages: the next generation , 2003, 18th Annual IEEE Symposium of Logic in Computer Science, 2003. Proceedings..

[6]  Jeremy G. Siek,et al.  Concept Checking: Binding Parametric Polymorphism in C++ , 2000 .

[7]  Andrew Lumsdaine,et al.  ConceptClang: an implementation of C++ concepts in Clang , 2011, WGP@ICFP.

[8]  Xiaolong Tang,et al.  Concept-based optimization , 2007, LCSD '07.

[9]  Douglas Gregor,et al.  Implementing Concepts , 2005 .

[10]  David R. Musser,et al.  STL tutorial and reference guide - C++ programming with the standard template library , 1996, Addison-Wesley professional computing series.

[11]  Gerald J. Sussman,et al.  Structure and interpretation of computer programs , 1985, Proceedings of the IEEE.

[12]  Bjarne Stroustrup,et al.  Concepts: linguistic support for generic programming in C++ , 2006, OOPSLA '06.

[13]  Sibylle Schupp,et al.  Generic programming with C++ concepts and Haskell type classes - a comparison , 2010, J. Funct. Program..

[14]  Paul R. McJones,et al.  Elements of Programming , 2009 .

[15]  Magne Haveraaen,et al.  Concepts as Syntactic Sugar , 2009, 2009 Ninth IEEE International Working Conference on Source Code Analysis and Manipulation.

[16]  Jaakko Järvi,et al.  An extended comparative study of language support for generic programming , 2007, Journal of Functional Programming.

[17]  Michael J. Vilot,et al.  Standard template library , 1996 .

[18]  Matthew H. Austern Generic programming and the STL - using and extending the C++ standard template library , 1999, Addison-Wesley professional computing series.

[19]  Magne Haveraaen Institutions, property-aware programming and testing , 2007, LCSD '07.

[20]  David R. Musser,et al.  A Formalization of Concepts for Generic Programming , 2004 .

[21]  John C. Mitchell,et al.  Concepts in programming languages , 2002 .

[22]  Mitchell Wand,et al.  Essentials of programming languages , 2008 .