
Introduction
Consolidation
Exploration Integration
Conclusion
Motivation
I
Expressivity
1. One thing, many dierent forms
2. One form, many dierent things
I
Genericity: case #2
I
E.g. write algorithms once, structural & behavioral details omitted
I
Note: intensional polymorphism
I
Problem: Genericity vs. Classical OO Design
I
Object model cluttering (class / method proliferation)
I
Missed optimization opportunities (cross-cutting)
I
Performance degradation (dynamic dispatch)
I
Solution: Generative Meta-Programming
4 Eciency (fully-dedicated code)
8 Maintainability (w/o code)
(dynamic (programming paradigms)) ;; performance and expressivity / Habilitation Defense – Didier Verna 17/42
template <template <class> class M, typename T, typename V>
struct ch_value_ <M <tag::value_<T>>, V>
{ typedef M<V> ret; };
template <template <class> class M, typename I, typename V>
struct ch_value_ <M <tag::image_<I>>, V>
{ typedef M <mln_ch_value(I, V)> ret; };
template <template <class, class> class M, typename T,
typename I, typename V>
struct ch_value_ <M <tag::value_<T>, tag::image_<I>>, V>
{ typedef mln_ch_value(I, V) ret; };
template <template <class, class> class M, typename P,
typename T, typename V>
struct ch_value_ <M <tag::psite_<P>, tag::value_<T>>, V>
{ typedef M<P, V> ret; };