Du langage de programmation au langage machine (2/3)

Du langage de programmation au langage machine (2/3)

  • Post author:
  • Post category:Tech (PnP)

Par Pauline Sicsik

Dans un article précédent, nous avons vu que les langages de programmation sont la façon dont le développeur communique avec l’ordinateur. Nous allons à présent aborder un point fondamental de la programmation : la façon dont un langage de programmation est traduit en langage machine, c’est-à-dire la langue maternelle de l’ordinateur.

Le langage machine

Imaginez la rencontre, certes improbable, entre Neytiri (Avatar) et Khal Drogo (Game of Thrones). La première ne parle et ne comprend que le na’vi et le deuxième ne parle et ne comprend que le dothraki. Pour échanger des informations, Neytiri et Khal Drogo auront besoin d’un traducteur. Maintenant, remplacez Neytiri par le développeur, le na’vi par n’importe quel langage de programmation, Khal Drogo par un microprocesseur et le dothraki par des 0 et 1 : vous avez la problématique d’exécution d’un programme informatique. (J’espère que vous suivez ;))

Lorsqu’un développeur écrit un programme dans n’importe quel langage que ce soit, celui-ci est contenu dans un ou plusieurs fichiers texte, appelés fichiers sources. Le programme est alors visualisable dans un éditeur de texte. Toutefois, un fichier source ne peut pas être exécuté directement par un ordinateur, car le seul langage qu’un ordinateur peut exécuter est le langage machine adapté à son processeur, codé en binaire. Pour qu’un ordinateur puisse exécuter le fichier source, celui-ci doit donc d’abord être traduit en langage machine (ou code machine). Pour ce faire, il existe deux approches, selon le langage du code source : la compilation et l’interprétation.

La compilation

La compilation consiste à traduire l’ensemble du code source en code machine directement exécutable par l’ordinateur. La compilation se fait grâce à un compilateur, qui est lui-même un programme exécutable. Un compilateur est spécifique à un langage. Une fois que le programme a été compilé, il peut être exécuté en étant chargé dans la mémoire centrale. ‘C’ est un exemple de langage compilé.

Schéma simplifié du principe de la compilation
L’interprétation

L’interprétation consiste, de façon successive, à traduire une à une chaque ligne du code source en code machine et à l’exécuter par l’ordinateur : autrement dit, l’interprétation et l’exécution sont concomitants. L’interprétation se fait grâce à un interpréteur. Un interpréteur est spécifique à un langage. Pour exécuter un programme à interpréter, il faut lancer l’interpréteur et charger le code source dans la mémoire centrale pour que celui-ci soit exécuté par l’interpréteur puis par l’ordinateur. Java et PHP sont des exemples de langages interprétés.

Schéma simplifié du principe d’interprétation

Il existe également une approche compilation/interprétation, qui consiste à compiler le code source en code intermédiaire, ensuite interprété sur l’ordinateur.

La compilation et l’interprétation ont toutes les deux des avantages et des inconvénients. La compilation rend l’exécution du programme beaucoup plus rapide et le code source reste privé. En revanche, il est plus long à développer, et il est largement plus difficile de remarquer et de corriger les erreurs au cours de l’exécution du programme. L’interprétation, au contraire, rend le code public et son exécution plus lente, mais il est plus rapide à développer et il est plus facile de noter de potentielles erreurs.

Le passage du langage de programmation au langage machine, et les principes de compilation et interprétation, en vidéo (n’hésitez pas à activer les sous-titres) !
Langages bas niveau VS langages haut niveau

Certains langages sont compréhensibles plus “facilement” par l’ordinateur que d’autres. C’est la différence entre les langages de bas niveau et les langages de haut niveau. Le niveau de programmation est le niveau qui sépare le langage de programmation et l’ordinateur.

Un langage de programmation de haut niveau est un langage indépendant de la machine : autrement dit, les programmes ne sont liés à aucun ordinateur ni à aucune puce. Les langages de haut niveau sont donc portables. Les langages de haut niveau sont aussi lisibles par les humains et sont faciles à écrire. La recherche et la correction d’erreurs est également plus simple. En revanche, dans la mesure où ils sont très éloignés du langage machine, ils nécessitent des compilateurs et des interpréteurs, ce qui les rend plus gourmands en termes de mémoire. Python, JavaScript et Ruby sont des langages de haut niveau, de même que Java, dans une moindre mesure.

Au contraire, les langages de bas niveau sont plus proches du langage maternel de l’ordinateur, codé en binaire. Ils permettent d’interagir directement avec les composants d’un ordinateur. Un langage bas-niveau est plus lisible pour la machine, et très difficile à lire ou écrire pour les humains. En revanche, ils nécessitent beaucoup moins d’espace mémoire et sont beaucoup plus rapides. Par exemple, le langage ASM est le langage de plus bas niveau, car il permet d’envoyer les langages directement au processeur (central processing unit ou CPU). C, C++ sont aussi considérés comme des langages de bas niveau.

Langages de bas et de haut niveau

Chaque langage de programmation a donc des caractéristiques qui lui sont propres. L’ensemble de ces caractéristiques correspond non seulement à la vision du développeur, mais répond également à des besoins spécifiques au moment où le programme est développé.