Interprète (informatique) 1208734 31234399 2008-07-02T18:22:20Z KhanBot 386412 robot Modifie: [[el:Διερμηνέας (υπολογιστές)]] {{Voir homonymes|Interprète|Interpréteur}} {{sérieLangagesInfo}} Un '''interprète''' ou '''interpréteur''' {{infra|Terme}} est un outil [[informatique]] ayant pour tâche d'analyser, de traduire et d'exécuter un programme écrit dans un [[langage informatique]]. De tels langages sont dits [[Langage interprété informatique|langages interprétés]]. L'interprète est capable de lire le code source d'un langage sous forme de [[Langage de script|script]], habituellement un [[fichier texte]], et d'en exécuter les [[instruction]]s après une [[analyse syntaxique]] du contenu. Généralement ces langages textuels sont appelés des [[langages de programmation]]. Cette interprétation conduit à une exécution d'action ou à un stockage de contenu ordonné par la syntaxe textuelle. L'interprétation repose sur l'exécution dynamique du programme par un autre programme (l'interprète), plutôt que sur sa conversion en un autre langage (par exemple le langage machine) ; elle évite la séparation du temps de conversion et du temps d'exécution, qui sont simultanés. On différencie un programme dit [[Langage de script|script]], d'un programme dit [[Compilateur|compilé]] : * Un programme script est exécuté a partir du [[Code source|fichier source]] via un interpréteur de script. * Un programme compilé est exécuté a partir d'un bloc en langage machine issu de la traduction du fichier source. Le [[cycle]] d'un interprète est le suivant : * lire et analyser une instruction (ou expression) ; * si l'instruction est syntaxiquement correcte, l'exécuter (ou évaluer l'expression) ; * passer à l'instruction suivante. Ainsi, contrairement au [[compilateur]], l'interprète exécute les instructions du programme (ou en évalue les expressions), au fur et à mesure de leur lecture pour interprétation. Du fait de cette phase sans traduction préalable, l'exécution d'un programme interprété est généralement plus lente que le même programme compilé. La plupart des interprètes n'exécutent plus la chaîne de caractères représentant le programme, mais une forme interne, telle qu'un arbre syntaxique. En pratique, il existe une continuité entre interprètes et compilateurs. Même dans les langages compilés, il subsiste souvent une part interprétée (souvent les formats d'impressions 'FORMAT' de [[Fortran]], 'printf' de [[C (langage)|C]]…, restent interprétés). Réciproquement, la plupart des interprètes utilisent des représentations internes intermédiaires (arbres syntaxiques abstraits, ou même code octet) et des traitements (analyses lexicale et syntaxique) ressemblant à ceux des compilateurs. Enfin, certaines implémentations de certains langages (par exemple SBCL pour Common Lisp) sont interactifs comme un interprète, mais traduisent dès que possible le texte d'un bout de programme en du code machine directement exécutable par le processeur. Le caractère interprétatif ou compilatoire est donc propre à une réalisation d'un langage de programmation, et pas au langage lui-même. L'intérêt des langages interprétés réside principalement dans la facilité de programmation et dans la portabilité. Les langages interprétés facilitent énormément la mise au point des programmes car ils évitent la phase de compilation, souvent longue, et limitent les possibilités de bogues. Il est en général possible d'exécuter des programmes incomplets, ce qui facilite le développement rapide d'applications ou de prototypes d'applications. Ainsi, le langage [[BASIC]] fut le premier langage interprété à permettre au grand public d'accéder à la programmation, tandis que le premier langage de programmation moderne interprété est [[Lisp]]. La portabilité permet d'écrire un programme unique, pouvant être exécuté sur diverses plate-formes sans changements, pourvu qu'il existe un interprète spécifique à chacune des ces plate-formes matérielles. Un certain nombre de langages informatiques sont aujourd'hui mis en œuvre au moyen d'une [[machine virtuelle (informatique)|machine virtuelle]] applicative. Cette technique est à mi-chemin entre les interprètes tels que décrits ici et les [[compilateur]]s. Elle offre la portabilité des interprètes avec une bonne efficacité. Par exemple, des portages de ''Java, Lisp, Scheme, Ocaml, Perl (Parrot), Python, Ruby, Lua, C,'' etc. sont faits via une machine virtuelle. L'''interprétation abstraite'' (inventée par Patrick et Radhia Cousot) est une technique et un modèle d'analyse statique de programmes qui parcourt, un peu à la manière d'un interprète, le programme analysé en y remplaçant les valeurs par des abstractions. Par exemple, les valeurs des variables entières sont abstraites par des intervalles d'entiers, ou des relations algébriques entre variables. == Historique == Avec l'apparition du langage compilé [[Pascal (langage)|Pascal]] et de compilateurs commerciaux rapides comme ''Turbo Pascal'', les langages interprétés connurent à partir du milieu des [[années 1980]] un fort déclin. Trois éléments changèrent la donne dans les [[années 1990]] : *avec la nécessité d'automatiser rapidement certaines tâches complexes, des langages de programmation interprétés (en fait, ''semi''-interprétés) de haut niveau comme, entre autres, [[Tool Command Language|Tcl]], [[Ruby]], [[Perl (langage)|Perl]] ou [[Python (langage)|Python]] se révélèrent rentables ; *la puissance des machines, qui doublait tous les dix-huit mois en moyenne (selon la [[loi de Moore]]), rendait les programmes interprétés des [[années 1990]] d'une rapidité comparable à celle des programmes compilés des [[années 1980]] ; *il est bien plus rapide de faire évoluer un programme interprété. Or la vague Internet demandait une réponse très rapide aux nouveaux besoins du marché. [[amazon.com]] fut, dans sa première version, développé largement en Perl. [[Smalltalk]] permettait un [[prototypage]] très rapide d'applications. == Utilisations des langages interprétés == Les langages interprétés trouvent de très nombreuses utilisations : * dans le domaine éducatif, les langages interprétés permettent de se concentrer sur les [[algorithmes]] et les structures de données, et non sur les particularités de tel ou tel langage. * les calculs scientifiques ''ne demandant pas de calcul intensif'' (itérations sur de très grandes matrices, par exemple) peuvent s'écrire avec profit dans un langage interprété. Ils permettent d'appeler des algorithmes de calcul performants précompilés. Les systèmes de calcul symbolique utilisent aussi cette possibilité ; * les interprètes de [[ligne de commande]] (désignés par le nom [[Shell (informatique)|shell]] dans la terminologie [[Unix]]). Ces interprètes sont capables de comprendre des commandes frappées sur un clavier ou en provenance d'une autre source. Ils disposent d'une syntaxe spécifique à chaque système d'exploitation, et permettent de gérer les ressources matérielles d'une machine (disques, mémoire centrale, entrées/sorties, etc.) ainsi que la communication entre les programmes. [[Rexx]] est le langage de commandes des ordinateurs centralisés d'IBM, tandis que les [[Bourne-Again shell|Bourne shell]], [[csh|C-shell]], [[Korn shell]] sont les shells les plus courants sous [[Unix]] ; quant au [[MS-DOS]], le plus rudimentaire des interprètes de ligne de commande, il est propre aux systèmes d'exploitation de [[Microsoft]]. Des langages de programmation comme Perl ou Rexx sont souvent installés pour disposer d'un environnement plus puissant et plus convivial que les shells d'origine. On conçoit que la compilation traditionnelle présenterait peu d'intérêt pour des commandes : **dont chacune est exécutée en moyenne une fois ; **ou dont la limitation de performance provient de questions d'accès aux fichiers, et non de calcul ; * le langage [[SQL]] (''Standard Query Language'') est un langage interprété standardisé qui permet de mettre à jour ou extraire des informations contenues dans des bases de données ; * les [[Navigateur web|navigateurs web]] reçoivent des instructions symboliques et les exécutent directement. Les navigateurs courants savent tous interpréter du code [[Hypertext Transfer Protocol|HTTP]] (HyperText Transfer Protocol) pour les instructions de transfert d'une machine à l'autre, du code [[Hypertext markup language|HTML]] (HyperText Markup Langage) pour les descriptions des pages web, et du [[Javascript]] pour une programmation plus élaborée, offrant la possibilité de manipuler des variables plus ou moins complexes, des structures de contrôle et de manipuler les différents objets entrants dans la composition d'une [[page web]]. Ces pages peuvent être statiques (elles sont écrites une fois pour toutes) ou générées dynamiquement par le serveur qui produit le code HTML au moment de la requête. Il peut ainsi adapter la page en fonction du contexte d'exécution. Les langages les plus couramment utilisés pour la génération dynamique de [[page web]] sont [[Perl (langage)|Perl]], [[PHP: Hypertext Preprocessor|PHP]] et ASP ; * de nombreux programmes incluent un langage afin d'automatiser certaines actions ou de créer de nouvelles fonctionnalités. Un des langages les plus utilisés pour cela est [[Scheme]], une variante de [[Lisp]]. Le langage de description [[Extensible markup language|XML]] est aussi fortement utilisé pour le formatage des données, que ce soit au niveau de l'[[interface homme-machine]], au niveau du transfert de données ou de leur écriture sous forme de fichiers. Dans ce domaine, on trouve également [[Perl (langage)|Perl]], [[Python (langage)|Python]] ou [[Tool Command Language|Tcl]] ; * le langage [[PostScript]], langage permettant la description de graphiques vectoriels (propriété de la société [[Adobe Systems|Adobe]]), qui est souvent implémenté dans les imprimantes graphiques, les tables traçantes et les [[photocomposeuse]]s ; * il existe des extensions permettant la programmation rapide d'interfaces graphiques à l'aide de langages interprétés. Le plus répandu est [[Tcl/Tk]], mais il existe également Python/Tk, Python/[[wxWidgets]], Perl/[[wxWidgets]] Python/[[Qt]] ou encore [[Gambas (langage)|Gambas]] ; * dans le monde industriel, de plus en plus de machines sont pilotables par un langage interprété : les robots industriels, les machines-outils (APT, langage ISO (ou blocs)), les traceurs de plan, souvent pilotés en [[PostScript]]. == Terme == {{wiktionnaire-2|interprète|interpréteur}} Ce type d'outil est désigné en [[anglais]] par le terme ''« interpreter »''. Souvent, cela est traduit par le [[Calque (linguistique)|calque]] « interpréteur », ce terme étant notamment recommandé par l'[[Office québécois de la langue française|OQLF]]<ref>{{GDT|interpréteur}}</ref>. Cependant, certains{{qui}} le considèrent comme une mauvaise traduction, et on trouve aussi « interprète »<ref>{{Ouvrage|auteurs=C. Livercy (Jean-Pierre Finance, Monique Grandbastien, Pierre Lescanne, Pierre Marchand, Roger Mohr, Alain Quéré, Jean-Luc Rémy)|préface=C. Pair|titre=Théorie des programmes|sous-titre=Schémas, preuves, sémantique|passage=[http://www.ens-lyon.fr/LIP/REWRITING/OLD_PUBLICATIONS_ON_LESCANNE/Livercy/268.tif 256]|leu=Paris|isbn=2-04-010516-6|éditeur=[[Bordas]]|collection=[[Dunod|Dunod informatique]]|année=1978|pages=328}}.</ref>. == Références == <references/> == Voir aussi == * [[Pré-compilateur]] * [[PHP: Hypertext Preprocessor|PHP]], exemple d'interprète. * [[Ocaml]], langage implémenté dans un compilateur natif et dans un interprète. {{Portail|informatique}} [[Catégorie:Programmation informatique]] [[ar:مفسر (برمجة)]] [[bs:Interpreter]] [[cs:Interpret (software)]] [[da:Fortolker]] [[de:Interpreter]] [[el:Διερμηνέας (υπολογιστές)]] [[en:Interpreter (computing)]] [[es:Intérprete (informática)]] [[et:Interpretaator]] [[fi:Ohjelmointikielen tulkki]] [[he:מפרש (תוכנה)]] [[hr:Interpreter]] [[hu:Értelmező]] [[is:Túlkur (tölvunarfræði)]] [[it:Interprete (informatica)]] [[ja:インタプリタ]] [[ko:인터프리터]] [[lt:Interpretatorius]] [[nl:Interpreter]] [[pl:Interpreter]] [[pt:Interpretador]] [[ro:Interpretor]] [[ru:Интерпретатор]] [[simple:Interpreter (computing)]] [[sk:Interpreter (programovanie)]] [[sr:Интерпретатор]] [[sv:Interpretator]] [[th:โปรแกรมแปลคำสั่ง]] [[tr:Yorumlayıcı]] [[uk:Інтерпретатор]] [[vi:Trình thông dịch]] [[zh:直譯器]]