
Maxime van Noppen, Roland Levillain, Akim Demaille.
Introducing SCOOL.
CSI Seminar van-noppen.09.dslwc January 2009
English:
C++ has proved to be a powerful language to write generic and efficient
libraries. However using classical Object Oriented C++ does not suffice to reach
the levels of efficiency required in domains where
large data sets have to be processed through generic algorithms, e.g.,
scientific libraries.
A solution consists in combining the power of Object Oriented Programming and
static programming --- which is in fact meta-code expressed thanks to C++ template constructs. This
has the advantage of replacing the OO run-time overhead (due to virtual
method dispatch) by compile-time computations. However, such an approach
relies on code that is
verbose, hard to write and to maintain. Though powerful, C++ lacks
high-level static features, and thus clutters the semantics of static
constructs with unrelated
code.
We present SCOOL, a ``static'' language mixing OO and Generic Programming,
created to take advantage of all
the power of static C++ thanks to a more expressive syntax and
high-level constructs, without the drawbacks of plain C++.
As a full-fledged static OOP language, SCOOL provides
polymorphic methods (i.e., inclusion polymorphism), with the notable
difference that every polymorphic call is statically-resolved: the
design of SCOOL is based on the property that the exact (dynamic) type of every
object is known at compile-time.
As the aim of SCOOL is to bring all the power of static OOP to
C++, it is not directly compiled but translated into human-readable C++. The
development of the translator raised classical problems found in
Domain Specific Languages like traversal strategies of the abstract syntax
tree. We propose an original solution based on the Stratego/XT program
transformation framework, in the context of Milena, a generic and
efficient C++ library from the Olena image processing platform.
French:
Le C++ est un langage puissant pour écrire des bibliothèques génériques et
performantes. Cependant, dans certains domaines l'utilisation de l'orienté objet
usuel peut poser des problèmes de performances, comme dans celui des
bibliothèques de calcul scientifique dans lesquelles de grands ensembles de
données parcourus par des algorithmes génériques. La solution proposée est la
combinaison de la programmation orientée objet classique et de la programmation
statique qui est en fait de la meta-programmation utilisant intensivement
les templates du C++. Ceci a l'avantage de remplacer le coût à
l'execution de l'orienté objet dû à la résolution des méthodes virtuelles par un
coût à la compilation. Cependant, cela engendre souvent du code verbeux,
difficile à écrire et à maintenir. Malgré sa puissance, le C++ ne possède
pas d'abstractions statiques de haut niveau ce qui encombre la sémantique
du code avec des détails d'implémentation. Nous vous présentons SCOOL, un
langage statique fusionnant l'orienté objet et la programmation générique
dans le but d'exploiter toute la puissance du C++ statique grâce à une
syntaxe plus expressive. De plus, toutes les résolutions de méthodes se
feront statiquement grâce au fait que le type exact (dynamique) de chaque
objet est connu à la compilation. Le but de SCOOL étant d'apporter toute
la puissance de l'orienté objet statique au C++, il ne sera pas
directement compilé mais traduit en C++ correctement formaté. Le
développement du traducteur a soulevé les problèmes classiques du domaine
des DSL comme la stratégie de parcours de l'arbre de syntaxe. Nous
proposons une solution originale basée sur la plateforme de transformation
de programme Stratego/XT avec des applications à Milena, la bibliothèque
génrique et performante de traitement d'image de la plateforme Olena.
to top