Image de couverture - Différences entre compiler et transpiler

Différences entre compiler et transpiler

Bien que les termes « compilation » et « transpilation » partagent des similitudes, ils diffèrent fondamentalement dans la manière dont ils traitent le code source.

Icône de calendrier
Icône de chronomètre 4 min

Langage haut niveau VS langage bas niveau

Avant d’aborder les concepts de compilation et transpilation, il est important de comprendre ce qu’est un langage haut niveau et un langage bas niveau.

Langage bas niveau

La syntaxe de ces langages est très proche de l’écriture d’instructions machine réelles. Le code est cryptique, c’est-à-dire qu’il n’est pas ou très peu lisible par l’homme.

Voici quelques exemples de langages de bas niveau :

  • Le langage machine (binaire et hexadécimal généralement)
  • L’assembleur

Voici un exemple de langage machine hexadécimal :

hexadécimal
68 6C 6C 6F 20 2C 20 57 6F 72 6C 64 21 0A 00

Langage haut niveau

Pour cela, les langages de programmation de haut niveau proposent une couche d’abstraction syntaxique.

C’est grâce à eux que l’on aura par exemple tendance à écrire (en C) :

demo.c
#include <stdio.h>

int main() {
	printf("Hello, World!\n");
	return 0;
}

Un peu plus sympa que du code hexadécimal n’est-ce pas ? 🤔

Compilation

La compilation consiste à transformer un langage haut niveau vers un langage de plus bas niveau.

Un compilateur est un outil de développement logiciel qui :

  • Prend en entrée le code source écrit dans un langage de programmation
  • Produit en sortie une transformation de ce code dans un autre langage de plus bas niveau

La plupart du temps, le code en sortie est en langage machine, c’est par exemple le cas lors de la compilation du C, C++ ou Rust qui sont convertis en code binaire, compris par un ordinateur.

En revanche, cela n’est pas toujours le cas. Le code source est parfois compilé en un langage intermédiaire. C’est par exemple le cas du Java et du Python qui sont compilés en « bytecode ».

Le processus de compilation comprend plusieurs étapes, notamment l’analyse lexicale, l’analyse syntaxique, la génération de code intermédiaire, l’optimisation du code et la génération du code final. Le résultat final est un programme exécutable, prêt à être utilisé sur la plateforme cible.

Transpilation

La transpilation consiste à transformer un langage haut niveau vers un autre langage haut niveau.

Un transpileur est un outil de développement logiciel qui :

  • Prend en entrée le code source écrit dans un langage de programmation
  • Produit en sortie une transformation de ce code dans un autre langage de même niveau

Les transpileurs sont couramment utilisés pour venir « doper » des langages, à l’image de :

  • TypeScript, le célèbre sur-ensemble (« superset ») de JavaScript qui est transpilé en JavaScript standard, permettant aux développeurs d’écrire un code plus sûr et plus maintenable.
  • Sass ou encore Less, les célèbres préprocesseurs CSS transpilés en CSS standard, permettant aux développeurs de simplifier et d’améliorer le processus de développement (usage de variables, boucles, mixins…).

Les transpileurs sont aussi couramment utilisés pour résoudre des problèmes de compatibilité entre les navigateurs web. Par exemple, lorsque vous écrivez du code JavaScript moderne utilisant des fonctionnalités avancées, un transpileur tel que Babel peut-être utilisé pour le convertir en une version plus ancienne de JavaScript qui est compatible avec un plus grand nombre de navigateurs.

Compiler VS transpiler : principales différences

En conclusion, bien que la compilation et la transpilation semblent similaires dans la mesure où elles convertissent toutes deux du code source, leur objectif final diffère considérablement.

Voici un tableau récapitulatif résumant les principales différences entre la compilation et la transpilation :

CritèresCompilationTranspilation
Niveau de langageTransforme un langage haut niveau en un langage de plus bas niveau (souvent langage machine).Transforme un langage haut niveau en un autre langage haut niveau.
LisibilitéLe code résultant est souvent cryptique et illisible pour les humains.Préserve la lisibilité humaine du code source, facilitant la maintenance.
PortabilitéLe code compilé est spécifique à la plateforme cible, nécessitant une compilation distincte pour chaque plateforme (OS, architecture matérielle…).Permet de rendre le code compatible avec différentes plates-formes ou navigateurs.
ExemplesC, C++, Rust : compilés en langage machine, spécifique à la plateforme. Java et Python : compilés en bytecode pour être interprété par une machine virtuelle.TypeScript : transpilé en JavaScript standard. Sass et Less : transpilés en CSS standard. Babel : transpile du code JavaScript moderne en JavaScript compatible avec de nombreux navigateurs.

Lire aussi