

Une idée fausse de plus en plus répandue
Ces derniers temps, je vois certaines personnes soutenir cette idée :
le transpileur TypeScript vers JavaScript ne serait pas un compilateur.
Plus généralement, tout transpileur ne serait pas un compilateur.
Je ne l’ai pas lu qu’une seule fois, mais bien plusieurs, ce qui me pousse à écrire ce petit billet d’humeur.
La définition de compilateur
Compilateurs : Principes, techniques et outils. Cours et exercices, auteurs Alfred Aho, Ravi Sethi et Jeffrey Ullman, éditions Dunod 2000, premier chapitre, premier sous-chapitre, première page de ce même sous-chapitre, première phrase :
« Selon une définition simplifiée, un compilateur est un programme qui lit un programme écrit dans un premier langage – le langage source – et le traduit en un programme équivalent – le langage cible -. »
En lisant honnêtement cette définition, rien n’indique que le langage cible doit nécessairement être de plus bas niveau que le langage source.
Hou ! les vilains
Ce qui m’agace dernièrement, ce n’est pas tant de lire des choses fausses écrites par certaines personnes sur le sujet : tout le monde peut se tromper.
C’est surtout de constater que ces mêmes personnes, donneuses de leçons,
ridiculisent à tort les messagers – et non, ce n’est pas moi – de la définition originelle, sans avoir lu ne serait-ce que la première page de ce livre de référence.
Un peu d’histoire des transpileurs
Certes, usuellement, les compilateurs sont utilisés pour traduire un langage de haut niveau vers un autre de bas niveau. Cependant, dans un esprit de rigueur, j’ai tenu à parcourir « l’histoire » des transpileurs, et j’ai découvert qu’ils étaient utilisés depuis plus de quarante ans, notamment au début des années 80, pour passer d’un langage assembleur à un autre.
La démonstration
Ainsi, rien n’interdit à un compilateur de traduire un langage en un autre du même niveau, cf. définition plus haut.
Par ailleurs, les transpileurs ont plusieurs autres noms : transcompilateur ou compilateur source à source.
Avez-vous noté le terme « com-pi-la-teur » ?
L’ensemble des compilateurs contient strictement l’ensemble des transpileurs.
L’ensemble des transpileurs n’est pas l’ensemble des compilateurs, en effet.
La plupart des compilateurs ne sont pas des transpileurs, évidemment.
Mais, tous les transpileurs appartiennent à l’ensemble des compilateurs.
Et donc, tous les transpileurs sont des compilateurs… particuliers.
CQFD.
Cet article vous a plu ? N’hésitez pas à consulter les autres!