# Màquina de codi p

En programació d'ordinadors, una màquina de codi p (màquina de codi portàtil) és una màquina virtual dissenyada per executar codi p (el llenguatge ensamblador o codi màquina d'una hipotètica unitat de processament central (CPU)). Aquest terme s'aplica tant de manera genèrica a totes aquestes màquines (com ara la màquina virtual Java (JVM) i el codi precompilat MATLAB), com a implementacions específiques, la més famosa és la p-Machine del sistema Pascal-P, particularment la UCSD Pascal. implementació, entre els desenvolupadors de la qual, es va interpretar que la p del codi p significava pseudo més sovint que portable, per tant, un pseudocodi significava instruccions per a una pseudo-màquina.
Tot i que el concepte es va implementar per primera vegada cap al 1966, com a codi O per al llenguatge de programació combinat bàsic (BCPL) i codi P per al llenguatge Euler, el terme codi p va aparèixer per primera vegada a principis de la dècada de 1970. Els dos primers compiladors que van generar codi p van ser el compilador Pascal-P el 1973, de Kesav V. Nori, Urs Ammann, Kathleen Jensen, Hans-Heinrich Nägeli i Christian Jacobi, i el compilador Pascal-S el 1975, per Niklaus Wirth.
Els programes que s'han traduït al codi p poden ser interpretats per un programa de programari que emula el comportament de la CPU hipotètica, o bé traduïts al codi màquina de la CPU en què s'ha d'executar el programa i després executar-se. Si hi ha prou interès comercial, es pot construir una implementació de maquinari de l'especificació de la CPU (per exemple, el Pascal MicroEngine o una versió d'un processador Java).
En comparació amb la traducció directa al codi màquina natiu, un enfocament en dues etapes que implica la traducció a codi p i l'execució mitjançant interpretació o compilació just-in-time (JIT) ofereix diversos avantatges:
* És molt més fàcil escriure un petit intèrpret de codi p per a una màquina nova que modificar un compilador per generar codi natiu per a la mateixa màquina.
* Generar codi màquina és una de les parts més complicades d'escriure un compilador. En comparació, generar el codi p és molt més fàcil perquè no s'ha de tenir en compte cap comportament dependent de la màquina a l'hora de generar el codi de bytes. Això fa que sigui útil per posar en funcionament un compilador ràpidament.
* Com que p-code es basa en una màquina virtual ideal, un programa p-code sovint és molt més petit que el mateix programa traduït a codi màquina.
* Quan s'interpreta el codi p, l'intèrpret pot aplicar comprovacions addicionals en temps d'execució que són difícils d'implementar amb el codi natiu.
Un dels desavantatges importants del codi p és la velocitat d'execució, que de vegades es pot solucionar mitjançant la compilació JIT. Sovint, el codi P també és més fàcil de fer enginyeria inversa que el codi natiu.
A la dècada de 1990, la traducció al codi p es va convertir en una estratègia popular per a implementacions de llenguatges com Python, Microsoft P-Code a Visual Basic i Java bytecode a Java.

## Referències

* ↑ Upton, Eben. Learning Computer Architecture with Raspberry Pi (en anglès). John Wiley & Sons, 2016-09-13. ISBN 978-1-119-18393-8.
* ↑ «P-code machine - CodeDocs» (en anglès). https://codedocs.org.+[Consulta: 27 abril 2023].
* ↑ «Chapter 10: The P-code Machine» (en anglès). https://homepages.cwi.nl.+[Consulta: 27 abril 2023].
* ↑ «P-code machine at DuckDuckGo» (en anglès). https://duckduckgo.com.+[Consulta: 27 abril 2023].
* ↑ «The p-code system» (en anglès).