Métaprogrammation et
libre disponibilité des sources

deux défis informatiques d'aujourd'hui*

François-René Rideau
francoisrene.rideau@cnet.francetelecom.fr
http://fare.tunes.org/

CNET DTL/ASR (France Telecom) #
38–40 rue du general Leclerc
92794 Issy Moulineaux Cedex 9, FRANCE

Résumé:

Nous présentons de façon complètement informelle la métaprogrammation, dont nous esquissons une théorie. Nous expliquons en quoi elle représente un enjeu majeur pour l'informatique d'aujourd'hui, dès lors que l'on examine les processus sous-jacents au développement logiciel. Nous montrons par les mêmes considérations, en quoi la métaprogrammation est liée à un autre défi de l'informatique, la libre disponibilité des sources des logiciels, et comment ces deux phénomènes se complètent naturellement.

1   Introduction

Dans les conditions primitives des débuts de l'informatique, la capacité des machines était si petite qu'un seul homme pouvait embrasser de la pensée l'ensemble du fonctionnement d'un programme jusqu'à ses moindres détails. Cependant, les facultés humaines n'ont pas changé depuis, tandis que la capacité des machines a suivi une progression géométrique soutenue. Pour profiter de l'évolution technologique, il a donc été nécessaire de développer et d'utiliser des outils conceptuels et des langages de programmation de plus en plus abstraits.

Mais quels que soient les progrès effectués individuellement par les programmeurs, il est un niveau de complexité depuis fort longtemps dépassé au-delà duquel nul ne peut seul concevoir dans son intégralité un programme qui tire pleinement parti des machines existantes. Il est donc primordial de développer des méthodes d'échange, de coopération, d'accumulation, de construction, pour permettre l'élaboration de programmes complexes ; tel est le domaine du génie logiciel [].

Or, au centre de tout processus de construction logicielle, il y a la manipulation des sources des programmes. Améliorer ces processus, faciliter la tâche du programmeur, c'est délivrer le programmeur de toutes les opérations répétitives et conceptuellement redondantes, pour qu'il puisse se concentrer sur l'essentiel de la programmation, c'est-à-dire sur les problèmes qui n'ont encore jamais été résolus. C'est donc automatiser autant que possible la manipulation du code, en faisant exécuter de manière fiable par la machine toutes les tâches subalternes qui ne posent plus de problème théorique. Et automatiser la programmation, c'est par définition métaprogrammer.

La métaprogrammation, art de programmer des programmes qui lisent, manipulent, ou écrivent d'autres programmes, apparaît donc naturellement dans la chaîne de développement logiciel, où elle joue un rôle essentiel, ne fusse «que» sous la forme de compilateurs, interpréteurs, débogueurs. Cependant, elle n'est quasi jamais intégrée consciemment dans les processus de développement, et la prise de conscience de son rôle est précisément le premier pas vers un progrès en la matière.

Maintenant, même si nous voulions nous consacrer à la tâche technique, suffisamment ardue en elle-même, consistant à explorer les méthodes d'automatisation du processus de développement logiciel, il nous est impossible d'ignorer la précondition nécessaire à l'utilisation de toute telle méthode ainsi que de tout travail incrémental ou coopératif : la disponibilité des sources.

Cette disponibilité est moins que jamais un problème technique, grâce à l'avènement des télécommunications numériques ; mais elle est plus que jamais un problème politique, à l'heure où la quasi-totalité de l'information sur la planète est sous le contrôle de monopoles éditoriaux organisés en puissants groupes de pression. C'est pour la libre disponibilité des sources, voire de l'information en général, que milite le mouvement pour le Libre Logiciel, qui combat les barrières artificielles que sont les privilèges légaux de «propriété intellectuelle».

Métaprogrammation et libre disponibilité des sources, tels sont les deux défis majeurs, intimement liés, auxquels a à faire face l'informatique aujourd'hui, et qui acquièrent une importance chaque jour plus grande. Tous deux trouvent la même justification cybernétique1 Le mot «cybernétique» est construit sur la racine grecque κυβερν