Home
Se connecter | S'inscrire
index !
Forum Science de l'informatique

Compilateur et Interpréteur

Mashiro

Membr/e

modérateur
Posté le : 12 janvier 2016, 13:24.
Bonjour à tous ! Je vous propose un petit post dédié à nos amis les Compilateurs ainsi qu'à leur cousin les Interpréteur.
Que serait nos codes sources sans ces programmes que nous galérons tant à installer ?
(Du moins sa à été le cas pour moi =w=') Je vais donc essayer de donner un peu de mon âme à l'écriture de ce sujet et n'hésité pas à commenter et déballer tout ce que vous savez sur le sujet ! <3

Nos ordinateurs sont des machines bizarre, c'est le moins que l'on puisse dire. On ne peut s'adresser à eux qu'en leurs envoyant des 0 et des 1. Ainsi, si je traduis « Fais le calcul 3 + 5 » en langage informatique, ça pourrait donner quelque chose comme (j'invente, je ne connais quand même pas la traduction informatique par cœur) :
0010110110010011010011110
Ce que vous voyez là, c'est le langage informatique de votre ordinateur, appelé langage binaire   (retenez bien ce mot !). Votre ordinateur ne connaît que ce langage-là et, comme vous pouvez le constater, c'est absolument incompréhensible. Donc voilà notre premier vrai problème :
Comment parler à l'ordinateur plus simplement qu'en binaire avec des 0 et des 1 ?

Nos ordinateur ne parle pas l'anglais et encore moins le français. Pourtant, il est inconcevable d'écrire un programme en langage binaire. Même les informaticiens les plus fous ne le font plus, c'est vous dire ! (Bon ok à part peut-être quelque cas...#Interstellar) Eh bien l'idée que les informaticiens ont eue, c'est d'inventer de nouveaux langages qui seraient ensuite traduits en binaire pour l'ordinateur. Le plus dur à faire, c'est de réaliser le programme qui fait la « traduction ». Heureusement, ce programme a déjà été écrit par des informaticiens et nous n'avons plus besoin de les faire (ouf !). On va au contraire s'en servir pour écrire des phrases comme : « Fais le calcul 3 + 5 » qui seront traduites par le programme de « traduction » en quelque chose comme : « 0010110110010011010011110 ». Le schéma suivante résume ce que je viens de vous expliquer.
schema
La première case est « Votre programme est écrit dans un langage simplifié ». Ce fameux « langage simplifié » est appelé en fait langage de haut niveau. Il existe plusieurs niveaux de langages. Plus un langage est haut niveau, plus il est proche de votre vraie langue (comme le français). Un langage de haut niveau est donc facile à utiliser, mais se n'est pas le sujet de ce post donc nous ne nous y attarderons pas. Venons-en au « programme de traduction » qui traduit notre langage de haut niveau (comme le C) en binaire. Ce programme a un nom : on l'appelle le compilateur. La traduction, elle, s'appelle  la compilation. Très important : il existe un compilateur différent pour chaque langage de haut niveau. C'est d'ailleurs tout à fait logique : les langages étant différents, on ne traduit pas le C de la même manière qu'on traduit le Delphi.

Enfin, le programme binaire créé par le compilateur est appelé l'exécutable. C'est d'ailleurs pour cette raison que les programmes (tout du moins sous Windows) ont l'extension « .exe » comme EXEcutable. Reprenons notre schéma précédent, et utilisons cette fois des vrais mots tordus d'informaticien  schema L'interpréteur c'est un peu la même chose, à la différence qu'au lieu de traduire le code source dans un langage binaire et créé un EXEcutable, il va traduire les codes sources instruction par instruction et soumettre chaque instruction traduite directement au processeur pour exécution :
schema

Mais pourquoi existe-t'il deux type de traducteur ? Un seul suffirait largement non ?

Hé bien la vérité est un peu plus compliqué : en effet chaque « traducteur » à ses avantages et ses inconvénients de plus, comme je l'ai mentionné plus haut « il existe un compilateur différent pour chaque langage » et il en va de même pour les interpréteur, du moins il existe des langage interprété et de langage compilé.

Interpréteur V.s. Compilateur

Un langage interprété est adapté pour le développement rapide et le prototypage :
  • Cycle de test plus court qu'avec les langages compilés.
  • Souvent possible de modifier/rectifier le programme en cours d'exécution (test).
  • Langages offrant une plus grande liberté d'écriture.

Un langage compilé est préférable pour la réalisation d'applications efficaces et/ou de grande envergure :
  • Programme plus efficace : le compilateur peut effectuer des optimisations plus facilement que l'interpréteur (puisqu'il possède une visibilité globale sur le programme)
  • Traduction une unique fois.
  • Meilleure détection des erreurs : structuration plus rigoureuse et typage.
  • Protection de la propriété intellectuelle : la compilation permet de diffuser les programmes sous forme binaire sans en imposer sa diffusion sous forme lisible


Dans ces langages il y en a certain qui ne sont que compilé et jamais interprété (C, C++, Pascal, ADA) ; d'autre ne sont qu'interprété (Prolog). Bien sur, comme partout il existe des exceptions : Certains langages (LISP par exemple) peuvent être indifféremment interprété ou compilé ; ou bien encore certains sont semi-compilés (par exemple Java, V-Pascal) : je passerai les détails complexe mais l'idée est de rendre le programme indépendant de la plateforme.
Encycliopedia

Membr/e

876 messages
Posté le : 12 janvier 2016, 19:22.
Bonne initiative, un sujet clair et concis pouvant être compris par un grand nombr/e.
Je me propose de compléter un peu ta partie « Interpréteur V.s. Compilateur » avec quelque informations supplémentaire :
langage compilélangage interprété
Une étape de compilation est nécessaire entre l’écriture du code et son exécution, pour traduire les instructions en code machine compréhensibles par le processeur. Le code source venant d’être écrit peut être directement testé. Il suffit de lancer l’exécution en donnant le nouveau fichier à l’interpréteur.
Le résultat de la compilation est un fichier exécutable autonome. On peut le transporter directement sur une machine du même type. Le programme exécutable n’est généralement pas portable sur une autre machine. Le fichier est généralement volumineux : des centaines de kilo-octets. L’exécutable n’est pas portable sur un autre système d’exploitation, mais le source peut être recompilé ailleurs. Pour que le code source puisse être réutilisé, l’interpréteur doit être présent. Le programme sera disponible sur une autre machine si l’interpréteur y est présent. Le fichier à transporter est un code source de type texte de quelques kilo-octets. Par contre la mémoire nécessaire à l’exécution est plus importante que celle d’un fichier compilé, car l’interpréteur doit être présent.
L’exécutable est directement compréhensible par le processeur.
L’exécution est donc très rapide.
L’interpréteur doit analyser ligne par ligne chaque instruction et les traduire pour que le programme soit exécuter. Le programme est donc plus lent.
L’exécutable est incompréhensible pour l’être humain.
Par contre le fichier source doit l’être pour toutes modifications
L’exécutable  est naturellement lisible et peut être modifié par tout utilisateur, avec de la documentation et des commentaires, d’où l’esprit des logiciels libres

Je poste un lien vers l'histoire des langages que j'ai développé si ça t'interesse.