Introduction à la compilation avec LLVM

a marqué ce sujet comme résolu.

Dans le premier chapitre :

Une grande famille de langages est celle des langages interprétés, comme Python, Ruby et Perl. Ces langages reposent sur un interprète, qui exécute le programme source instruction par instruction.

Les 3 langages choisis en exemple sont mal choisis.

  • Python compile les programmes en bytecode avant de les interpréter (le bytecode est d'ailleurs accessible au runtime en allant chercher l'attribut func.__code__.co_code de n'importe quelle fonction en pur python, et il est désassemblable au moyen du module standard dis). Il y a même un pinhole optimiser dans l'interpréteur standard, et certaines distributions (comme Pypy) poussent le vice avec un compilateur JIT ;
  • Perl 6 repose sur un principe équivalent, et va encore plus loin que Python en proposant un code à trois adresses ouvert pour sa VM, permettant ainsi aux utilisateurs de tirer parti de son moteur d'exécution avec d'autres langages de script dont il suffit d'écrire le frontend ;
  • Je suis quasiment certain que c'est pareil pour Ruby.
+0 -0

La fin de la phrase fait toute la différence : « sans réaliser de transformation en langage machine ». La différence entre le JIT et l'interprétation est justement la présence d'un moteur d'exécution dans l'environnement de compilation/exécution pour un interprète, ce qui est différent d'une « lecture directe » par le processeur dans le cas d'un compilateur JIT.

Mais d'après ce que tu dis, c'est effectivement des processus hybrides, et non une interprétation pure. Je vais chercher des exemples plus exacts.

+0 -0

Ça dépend de ce que tu définis comme un langage machine en fait.

Qu'est-ce qu'un bytecode si ce n'est un langage machine pour une machine virtuelle ? Le fait que la machine soit logicielle a-t-il une quelconque importance du point de vue de la compilation ?

De mon point de vue, non, parce que la compilation fait intervenir exactement les mêmes grandes étapes.

+0 -0

Mes définitions de termes techniques sont tirées du Dragon Book, où langage machine désigne uniquement les langages à destination d'un processeur physique.

Effectivement, la distinction compilation/interprétation est très légère, et aujourd'hui l'interprétation pure est rare.

La partie en question a de toute façon besoin d'un lifting.

+0 -0

Bonjour les agrumes !

La bêta a été mise à jour et décante sa pulpe à l'adresse suivante :

  • Spécification des aspects non traités dans l'introduction ;
  • Reprise du passage de l'introduction sur l'interprétation ;
  • Réorganisation du chapitre sur l'analyse syntaxique. Les informations essentielles à la compréhension du programme associé ont été mises en valeur (syntaxe des opérateurs) et les informations « en plus » ont été déplacées dans la partie suivante, qui n'est pas encore rédigée.

Merci d'avance pour vos commentaires.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte