Mi compilador Pascal y arte contemporáneo polaco

Orígenes


Hace varios años escribí un compilador Pascal. La motivación era simple: cuando era adolescente, aprendí de mis primeros libros de texto de programación que un compilador es algo muy sofisticado. Este reclamo eventualmente se convirtió en un desafío y requirió ser probado por la experiencia.

imagen
ha.art.pl

Primero, surgió un compilador PL / 0 simplista, y luego un compilador Pascal casi completamente funcional para MS-DOS ha crecido a partir de él. Mi fuente de inspiración fue el libro Compiler Construction de Niklaus Wirth, el inventor del lenguaje Pascal. No me importa si las opiniones de Wirth ahora se consideran obsoletas y no tienen conexiones directas con la corriente principal de TI, o si la moda del diseño del compilador ha cambiado. Es suficiente saber que sus técnicas siguen siendo simples, elegantes y, por último, pero no menos importante, brindan mucha diversión , ya que es más atractivo analizar una fuente de programa con un analizador de descenso recursivo escrito a mano y generar el código de máquina, en lugar de llamamos yacs , bisontes y todos sus descendientes.

El destino de mi compilador no fue tan trivial. Ha vivido dos vidas: la primera en mis propias manos y la segunda en manos de anticuarios informáticos de Polonia.

Xd pascal


Mi compilador recién nacido se llamaba XD Pascal . Soportó todas las declaraciones de Pascal excepto goto y with . El primero parecía ser difícil de implementar, ya que destruiría la estructura perfectamente jerárquica del programa. Esto último podría hacer que las reglas de alcance simple sean ambiguas.

Todos los tipos de datos principales también fueron compatibles. Más allá del alcance estaban solo los enteros, conjuntos, enumeraciones y registros de variantes sin signo, pero todos estos obviamente no son las necesidades diarias. Sin embargo, no podía negarme el placer de introducir números de punto flotante y la aritmética 8087 FPU: ese fue el impacto de mi adicción profesional a los cálculos de ingeniería.

Al implementar procedimientos y funciones, temía que la recursividad y el almacenamiento de variables locales en la pila fueran un gran problema. Sin embargo, una verdadera dificultad específica de Pascal fue con las subrutinas anidadas. Uno puede tener un deseo inocente de acceder a la variable local de una subrutina externa desde la interna. Sin embargo, la subrutina interna no tiene la dirección del marco de la pila para la externa, en otras palabras, no sabe qué origen usar con el desplazamiento variable. Esta dirección se debe pasar a la subrutina interna como un argumento oculto adicional. Supongo que fue esta dificultad la que obligó a los diseñadores de C a abandonar por completo la anidación de subrutinas. Pero Pascal todavía los tiene, y esta característica no puede ser ignorada.

El generador de código creó los ejecutables COM más simples para MS-DOS en modo real. Las instrucciones de la máquina se generaron directamente, sin ningún ensamblador externo o enlazador. Usé registros de 32 bits para datos, pero el direccionamiento permaneció en 16 bits (un par segmento / desplazamiento).

El modelo de memoria era similar al 'pequeño' (si alguien todavía recuerda esta terminología de la era de 16 bits): el código, los datos y la pila ocupaban un segmento de 64 kbytes cada uno.

imagen
Uso de la memoria

Generar EXE y cambiar los segmentos sobre la marcha parecía demasiado difícil, y las estrictas limitaciones del modelo 'pequeño' me obligaron a despedirme de la autocompilación. Ciertamente, vi algunos compiladores de compilación automática cuyo código encaja bien en un solo segmento (por ejemplo, Contexto ). Sin embargo, rara vez podrían hacer algo útil además de esta capacidad de compilarse. En cambio, deseaba hacer mi compilador adecuado para cálculos numéricos y gráficos. Es por eso que incluí, entre otros ejemplos, los fractales, el método de Gauss para resolver ecuaciones lineales, la transformada rápida de Fourier e incluso el filtro de Kalman para estimar los errores del sistema de navegación inercial.

imagen
Fragmento de conjunto de Mandelbrot

imagen
Transformada rápida de Fourier

imagen
Estimación de error del sistema de navegación inercial

Lo que finalmente obtuve fue muy similar al antiguo Turbo Pascal 3.0 (sin OOP) y al aficionado BeRo Tiny Pascal . El autor de este último se las arregló para compilarlo en Windows, pero sacrificó la aritmética de coma flotante y muchas sutilezas de la gramática, que deseaba preservar. Entre las características más modernas, mi XD Pascal recibió los comentarios de una línea de estilo Delphi ( // ) y la variable Result .

Sin embargo, desde su nacimiento, mi compilador fue marcado para la muerte. Pascal estaba pasando de moda irreversiblemente, y MS-DOS se había vuelto arcaico mucho antes. En un día en que cambié de Windows XP de 32 bits a Windows 7 de 64 bits sin máquina virtual DOS, consideré que mi proyecto estaba muerto.

Renacimiento


Entonces algo extraño ha sucedido. Después de tres años de olvido, un equipo de entusiastas de la retrocomputación polaca y fanáticos de Atari ha encontrado mi compilador. Parece que no les importaban mucho los problemas abstractos como la autocompilación o la rigurosidad gramatical. Simplemente necesitaban una herramienta de programación conveniente para su máquina favorita. Usando mi proyecto, construyeron su propio compilador Mad Pascal para la arquitectura 6502. Se amplió la gramática del lenguaje, se agregó el soporte para unidades separadas con la interfaz y las secciones de implementación, la instrucción goto , enteros sin signo, conjuntos y enumeraciones, código de ensamblaje en línea. En lugar del código de máquina, se generó el código de ensamblaje. Luego fue traducido por un ensamblador casero.

La apariencia externa del lenguaje se ha vuelto significativamente más cercana al estándar de facto Pascal. Las partes internas del compilador parecen algo horribles, las palabras reservadas se mezclan con los nombres de las subrutinas estándar, pero esto no molesta a los desarrolladores. Como sea, el esfuerzo es sorprendentemente viable: durante tres años Mad Pascal ha sido actualizado regularmente, muchos juegos están escritos en él, los autores asisten anualmente a la conferencia de retrocomputación de Silly Venture (el enlace puede requerir VPN). Parece que las tradiciones de Atari son muy fuertes en Polonia.


Un evento notable para los fanáticos polacos de Atari ocurrió en la primavera de 2018: el libro Robbo. Se publicó Solucja ( Robbo. Tutorial ), un ejemplo de literatura experimental. Debo enfatizar aquí que el juego Robbo para Atari, que se publicó hace 30 años, todavía entusiasma a los fanáticos polacos mayores y los llena de una especie de deleite patriótico. En términos generales, no es sorprendente que haya aparecido un libro inspirado en el juego. Pero el hecho curioso es que el 60 por ciento del libro, como dicen los autores, es el tutorial tutorial generado por la computadora Atari. El programa de generación de texto está escrito en Mad Pascal.

imagen
graczpospolita.pl

Parece que algunas personas consideran el libro como un gran ejemplo de arte contemporáneo:
Sería engañoso tratar este libro como un artículo de colección para los fanáticos de Robbo o, en general, los fanáticos de Atari. Nos ocupamos de un raro ejemplo de la interacción entre la cultura y la literatura de los videojuegos (en este caso, la literatura electrónica), donde el punto de partida es el "juego", no la "literatura". Para algunos, no tiene sentido 'arte por el arte'. Para otros, este crossover ofrece oportunidades y experiencias absolutamente nuevas. Nada le impide crear una versión de Robbo que puede terminar usando el 'tutorial' del libro. El libro encaja bien con mi visión de los videojuegos como arte. Arte, en el que el jugador puede ser el destinatario y el creador, si durante el "juego" hay una "audiencia" que mira al jugador creando su propio historial de "juego". El contenido del libro se puede adaptar a un espectáculo de actuación con un actor que interpreta a Robbo utilizando los elementos del 'tutorial' del libro. Para no quedar sin fundamento: el rendimiento basado en Robbo. Solucja tuvo lugar el 11 de mayo de 2018 en la galería de arte contemporáneo Bunker en Cracovia, durante la presentación del libro que acompaña a la exposición Inexhaustibility .
Un espectáculo de performance en Cracovia. Vale la pena haber escrito un compilador.

Source: https://habr.com/ru/post/440372/


All Articles