Programmation : comprendre les concepts de compilation et d'interprétation

Général 28 avr. 2020

Le rôle d'un programmeur est de donner des ordres à une machine pour qu'elle fasse une suite d'actions utiles dans un ordre précis.

Cette machine ne parle pas nos langues humaines, et nous ne parlons pas sa langue : le binaire (plus précisément les courants électriques mais ne rentrons pas dans les détails).

Il faut donc trouver un compromis, et le programmeur doit apprendre des langages intermédiaires pour communiquer avec elle : C++, Swift, Kotlin, PHP, Javascript, etc.

Ces langages sont plus proches du binaire mais ne sont toujours pas compréhensibles par votre ordinateur ou votre smartphone : il faut donc les traduire en véritable code binaire pour obtenir un exécutable.

Cet article vise à vous expliquer quelles sont différentes façon de traduire du code en binaire.

La compilation

Un premier type de traduction utilise un logiciel appelé compilateur, le processus se passe entièrement sur l'ordinateur du développeur.

Ce compilateur est fournit par les créateurs du langage :

  1. Il reçoit des fichiers texte dans lequel le programmeur a listé les ordres à donner dans un langage de programmation compatible avec ce compilateur
  2. Il traduit tous ces fichiers contenant du texte en un seul exécutable (sur Windows on parle souvent de fichier .exe) qui ne contient que du code binaire

Le programmeur n'a plus qu'à envoyer le fichier exécutable à ses utilisateurs via un site web ou un AppStore.

Lorsque les utilisateurs téléchargent l'exécutable, ils peuvent l'utiliser tout de suite puisqu'il contient du code binaire, compréhensible par leur appareil (ordinateur, smartphone, tablette, etc.)

Avantages de la compilation :

  • Performances élevées de l'app chez l'utilisateur
  • Confidentialité des sources : les utilisateurs finaux ne verrons que le code binaire
  • Force le programmeur à être rigoureux dans la syntaxe et la gestion de la mémoire

Inconvénients de la compilation :

  • Chaque modification de code doit entraîner une recompilation de l'app et un envoi de nouvel exécutable aux utilisateurs
  • L'utilisateur ne pourra jamais modifier l'app, même s'il est programmeur. Il lui faut les codes sources.
  • Un peu plus difficiles à apprendre pour une personnes n'ayant jamais programmé

Exemples de langages compilés (ou basés sur du bytecode*) :

  • C++
  • C#
  • Swift
  • Kotlin / Java

L'interprétation

Un autre type de traduction se fait via un interprète (ou interpréteur) qui traduira en temps réel le code source, en instructions à suivre. Chaque utilisateur reçoit donc le code source de l'app (et non un exécutable) et il doit installer l'interprète sur sa machine.

La compilation traduit une seule fois en amont chez le développeur, alors que l'interprétation va traduire en temps réel à chaque fois que l'app sera lancée chez l'utilisateur.

Avantages de l'interprétation :

  • L'utilisateur peut modifier les codes source de l'app (s'il sait ce qu'il fait…)
  • Légèrement plus simples à prendre en main que des langages compilés
  • Le programmeur a rarement besoin de gérer la consommation mémoire de son app

Inconvénients de l'interprétation :

  • Les performances seront moins bonnes qu'une app compilée
  • S'il y a une erreur de syntaxe dans votre code, elle peut ne pas être détectée par le programmeur et provoquer des bugs ou crash chez les utilisateurs
  • Les codes sources originaux sont visibles et modifiables par les utilisateurs
  • L'utilisateur doit lui-même installer l'interprète et peut se tromper de version

Exemples de langages interprétés :

  • Javascript … avec ses interprètes Chrome, Safari, Firefox, Edge, Brave, etc. ;)
  • PHP
  • Python

Conclusion

Chaque famille de langage répond à un besoin particulier et pour chaque cas, il y des solutions qui sont plus efficaces que d'autres. Et puis il y a aussi les préférences de chacun : personnellement j'apprécie beaucoup plus les langages compilés, que les langages interprétés mais d'autres développeurs seront dans le cas inverse.

Le plus important est de suivre le bon ordre lors de votre apprentissage initial, ensuite vous serez capable de passer facilement de l'un à l'autre.

Si vous vous demandez quel est le meilleur langage pour apprendre à programmer, j'ai fait un article dédié, disponible ici : Apprendre la programmation : quel langage choisir ?

Happy coding!

Maxime

*Bytecode : le bytecode est utilisé dans certains langages qui mélangent le principe de la compilation et de l'interprétation pour profiter des avantages des 2 solutions. Je pourrai prendre le temps de vous expliquer si ça vous intéresse ; tenez moi juste au courant ;)

Mots clés