Question:
faites le parallele entre le langage compile et le langage interpretee?
theo
2006-11-16 14:34:39 UTC
faites le parallele entre le langage compile et le langage interpretee?
Six réponses:
Shogun
2006-11-16 15:34:31 UTC
je vais essayer te faire le parallele entre le langage informatique et une langue, un texte et un programme...



imagine un article en espagnol et tu captes rien dans cette langue :

tu es seul avec un dico.

1)tu prends donc ton dico a chaque mot pour interpreter le sens de chaque mot, du coup tu avances pas tres vite mais tu y arrives...

==> Ca c'est l'interpreté....

mais si du jour au lendemain on change de texte, tu t'en fous, ton dico marche toujours... Donc tu es lent mais adaptable



2)tu reperes tous les mots inconnus, tu les recherches tous et tu ecris tout apres tu lit le texte avec juste ta fiche de grammaire/vocabulaire.

==> Ca c'est le compilé, t'as plus besoin de ressortir le gros dico. Donc c'est plus rapide par contre si on te change un mot, une tournure ca marche plus, faut recompiler( relire le texte pour mettre a jour la fiche vocabulaire)

Donc tu es rapide (une fois preparé) mais pas tres souple si on te change ton texte (programme)...
Hum...
2006-11-17 00:20:01 UTC
Attention, pour analyser le problème de façon objective, il faut distinguer les langages "compilés", "interprétés" et les mixtes, souvent assimilés à tort aux langages interprétés.



C'est un sujet très vaste, je vais essayer de limiter mon analyes le + possible, mais...



La compilation est le fait de traduire un code écrit ou généré dans un langage en un code "fonctionellement" équivalant dans un autre langage, souvent de plus bas niveau.

En particulier, on appèle très souvent "langage compilé" un langage dont le code source (lisible parl'humain) en code machine (binaire et directement exécutable). Le code distribué, vendu (etc...) est déja pret à être exécuté. C'est par exemple le cas des langages C, C++, fortran,...

L'avantage est une haute performance du code (le code peut être envoyé de ma mémoire au processeur généralement sans conversion logicielle). par exemple, les codes destinés à des logiciels à haut besoins de performance (systèmes d'exploitation, bases de donnée à haut rendement comme Oracle, SQL Server, DB2 et tant d'autres, il y a encore peu de temps les jeux vidéo...) sont généralement écrits (directement ou non) en C ou C++).

C'est historiquement le premier mode de programmaation de "haut" niveau.



L'interprétation consiste à "compiler" les instructions au momment de l'exécution (c'est le cas de lisp, scheme, prolog,... ainsi que les shells unix/dos et autres).

l'inconvénient est biensur le coût de la compilation au dernier momment.

De plus, les versions finales des codes compilés le sont avec des options qui augmente le niveau d'optimisation du code au prix d'un temps de compilation significativement plus long (en compilant à l'exécution, ce temps devient très pénalisant, faisant perdre l'intérêt de l'optimisation).

Ajoutons que pour optimiser le code généré, les compilateurs utilisent des systèmes de factorisations et réorganisations d'instructions. Plus on interprête "ligne à ligne" plus ce concept devient inapplicable.

Enfin, des enjeux industriels et commerciaux sont quasi-incompatibles avec le code inteprété: la protection de propriété intéllectuelle (est algos en particulier) est biensur une notion des plus abstraite : le code est lisible! et en plus, comme il est lisible il est facile à modifier induement (crackage des protections logicielles...)

Maintenant : les aventages :

* indispensable aux interpréteurs de commandes comme les shells (et aux macros office & co, à mediter!).

* Permet la génération dynamique du code et l'autogénération, très voir extrèmement hardus avec les langages compilés.

* L'interpréteur, de plus haut niveau que le code, peut gérér des tâches comme l'allocatio, la désallocation, la refflexion...



Passons enfin aux langages "à la mode", les langages de dernière génération, Je parle biensur de Jave et des langages .NET:

L'idée de Sun dans les années 90 (sortie du JKD1.0 en 1995) puis de Microsoft (sortie du framework 1.0 en 2002) est, à mon sens, des plus intéressante :

* la compilation du code vers un langage binaire (langage machine ou assimilé) est indispensable à des performances acceptables

* le ratio complexité des programmes/moyens consentis pour les développer va toujours croissant. => besoin de simplifiet le code, en se débarassant notament de la gestion memoire

* sur les programmes complexes, la gestion mémoire nécessite de Très gros efforts, la moindre désallocation oubliée pouvant mettre le système en péril. => sécurité d'une récupération mémoire par garbage collector

* avec les langages compilés, on optimise a fond pour 1 ou quelques plateformes cibles et on assure ma compatibilité du code avec des temps de réponses supposs acceptables pour les autres => besoin de terminer les DERINERES phases de la compillation par les machines cibles, "les seules à savoir quels optimisations leurs sont les plus adaptées "

* les machines cibles, de plus en plus performantes, peuvent encaisser le coût CPU d'une compilation "just in time", si celle ci est linéaire (le bytecode java et le M.S.I.L. .NET sont des langages équivalents à du code assemblé (1 instruction = 4 octets), la transformation se fait 4 octets par 4 octets, c'est une bijection, très rapide et beneficiant des optimisations de la compilation .java -> .class et .vb, .css... -> formats de code managé).

IL EST FONDAMENTAL DE DIFFERENTIER CETTE INTERPRETATION TRES EFFICACE DE CELLE DES LANGAGES INTERPRETES CLASSIQUES

* Les propriétés d'un niveau supérieur au code (récupération d'exceptions plus sécurisées, refflexion...) permettent de développer + simplement et parfois + efficacement qu'en code compilé classique.

*Il y a encore de nombreuxarguments mais mon texte s'allonge dja pas mal

LES PBs :

*demande + de mémoire : la machine virtuelle consomme,

*les codes compilés simples ou développés à très fort coût surclassent leurs perfs



Je pense que les langages mixtes sont les + adaptés à la plus part des secteurs sauf par les rares domaines "chasse gardée les langages interprétés (shells & co)" et pour faire du code TRES optimisé, compilé spécialement pour une machine cible ou pour les besoins de perfs à fort bugdets



Notes : le marché du jeux vidéo passe du C++ (compilé) au (MC++ .NET ou C#).



Mais en quoi sont faites les machines virtuelles java et .NET? en C et C++ :-))
axel584
2006-11-16 23:03:44 UTC
les langages interprétés sont executés directement sans phase intermédiaire. Ce qui permet d'avoir quelque chose de lisible et portable d'une machine à l'autre (des langages comme le python ou le perl peuvent être executé sur une machine windows ou une machine mac)



En revanche, des langages compilés seront transformé dans un langage machine executable uniquement sur l'architecture de la machine ( soit mac, soit windows, mais pas les deux)



Et enfin, tu as des langages comme le java qui sont compilé en "pseudo-code"... le pseudo code est aussi portable qu'un langage interprété, il ne dépend plus de l'architecture de la machine, mais il n'est pas "lisible" par le programmeur.



Lors de la phase de compilation, le compilateur vérifie la syntaxe du programme (si le développeur n'a pas fait de faute d'orthographe), comme cette phase est déjà faite, les programmes compilés sont généralement plus rapide que les langages interprétés.
embrun003
2006-11-16 22:45:13 UTC
Le langage compilé est la traduction totale d'un programme en langage binaire (langage machine) pour générer un nouveau fichier indépendant appelé "exécutable", alors que le langage interprété fait appel à un intermédiaire, l'interprèteur, pour traduire l'exécution petit à petit des fonctions (putain ! c'est loin les cours de fac !.... )...Bon, en même temps, si ce n'est pas tout à fait vrai, pardon mais faut dire que je suis maintenant plutôt éloigné de la technique.
Alain Vitté
2006-11-16 22:39:19 UTC
interprété : traduction en temps réel ; ex : réunions de l'onu ...

compilé : traduction complète préalable ; ex : un bouquin ...
Pierre
2006-11-16 22:38:45 UTC
Compile = executer directement en language machine

Interpreté = Transcrit en language machine au cours de l'execution


Ce contenu a été initialement publié sur Y! Answers, un site Web de questions-réponses qui a fermé ses portes en 2021.
Loading...