SKZ
16 avril 2005 à 19:06
Mais en informatique les réponses entrainent souvent de nouvelles questions, j'espère que cela s'arrêtera un jour sinon je suis parti au moins jusqu'après la retraite pour tenter de répondre à toutes !
Y'a des chances, pourtant... Mais t'inquiète, dans l'intervale tu apprendra de plus en plus de chose, donc tu SAURA FAIRE de plus en plus de choses. Mais c'est un apprentissage laborieux.
Faut dire que ta conclusion m'a perturbé, car j'aurais dit le contraire peut-être mon coté littéraire...mais bon je te fais confiance sans problème.
TRADUCTION / EXECUTION ?
Je t'avoue que dans l'interprétation peut aussi inclure une phase de traduction. Mais elle se fait au niveau élémentaire des instructions.
Si on regarde au niveau global, celui du programme, et qu'on se pose la question : dans quel but principal je passe tel programme dans un programme nommé "interpréteur" ou "compilateur", on tombe sur cette conclusion.
Càd : j'ai une entrée (un programme en "code source"). Si je le passe dans un compilateur, le résultat produit est un nouveau fichier, un programme traduit.
Si je le passe dans un interpréteur, le résultat est l'éxécution du programme. On peux toujours voir un interpréteur comme un processeur, qu'il soit matériel ou logiciel, et même s'il effectue une étape de traduction, lui aussi. Il ne met pas (en théorie) à disposition de l'utilisateur une traduction du language source.
Donc je résume, le compilateur comme l'interpréteur passe par l'os qui redirige le programme tout neuf et traduit en binaire vers le processeur qui peut alors l'exécuter.
A peu de chose près : une précision tout de même.
Le fait que le code binaire "passe par l'os" signifie qu'il fait appel à lui, ce qui n'est pas systématique. Par exemple pour faire un calcul il exploite directement et uniquement le microprocesseur. Mais pour accèder au matériel, réserver de la mémoire, etc... il délègue au système d'exploitation.
Deux avantage : on peux bétonner la sécurité, et les programmes créé ne sont pas obligés de connaitre le matériel sur lequel il tourne, puisque l'OS fait l'interface...
Le compilateur "passe par l'OS" si on veux pour faire son travail, mais celà n'a rien à voir avec les actions effectuées par le programme compilé.
Le compilateur transforme des instructions du progtamme compilé en appel aux fonction de l'OS. Le programme compilé, de façon autonome, lors de son éxécution, fera appel, tout seul comme un grand, aux fonctions de l'OS.
Dans le cas d'un interpréteur, il lit l'instruction suivante du programme interprété, et si besoin est, l'interpréteur fait appel à une fonction de l'OS.
NB : l'os n'est pas un "passage obligé". C'est plutôt un endrois où on "va faire des détours", aux moments où c'est necessaire.
Lors de l'utilisation du programme sur une autre machine le programme compilé passe par l'os qui le dirige vers le processeur qui l'exécute.
Cf au dessus : on dira plutôt "Lors de l'utilisation du programme sur une autre machine, le processeur exécute le programme compilé qui passe par l'os [pour effectuer certaines tâches spécifiques]"
Pour le programme interprété, c'est le même parcours à la différence près qu'un interpréteur est placé entre le programme et l'os ( ou entre l'os et le processeur ??).
Entre le programme et l'os.
Un programme interprété peut -être compilé ! C'est donc un abus de langage de dire qu'il ya des" langages interprétés" ou alors c'est que les langages compilés eux ne peuvent pas être interprétés !!??
Oui c'est un abus de language. Sauf qu'il y a souvent une "majorité" qui l'emporte, j'ai jamais entendu parler qui faisait du C interprété en pratique. Ca reste possible, mais c'est stupide.
C'est plutôt l'inverse : certain language interprété ne peuvent pas être compilé, l'inverse est faux.
Et il s'agit d'une minorité : ceux qui dispose de l'instruction "éxécute".
Cette instruction spéciale demande à l'interpréteur d'éxécuter une nouvelle ligne de code, qui à très bien pu être construite en fonction des évènements qui se sont produits durant l'éxécution.
Avec un interpréteur, celà ne pose aucun soucis. Avec un programme compilé, c'est beaucoup plus difficile à mettre en oeuvre, et celà demande d'embarquer soit un compilateur, soit un interpréteur. Bref, on perd un des avantages principaux.
Mais bon, c'est l'éxception tordue.
Enfin deux questions pour finir
La première concerne la portabilité des langages, celle-ci dépend-elle des os ou des processeurs ou bien encore des deux si l'on estime qu'un système d'exploitation est lié à un processeur ?
Mal dit : en règle générale, un language est toujours portable. C'est une question qui se pose individuellement pour chaque programme.
Ceci dis, certain language sont conçu pour faire en sorte que les programme écrit dans se language soit intrisèquement portable : le principe est celui de l'abstraction.
L'idée est de camoufler au maximum les spécificités du "système cible" (celui sur lequel s'éxécute le programme derrière une "interface de programmation". Si cette interface est disponible à l'indentique sur tous les systèmes possible, les programmes écrit dans ce language serait universellement portable.
Cette interface est constituée par une bibliothèque standard, dans le cas des languages compilés, qui transforme les intructions du language en appel a l'os (le rôle du compilo est de transformer les instructions, soit en intstruction destinés au microprocesseur, soit en appel aux routine, fonctions, sous-programmes (3 synonymes) de la bibliothèque standard) ;
dans le cas des languages interprétés, l'interface de programmation est l'ensemble des intruction, mots-clef, etc... que l'interpréteur est capable de comprende.
Du point de vue du programmeur, la différence est très très mince.
Malheureusement, certaine boîte, microsoft en tête incluent des spécificités dans les languages, bibliothèques, etc... qu'ils développent, de telle manière qu'il soit impossible ou presque de se passer du combiné Windows / ses bibliothèques / ses languages. (Sachant que la dépendance par des languages et va vers windows, bref...)
Certaines interfaces de prog, comme POSIX en C/C++ permettent de créer des programmes portables indépendamment du système d'exploitation.
Inversement, toujours en C/C++, les Microsoft Fondation Classes (MFC) ne permettent de créer QUE des application Windows (à une époque, il existait un port des MFC pour Mac, puisque Office pour Mac était dispo. Maintenant je ne sais pas : 1) si M$ l'a rendu public 2) si ça marche toujours).
Ce n'est pas tout à fait un problème d'OS (en général il propose toujours plus ou moins des fonctionnalités équivalentes).
Par contre ça peux devenir un problème de matériel.
Tu évoquais les µ-processeurs (µP, ça va + vite). Tant que tu n'inclus pas de module en ASM, il n'y a pas de soucis, un compilateur est justement là pour faire la traduction vers le µP cible.
C'est plus un problème de périférique. Pas question de lancer une appli graphique sur une carte mère dépouillé de toute carte graphique, qui dispose uniquement du mode texte !!!
De la même manière, en poussant le vice, un language ou une bibliothèque (une bibli' est un ensemble de fonctions (telles que celle qui permettent d'afficher une ligne à l'écran, de calculer un cosinus ou une racine carrée, de lire ou écrire un fichier sur le disque dur, etc...) qui forme une extention à l'interface de programmation, par abus, au "language") ;
une biblio' ou un language spécifiquement créé pour les téléphones portables ou les peacemakers ne permettra pas d'écrire des programmes ayant un sens sur une station de travail...
la deuxième concerne ces fameuses dll, je me suis toujours demandé ce qu'elles pouvaient contenir comme informations communes à plusieurs programmescar j'ai du mal à saisir encore les similitudes que peuvent contenir des programmes différents ??
Elle contiennent déjà, ce dont j'ai parlé au dessus : les fonctions de la bibliothèque standard, des fonctions type "drivers", qui permettent de convertir une commande (instruction) standard en manipulation d'un composant électronique, afin de s'abstraire (ignorer) des spécificités du matériel, etc...
En général, ce ne sont pas des "informations" au sens de "données", ou "document", mais des procédures, des routines, des sous-programmes. Exemple : la méthode permettant de décoder le MP3 est identique quelque soit le traitement effectué ensuite sur le son décompréssé. Il est donc tout à fait cohérent de créer un bibli' partagée, dite aussi dynamique (Dynamic Linking Librarie), qui se charge exclusivement de décompresser les MP3 et qui peux être partagée par différents programme.
Mais en informatique les réponses entrainent souvent de nouvelles questions, j'espère que cela s'arrêtera un jour sinon je suis parti au moins jusqu'après la retraite pour tenter de répondre à toutes !
Faut dire que ta conclusion m'a perturbé, car j'aurais dit le contraire peut-être mon coté littéraire...mais bon je te fais confiance sans problème.
Donc je résume, le compilateur comme l'interpréteur passe par l'os qui redirige le programme tout neuf et traduit en binaire vers le processeur qui peut alors l'exécuter. Cela lors de la création d'un programme.
Lors de l'utilisation du programme sur une autre machine le programme compilé passe par l'os qui le dirige vers le processeur qui l'exécute.
Pour le programme interprété, c'est le même parcours à la différence près qu'un interpréteur est placé entre le programme et l'os ( ou entre l'os et le processeur ??).
Un programme interprété peut -être compilé ! C'est donc un abus de langage de dire qu'il ya des" langages interprétés" ou alors c'est que les langages compilés eux ne peuvent pas être interprétés !!??
Enfin deux questions pour finir
La première concerne la portabilité des langages, celle-ci dépend-elle des os ou des processeurs ou bien encore des deux si l'on estime qu'un système d'exploitation est lié à un processeur ?
la deuxième concerne ces fameuses dll, je me suis toujours demandé ce qu'elles pouvaient contenir comme informations communes à plusieurs programmescar j'ai du mal à saisir encore les similitudes que peuvent contenir des programmes différents ??
ouf fatigué je suis moi ...