Generic Programming and High-Performance Libraries

Summary form only given. Generic programming is an attractive paradigm for developing libraries for high-performance computing because of the simultaneous emphases placed on generality and efficiency. In this approach, interfaces are based on sets of specified requirements on types, rather than on any particular type, allowing algorithms to interoperate with any data type meeting the necessary requirements. These sets of requirements, known as concepts, can specify syntactic as well as semantic requirements. Although concepts are fundamental to generic programming, they are not supported as first-class entities in mainstream programming languages, thus limiting the degree to which generic programming can be effectively applied. We advocate better syntactic and semantic support for concepts and describe some straightforward language features that could better support them. We also briefly discuss uses for concepts beyond their use in constraining polymorphism.

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

[2]  Alexander A. Stepanov,et al.  Higher Order Imperative Programming , 2004 .

[3]  Konstantinos Arkoudas Denotational proof languages , 2000 .

[4]  Gerald Baumgartner,et al.  Safe Structural Conformance for Java , 2000, Comput. J..

[5]  Jeremy G. Siek,et al.  The Boost Graph Library - User Guide and Reference Manual , 2001, C++ in-depth series.

[6]  Philip Wadler,et al.  How to make ad-hoc polymorphism less ad hoc , 1989, POPL '89.

[7]  Gerald Baumgartner,et al.  Signatures: A language extension for improving type abstraction and subtype polymorphism in C++ , 1995, Softw. Pract. Exp..

[8]  Scott F. Smith,et al.  Type inference for recursively constrained types and its application to OOP , 1995, MFPS.

[9]  Jaakko Järvi,et al.  A comparative study of language support for generic programming , 2003, OOPSLA 2003.

[10]  Sibylle Schupp,et al.  User-Extensible Simplification - Type-Based Optimizer Generators , 2001, CC.

[11]  James Demmel,et al.  Design, implementation and testing of extended and mixed precision BLAS , 2000, TOMS.

[12]  Leor Zolman An STL message decryptor for visual C , 2001 .

[13]  Narciso Martí-Oliet,et al.  Maude: specification and programming in rewriting logic , 2002, Theor. Comput. Sci..

[14]  Craig Schaffert,et al.  Abstraction mechanisms in CLU , 1977, Commun. ACM.

[15]  Bjarne Stroustrup,et al.  Concepts – Design choices for template argument checking , 2003 .

[16]  Douglas Gregor,et al.  High-level static analysis for generic libraries , 2004 .

[17]  John C. Mitchell,et al.  F-bounded polymorphism for object-oriented programming , 1989, FPCA.

[18]  Urs Hölzle,et al.  Integrating Independently-Developed Components in Object-Oriented Languages , 1993, ECOOP.

[19]  Jeremy G. Siek,et al.  The Matrix Template Library: A Generic Programming Approach to High Performance Numerical Linear Algebra , 1998, ISCOPE.

[20]  Alexander A. Stepanov,et al.  C++ Standard Template Library , 2000 .

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

[22]  Juris Hartmanis,et al.  The Programming Language Ada Reference Manual American National Standards Institute, Inc. ANSI/MIL-STD-1815A-1983 , 1983, Lecture Notes in Computer Science.

[23]  Sibylle Schupp,et al.  Making the Usage of STL Safe , 2002, Generic Programming.

[24]  Richard D. Jenks,et al.  AXIOM: the scientific computation system , 1992 .

[25]  Jaakko Järvi,et al.  An Analysis of Constrained Polymorphism for Generic Programming , 2003 .

[26]  Andrew C. Myers,et al.  Subtypes vs. where clauses: constraining parametric polymorphism , 1995, OOPSLA.

[27]  Mark P. Jones Qualified Types: Theory and Practice , 1994 .

[28]  Simon Peyton Jones,et al.  Type classes: an exploration of the design space , 1997 .

[29]  Luca Cardelli,et al.  On understanding types, data abstraction, and polymorphism , 1985, CSUR.