# UCSD Pascal

El UCSD Pascal fue un sistema de lenguaje de programación Pascal que corría en el UCSD p-System, un sistema operativo portable, altamente independiente de la máquina. El Instituto para los Sistemas de Información de la Universidad de California en San Diego lo desarrolló en 1978 para proveer a los estudiantes de un sistema operativo común que pudiera correr, tanto en cualquiera de los microcomputadores disponibles, como en los minicomputadores DEC PDP-11 del campus. El UCSD p-System (Versión IV, suministrado por SofTech) era uno de los tres sistemas operativos que IBM ofrecía para su IBM PC original (junto con el PC-DOS y el CP/M-86); pero el p-System nunca se vendió muy bien para el IBM PC, principalmente debido a una carencia de aplicaciones y porque era más costoso que las otras opciones. Antes de eso, IBM usó el UCSD p-System como el sistema operativo para su Displaywriter, una máquina dedicada de procesamiento de textos basada en un microcomputador (no confundirlo con el software de procesamiento de textos DisplayWrite de IBM).
Notables extensiones al Pascal estándar incluyen Units compilables y el tipo String. Ambas extensiones influenciaron el diseño del lenguaje Ada. Algunas funciones intrínsecas fueron proporcionadas para acelerar el procesamiento de strings (ej. exploración en un arreglo para un patrón de búsqueda particular); otras extensiones del lenguaje fueron proporcionadas para permitir que el UCSD p-System fuera autocompilable (self-compiling) y auto-sostenido (self-hosted).
El UCSD Pascal fue basado en una arquitectura de máquina de p-code (p-code machine). Su contribución a estas tempranas máquinas virtuales fue extender el p-code fuera de sus raíces como lenguaje intermedio de compilador hacia un ambiente completo de ejecución. La p-Machine del UCSD Pascal fue optimizada para los pequeños nuevos microcomputadores con direccionamiento restringido a 16 bits (solamente 64 KB de memoria). James Gosling cita al UCSD Pascal como una influencia clave (junto con la máquina virtual del Smalltalk) en el diseño de la máquina virtual de Java.
El UCSD p-System alcanzaba la independencia de la máquina real definiendo como su OS a una máquina virtual, llamada p-Machine (p-Máquina) (o pseudo-machine (pseudo-máquina), que muchos usuarios comenzaron en llamar la "Pascal-machine" (máquina Pascal), aunque la documentación del USCD siempre usó "pseudo-machine") con su propio conjunto de instrucciones llamado p-code (p-código) (o pseudo-code). Urs Ammann, un estudiante de Niklaus Wirth, originalmente presentó un p-code en su tesis de PhD (ver Urs Aman, On Code Generation in a Pascal Compiler, Software—Practice and Experience, Vol. 7, No. 3, 1977, pp. 391–423), desde el cual fue derivada la implementación del UCSD, la implementación del Zúrich Pascal-P . La implementación del UCSD cambió la implementación Zúrich para ser "orientada a byte". El UCSD p-code fue optimizado para la ejecución del lenguaje de programación Pascal. Entonces, cada plataforma de hardware solamente necesitaba un programa interpretador de p-code escrito para dicha plataforma, para así poder portar el p-System y todas las herramientas para correr en ella. Versiones posteriores también incluyeron lenguajes adicionales que compilaron hacia la base del p-code. Por ejemplo, TeleSoft (también localizado en San Diego) ofreció un temprano entorno de desarrollo de Ada que usó p-code y por lo tanto podía correr en un número de plataformas de hardware incluyendo el Motorola 68000, el System/370, y el Pascal MicroEngine.
El UCSD p-System comparte algunos conceptos con la más actual plataforma Java. Ambas usan una máquina virtual para ocultar diferencias del sistema operativo y del hardware, y ambas usan programas escritos hacia esa máquina virtual para proporcionar soporte de plataforma cruzada. Asimismo ambos sistemas permiten que la máquina virtual sea usada como el sistema operativo completo de la computadora objetivo o correr en una "caja" (in a box) bajo otro sistema operativo.
El compilador del UCSD Pascal fue distribuido como parte de un sistema operativo portable, el p-System.

## Historia

El UCSD p-System comenzó alrededor 1977 como la idea de Kenneth Bowles del UCSD, quien creyó que el número de nuevas plataformas computacionales que salían en ese entonces haría difícil para que los nuevos lenguajes de programación ganasen aceptación. Basó el UCSD Pascal en el lanzamiento del Pascal-P2 del compilador portable de Zúrich. Él estaba particularmente interesado en Pascal como lenguaje para enseñar programación. El UCSD introdujo dos características que eran mejoras importantes sobre el Pascal original: strings de longitud variable, y "units" de código independientemente compilado (una idea incluida en el lenguaje de programación Ada entonces en desarrollo). Niklaus Wirth acredita al p-System, y al UCSD Pascal en particular, en la popularización del Pascal. No fue hasta el lanzamiento de Turbo Pascal que la versión del UCSD comenzó a declinar del primera lugar entre los usuarios de Pascal.

## Versiones

Había cuatro versiones del motor de UCSD p-code, cada una con varias revisiones del p-System y el UCSD Pascal. Una revisión del motor de p-code (es decir, la p-Machine) significaba un cambio al lenguaje del p-code, y por lo tanto el código compilado no es portable entre diferentes versiones de la p-Machine. Cada revisión fue representada con un número romano indicador, mientras que las revisiones del sistema operativo fueron enumeradas como el número "punto" siguiendo el número romano del p-code. Por ejemplo, II.3 representó la tercera revisión del p-System que funcionaba en la segunda revisión de la p-Machine.
* Versión I Versión original, nunca oficialmente distribuida fuera de la Universidad de California en San Diego. Sin embargo las fuentes de Pascal para las versiones I.3 e I.5 fueron intercambiadas libremente entre los usuarios interesados. Específicamente el parche de la revisión I.5a fue conocido en ser uno de los más estables.
* Versión II Distribuido extensamente, disponible en muchos tempranos microcomputadores. Numerosas versiones incluidas las de Apple II, DEC PDP-11, máquinas basadas en los microprocesadores Zilog Z80 y MOS 6502, en los microprocesadores Motorola 68000, y en el IBM PC (en el IBM PC, la versión II fue restringida a un segmento de código de 64K y un segmento de datos de 64K para stack y heap, la versión IV removió el límite del segmento de código pero costó mucho más).
* Versión III Versión de encargo escrita para Western Digital para correr en su microcomputador Pascal MicroEngine. Incluye por primera vez soporte para procesos paralelos.
* Versión IV Versión comercial, desarrollada y vendida por SofTech. Basada en la versión II, no incluyó cambios de la versión III. No se vendió bien debido a la combinación de su estructura de precios, problemas de desempeño debido al interpretador del p-code, y la competencia con sistemas operativos nativos (a menudo corría encima de ellos). Después de que SofTech abandonara el producto, fue recogido por Pecan Systems, una compañía relativamente pequeña formada por usuarios y aficionados del p-System. Las ventas revivieron algo, debido sobre todo a la razonable estructura de precios de Pecan, pero el p-System y el UCSD Pascal perdieron gradualmente el mercado a favor de los sistemas operativos y compiladores nativos.