Article de reference

Machine à code P

En programmation informatique , une machine à code P ( machine à code portable ) est une machine virtuelle conçue pour exécuter du code P, le langage assembleur ou code machine ...

programmation informatique , une machine à code P ( machine à code portable ) est une machine virtuelle conçue pour exécuter du code P, le langage assembleur ou code machine d'un processeur (CPU) hypothétique. Le terme « machine à code P » s'applique de manière générique à toutes ces machines (comme la machine virtuelle Java (JVM) et le code précompilé de MATLAB ), ainsi qu'aux implémentations spécifiques utilisant ces machines. L'une des applications les plus notables des machines à code P est la machine P du système Pascal-P . Les développeurs de l' implémentation Pascal de l'UCSD au sein de ce système ont interprété le « P » de « code P » comme signifiant plus souvent « pseudo » que « portable » ; ils ont adopté une appellation spécifique pour le pseudo-code, désignant les instructions d'une pseudo-machine.

Bien que le concept ait été implémenté pour la première fois vers 1966 sous forme de code O pour le langage de programmation combiné de base ( BCPL ) et de code P pour le langage Euler , le terme code P est apparu pour la première fois au début des années 1970. Deux des premiers compilateurs générant du code P étaient le compilateur Pascal-P en 1973, par Kesav V. Nori, Urs Ammann, Kathleen Jensen, Hans-Heinrich Nägeli et Christian Jacobi, et le compilateur Pascal-S en 1975, par Niklaus Wirth .

Les programmes traduits en code P peuvent être interprétés par un logiciel émulant le comportement du processeur hypothétique, ou traduits en code machine du processeur sur lequel ils doivent s'exécuter, puis exécutés. Si l'intérêt commercial est suffisant, une implémentation matérielle de la spécification du processeur peut être développée (par exemple, le Pascal MicroEngine ou une version d'un processeur Java ).

de compilateur typique vise à traduire un code de programme en code machine , l'idée d'une machine à code P suit une approche en deux étapes impliquant la traduction en code P et l'exécution par interprétation ou compilation juste-à-temps (JIT) via la machine à code P.

Cette séparation permet de dissocier le développement d'un interpréteur de code P du compilateur de code machine sous-jacent, qui doit prendre en compte le comportement dépendant de la machine lors de la génération de son bytecode . Ainsi, un interpréteur de code P peut être implémenté plus rapidement, et la capacité d'interpréter le code à l'exécution permet des vérifications supplémentaires qui ne seraient pas possibles avec du code natif. De plus, comme le code P repose sur une machine virtuelle idéale, un programme en code P est souvent plus court que le même programme traduit en code machine. En revanche, l'interprétation en deux étapes d'un programme en code P entraîne une vitesse d'exécution plus lente, bien que ce problème puisse parfois être résolu par la compilation à la volée (JIT) , et sa structure plus simple est plus facile à rétro-ingénierer que celle du code natif.

Implémentations du code P

Au début des années 1980, au moins deux systèmes d'exploitation ont atteint l'indépendance vis-à-vis des machines grâce à une utilisation intensive du code P. Le Business Operating System (BOS) était un système d'exploitation multiplateforme conçu pour exécuter exclusivement des programmes en code P. Le système UCSD p , développé à l'Université de Californie à San Diego, était un système d'exploitation auto-compilant et auto-hébergé, basé sur du code P optimisé pour la génération par le langage Pascal .

Dans les années 1990, la traduction en p-code est devenue une stratégie populaire pour les implémentations de langages tels que Python , Microsoft P-Code dans Visual Basic et le bytecode Java dans Java .

Le langage Go utilise un assembleur générique et portable comme forme de p-code, implémenté par Ken Thompson dans le prolongement des travaux menés sur Plan 9 par Bell Labs . Contrairement au bytecode du Common Language Runtime (CLR) ou à celui de la JVM, il n'existe pas de spécification stable et les outils de compilation Go ne génèrent pas de format de bytecode utilisable ultérieurement. L'assembleur Go utilise ce langage assembleur générique comme représentation intermédiaire et les exécutables Go sont des binaires liés statiquement et spécifiques à la machine .

Machine P de l'UCSD

Architecture

Comme de nombreuses autres machines utilisant le langage P, la machine P de l'UCSD est une machine à pile . Cela signifie que la plupart des instructions lisent leurs opérandes dans la pile et y placent à nouveau les résultats. Ainsi, l' addinstruction remplace les deux éléments situés au sommet de la pile par leur somme. Quelques instructions prennent un argument immédiat. À l'instar du Pascal, le langage P est fortement typé et prend en charge nativement les types de données booléen (b), caractère (c), entier (i), réel (r), ensemble (s) et pointeur (a) .

Quelques instructions simples :

Insn. Pile Description de la pile avant après adi i1 i2 i1+i2 additionne deux entiers adr r1 r2 r1+r2 additionne deux réels l'appartenance de i1 à l'ensemble s1 b1 ; b1 indique si i1 est membre de s1 ldi i1 i1 i1 charger constante entière déplacer a1 a2 a2 non b1 b1 -b1 Négation booléenne

Environnement

À l'instar d'un processeur cible réel, le système P ne possède qu'une seule pile partagée par les cadres de pile des procédures (fournissant l'adresse de retour , etc.) et les arguments des instructions locales. Trois des registres de la machine pointent vers cette pile (qui croît vers le haut).

  • SP pointe vers le sommet de la pile (le pointeur de pile ).
  • MP marque le début du cadre de pile actif (le pointeur de marque ).
  • EP pointe vers l'emplacement de pile le plus élevé utilisé dans la procédure actuelle (le tas qui s'étend vers la pile. Le registre NP (le Niklaus Wirth a décrit une machine à code p simple dans son ouvrage de 1976, *Algorithms + Data Structures = Programs* . Cette machine comportait trois registres : un compteur de programme p , un registre de base b et un registre de sommet de pile t . Elle comportait huit instructions.

    1. lit 0, a: constante de charge a
    2. opr 0, a: exécuter l'opération a (13 opérations : RETOUR, 5 fonctions mathématiques et 7 fonctions de comparaison)le PL/0 de Wirth , un sous-ensemble de compilateur Pascal utilisé pour enseigner le développement de compilateurs. langages intermédiaires de Microsoft . Ces langages offraient un format binaire alternatif au code machine. Microsoft a parfois indiqué que « P-code » était l’abréviation de « packed code » ou de « pseudo-code » .

      Une variante du code P de Microsoft, très différente de celle utilisée par le compilateur C, était largement employée avec Visual Basic , dont l'environnement d'exécution incluait une machine virtuelle ou permettait une compilation directe en code natif. À l'instar des autres implémentations de code P, le code P de Microsoft offrait un exécutable plus compact , au prix d'une exécution plus lente.

Autres implémentations

Plus d articles de Worldlex Wiki

Revenez a l index pour explorer davantage de pages sur l histoire, la science, la culture, la geographie et la societe en francais.

Explorer l index