Si il y a vraiment un projet qui m'avait impressionné, même s'il n'a jamais vraiment abouti, c'est le projet Viper, qui avait pour but de ré-implémenter un interpréteur Python en ObjectiveCaml. C'était à l'époque (1999) quelque chose d'assez mystérieux, de plutôt audacieux, et d'un intérêt finalement assez discutable.

Aujourd'hui, je dois dire que j'ai un regard différent vis-à-vis de cette initiative : à y regarder de plus près, un des buts sous-jacents était bien d'introduire une certaine flexibilité permettant de reprogrammer/redéfinir une partie de la syntaxe du langage Python, et plus particulièrement de pouvoir y introduire des extensions (elles sont listées dans le mail d'annonce du projet).

Pourquoi aujourd'hui ais-je un regard différent ? Une première réponse est sans doute dû à la multiplication récente des langages, qui nous a (partiellement) "déniaisé" sur leur nature : la confrontation avec différents styles (impératifs, fonctionnels), différents systèmes (statique, dynamique, typé, non typé), nous permet de mieux comprendre ce qu'est vraiment un langage, et notamment la différence qui sépare une syntaxe et une sémantique. Traditionnellement, les deux sont intrinsèquement liées, car la sémantique est en général mal maîtrisée. Les langages sont plus subis qu'autre chose, d'une part car chaque langage requiert une certaine formation (mais pas si importante quand le langage est "ergonomique", comme Python), d'autre part parce que les outils sont très fermés (peu de macro-processeurs, parsers très fermés, etc).

La seconde réponse est que maintenant, et notamment depuis XML, nous avons goûté au plaisir du développement de mini-langages structurés, permettant de décrire de manière expressive des éléments d'un domaine particulier (on voit ceci notamment dans le domaine des applications Web, historiquement proche des technologies XML), et qu'il est souvent un peu "rude" de devoir revenir à une programmation fastidieuse avec des langages offrant des abstractions moins appropriées ou moins riches.

Alors voilà, je pense qu'il est temps d'intégrer la réflexion sur le/les langages de programmation au sein de l'approche d'ingénierie logicielle : créer ou adapter un langage n'est finalement pas quelque chose de risqué si l'on choisit avec soin les extensions/aménagements spécifiques au domaine que l'on va y faire. Pourquoi obliger les développeurs à écrire inlassablement les mêmes bouts de code (avec les risque d'erreurs associés), alors qu'il serait possible de leur fournir un construct exprimant l'intégralité de ces bouts de de code ? Je pense que c'est une question à se poser...