We are happy to announce that the following paper has been accepted
for publication at the 6th International Workshop on Multiparadigm
Programming with Object-Oriented Languages (MPOOL 2008) that will take
place at Paphos, Cyprus, on July 7, 2008:
Thierry Géraud and Roland Levillain
Semantics-Driven Genericity: A Sequel to the Static C++
Object-Oriented Programming Paradigm (SCOOP 2)
http://publis.lrde.epita.fr/200806-ITICSE
Classical (unbounded) genericity in C++03 defines the interactions
between generic data types and algorithms in terms of concepts.
Concepts define the requirements over a type (or a parameter) by
expressing constraints on its methods and dependent types (typedefs).
The upcoming C++0x standard will promote concepts from abstract
entities (not directly enforced by the tools) to language constructs,
enabling compilers and tools to perform additional checks on generic
constructs as well as enabling new features (e.g., concept-based
overloading). Most modern languages support this notion of signature
on generic types. However, generic types built on other types and
relying on concepts to both ensure type conformance and drive code
specialization, restrain the interface and the implementation of the
newly created type: specific methods and associated types not
mentioned in the concept will not be part of the new type. The
paradigm of concept-based genericity lacks the required semantics to
transform types while retaining or adapting their intrinsic
capabilities. We present a new form of semantically-enriched
genericity allowing static generic type transformations through a
simple form of type introspection based on type metadata called
properties. This approach relies on a new Static C++ Object-Oriented
Programming (SCOOP) paradigm, and is adapted to the creation of
generic and efficient libraries, especially in the field of scientific
computing. Our proposal uses a metaprogramming facility built into a
C++ library called Static, and doesn't require any language extension
nor additional processing (preprocessor, transformation tool).