Specialization modules



What is a specialization module ?

We have developed a declarative approach that aims to integrate program specialization into the software development process to systematically and efficiently instantiate/configure generic software components. Our approach relies on a declaration language which enables a component developer to express the configurability of a component. The declarations consist of a collection of specialization scenarios that precisely identify what program constructs are of interest for specialization. The scenarios of a component do not clutter the component code; they are defined aside in a specialization module .

Specializable components are created from the declarations and the component code through a compilation process. This phase mainly corresponds to carrying out several analyses to automatically determine how to specialize the component accordingly to the declared specialization scenarios. Once generated, specializable components can be distributed to be tailored by application builders by specifying appropriate specialization values.

We have designed our declaration language in the context of the C language and implemented the corresponding compiler. We have used our specializer, named Tempo , as our specialization engine to which we have added verifications in order to make the specialization process predictable with respect to the declarations. We have also developed a graphical environment both to assist the component developer in the process of making components specializable and to enable component users to create specialized components.


Papers

                    A.-F. Le Meur, C. Consel, B. Escrig
                    In IFIP/ACM Conference on Component Deployment, pages 1-14, Berlin, Germany, June 20-21 2002.
                    A.-F. Le Meur, J. L. Lawall, C. Consel
                    In ACM SIGPLAN Workshop on Partial Evaluation and Semantics-Based Program Manipulation (PEPM '02),
                    pages 9-18, Portland, OR, USA, Jan 14-15 2002.