Articulo de referencia

GRASS (lenguaje de programación)

GRASS ( GRAphics Symbiosis System ) es un lenguaje de programación creado para generar animaciones de gráficos vectoriales 2D . Su sintaxis era similar a la de BASIC , pero inco...

GRASS ( GRAphics Symbiosis System ) es un lenguaje de programación creado para generar animaciones de gráficos vectoriales 2D . Su sintaxis era similar a la de BASIC , pero incorporaba numerosas instrucciones para especificar la animación de objetos 2D, incluyendo escalado, traslación y rotación a lo largo del tiempo. Estas funciones eran compatibles directamente con el terminal gráfico 3D Vector General, para el cual se desarrolló GRASS. Rápidamente se popularizó entre la comunidad artística que experimentaba con el nuevo medio de los gráficos por computadora , y es especialmente conocido por su uso por parte de Larry Cuba para crear la animación original de "atacar la Estrella de la Muerte no será fácil" en Star Wars (1977).

Como parte de una colaboración posterior con Midway Games , el lenguaje se adaptó a la Z Box de Midway, basada en el procesador Z80 . Esta máquina utilizaba gráficos rasterizados y un tipo de sprites , lo que requirió modificaciones importantes para su compatibilidad, además de la animación de cambios de color. Esta versión se conocía como ZGRASS .

Historia

CÉSPED

La versión original de GRASS fue desarrollada por Tom DeFanti para su tesis doctoral de 1974 en la Universidad Estatal de Ohio . [ 1 ] Fue desarrollada en una PDP-11 /45 que controlaba una pantalla Vector General 3DR . [ 1 ] Como su nombre indica, se trataba de una máquina de gráficos puramente vectoriales . GRASS incluía varios comandos de dibujo vectorial y podía organizar colecciones de ellos en una jerarquía, aplicando los diversos efectos de animación a "árboles" completos de la imagen a la vez (almacenados en matrices). [ 1 ]

Tras graduarse, DeFanti se trasladó a la Universidad de Illinois, Chicago Circle . Allí se unió a Dan Sandin y juntos fundaron el Circle Graphics Habitat (hoy conocido como Electronic Visualization Laboratory , o EVL). Sandin se había incorporado a la universidad en 1971 y construyó el Procesador de Imágenes Sandin , o IP. El IP era un ordenador analógico que recibía dos entradas de vídeo, las mezclaba, coloreaba los resultados y luego recreaba la salida de televisión. Sandin lo describió como la versión de vídeo de un sintetizador Moog . [ 1 ]

DeFanti añadió el sistema GRASS existente como entrada al IP, creando el Procesador de Imágenes GRASS , que se utilizó durante mediados de la década de 1970. Para hacer el sistema más útil, DeFanti y Sandin añadieron todo tipo de comandos "únicos" al sistema GRASS existente, pero estos cambios también hicieron que el lenguaje fuera considerablemente más idiosincrásico. En 1977, otra miembro de Habitat, Nola Donato, rediseñó muchas de las estructuras de control de GRASS en formas más generales, dando como resultado el GRASS3 , considerablemente más limpio . [ 1 ]

El trabajo de Larry Cuba en Star Wars se basa en la filmación semiautomatizada de un sistema GRASS que se ejecuta en una terminal Vector General 3D . El VG3D contaba con hardware interno que realizaba transformaciones básicas (escalado, rotación, etc.) en tiempo real sin interactuar con la computadora. Solo durante la presentación de nuevos escenarios se produce la comunicación, mucho más lenta, con el lenguaje GRASS. Esto se puede apreciar en la secuencia de la película, ya que las secciones iniciales muestran la Estrella de la Muerte rotando y escalando muy rápidamente, mientras que las secciones posteriores que simulan el vuelo por la trinchera requieren que se carguen nuevos escenarios desde los "árboles" de GRASS. Estos aparecen agrupados.

ZGRASS y UV-1

En 1977, DeFanti conoció a Jeff Frederiksen, un diseñador de chips que trabajaba en Dave Nutting Associates . Nutting había sido contratado por Midway, la división de videojuegos de Bally, para crear un chip controlador de gráficos estandarizado . Tenían la intención de usarlo en la mayoría de sus futuros juegos arcade, así como en una consola de videojuegos en la que estaban trabajando y que más tarde se convertiría en la Astrocade . Midway estaba muy interesado en ver el lenguaje GRASS funcionando en su sistema y contrató a DeFanti para que lo adaptara a la plataforma. Varias personas en Habitat, así como algunas de Nutting, trabajaron en el proyecto, al que se referían como la Z Box . GRASS3 ejecutándose en ella se convirtió en ZGRASS . [ 1 ]

La Z-Box era una máquina de gráficos rasterizados , a diferencia de los sistemas GRASS originales, por lo que, si bien la mayor parte del estilo GRASS3 se mantuvo en ZGRASS, se añadieron varios comandos dedicados a las imágenes rasterizadas. Esto incluía un extenso conjunto de comandos de transferencia de bloques de bits para simular sprites , algo que el hardware no incluía. [ 1 ] El trabajo nunca sería lanzado por Midway, pero Circle produciría máquinas basadas en él como Datamax UV-1 .

CÉSPED RT/1

La última versión de GRASS fue RT/1 , una adaptación a otras plataformas que separó el lenguaje del modelo de visualización y permitió su portabilidad. Existían versiones para MS-DOS , Microsoft Windows , la plataforma SGI con OpenGL , HP-UX , AIX , Macintosh y Amiga . El lenguaje sigue siendo similar a las versiones anteriores, por lo que se desconoce el motivo del cambio de nombre.

Descripción

Esta descripción se basa en los manuales originales de Bally, así como en la descripción de ACM. [ 2 ]

Zgrass se basaba en un conjunto estándar de comandos BASIC y utilizaba la mayor parte de su sintaxis. La diferencia con BASIC radicaba en que todos los comandos eran funciones que devolvían valores, de forma similar al lenguaje de programación C. Si no había un valor de retorno obvio, se esperaba que una función devolviera 1 si tenía éxito y 0 si fallaba. Por ejemplo, el comando PRINT PRINT 10sería ilegal en BASIC, pero en Zgrass imprimiría 10 1, donde 1 es el valor devuelto por el segundo PRINT, lo que significa "He impreso correctamente la cadena '10'".

En Zgrass, los programas se denominaban "macros" y se almacenaban como cadenas de texto. Ambas peculiaridades eran intencionadas, ya que Zgrass permitía que cualquier cadena se convirtiera en un programa. Por ejemplo, MYBOX="BOX 0,0,100,100,2"define una cadena (sin necesidad de un $ en la variable como en Microsoft BASIC ) que contiene un fragmento de código Zgrass. Simplemente escribiendo MYBOXa partir de ese punto se ejecutarían los comandos que contiene. Esta función puede utilizarse en lugar del GOSUBcomando más tradicional de BASIC, pero tiene la ventaja añadida de tener un nombre bien definido en lugar de un número de línea opaco. Además, el comando permanece como una cadena en memoria y puede manipularse en tiempo de ejecución con operaciones de cadena estándar.

La mayoría de los intérpretes de BASIC de la época convertían el texto de entrada en una versión tokenizada , donde cada comando se reemplazaba por un número (normalmente de un byte ). Esto aceleraba la ejecución del programa, ya que no era necesario decodificar continuamente los comandos de las cadenas. El uso de macros basadas en cadenas por parte de Zgrass dificultaba esta tarea, por lo que no se molestaron en tokenizarlas. En su lugar, incluyeron un compilador que podía utilizarse con cualquier macro, lo que aumentaba considerablemente su velocidad. Los programas solían consistir en una combinación de macros compiladas y sin compilar.

En Zgrass, los números de línea eran opcionales y normalmente solo aparecían en las líneas que eran el objetivo de un GOTO. La mayoría de los intérpretes de BASIC requerían números de línea para cada línea de código, pero esto se debía a su uso en el "editor de líneas" : si se necesitaba editar una línea en particular, la única forma de referirse a ella era por su número. Zgrass utilizaba un editor de pantalla completa más avanzado que eliminaba esta necesidad. Zgrass permitía que cualquier cadena actuara como un "número de línea", GOTO 10y GOTO MARKERambos eran válidos.

Zgrass también incluía bifurcaciones sin nombre, mediante la SKIPinstrucción, que permitía avanzar o retroceder un número determinado de líneas. Esto era importante en Zgrass, ya que los números de línea eran opcionales y diferentes macros podían usar las mismas etiquetas. Por ejemplo, LOOPSTARTes probable que alguna variación de se encuentre en muchos fragmentos de código, lo que GOTO LOOPSTARTpodría provocar un conflicto de nombres. El uso de SKIPevitaba esta posibilidad.

En consonancia con su propósito original como lenguaje gráfico, Zgrass incluía numerosos comandos para dibujar de forma sencilla. El sistema de coordenadas de Zgrass tenía un punto por cada píxel en el modo de alta resolución del chip gráfico de Nutting, lo que proporcionaba una cuadrícula de 320 × 202. El Astrocade, por diseño, solo podía usar el modo de baja resolución de ese chip, una pantalla de 160 × 101. Para evitar posibles problemas de mapeo, el punto cero del espacio de coordenadas se situaba en el centro de la pantalla. De -160 a 160 eran ubicaciones X válidas, y de -101 a 101, ubicaciones Y válidas. Para su uso en el Astrocade, solo se utilizaban las ubicaciones positivas, mientras que en el UV-1 estaba disponible todo el espacio.

Zgrass añadió un conjunto bastante completo de funciones de matriz, dado que las matrices se utilizan ampliamente en gráficos. Esto incluía la capacidad de "capturar" partes de la pantalla en una matriz como un mapa de bits , que luego podía manipularse como cualquier otro elemento gráfico. Esto permitió a Zgrass incluir funcionalidades similares a los sprites en el lenguaje, algo que el hardware de Nutting no incluía directamente. Otra característica que Astrocade no incluía era la capacidad de procesar matrices a una velocidad razonable, por lo que UV-1 incluyó una FPU suministrada por Zilog para mejorar el rendimiento.

Zgrass incluía tres prioridades (denominadas niveles ) que permitían ejecutar macros de forma normal, en primer plano o en segundo plano. Esto añadía una forma sencilla de multitarea , tremendamente útil en un lenguaje orientado a la animación. Los desarrolladores de juegos podían colocar rutinas de lectura del joystick en una macro configurada para ejecutarse en segundo plano, y el joystick se leía automáticamente cuando la macro de dibujo en curso finalizaba. Las funciones colocadas en primer plano se ejecutaban antes que las demás y se utilizaban a menudo para temporizadores y otras necesidades de baja latencia. Zgrass incluía una TIMEOUTfunción que llamaba a las macros de forma programada, lo que facilitaba enormemente la implementación de temporizadores.

Zgrass también incluía una serie de comandos que "cubrían" CP/M, lo que permitía acceder al disco sin salir al símbolo del sistema. Se podían guardar fácilmente las macros en archivos con nombre y cargarlas de la misma manera, lo que permitía construir programas cargando varias macros del disco en un único programa grande. Los comandos también hacían automáticamente una copia de seguridad de cada guardado. Se admitían funciones similares para el almacenamiento en casete compacto , pero curiosamente la sintaxis no era paralela: los comandos de disco eran D-algo, como DPUT, pero los comandos de cinta no eran T-algo, como TPUT, sino algo-TAPE, como PUTTAPE.

Con programas construidos a partir de módulos seleccionados arbitrariamente, Zgrass necesitaba un mayor control sobre sus variables que BASIC. En BASIC, todas las variables son "globales", por lo que si dos subrutinas usan la variable I, que se usa comúnmente como variable de índice de bucle, podrían modificar los valores de la otra, lo que genera problemas difíciles de depurar. En Zgrass, un programador que carga dos módulos podría descubrir fácilmente que ambos usan Icomo contador de bucle, lo que podría causar problemas. Para solucionar este problema, Zgrass consideró que las variables con nombres en minúscula eran locales solo para esa macro, por lo que Iy ieran variables diferentes, global y local respectivamente. Curiosamente, los ejemplos proporcionados con el lenguaje no hacen un uso generalizado de esta característica, lo que podría confundir a los programadores novatos que desconozcan su existencia.

Ejemplo

SINCURVE = [ PROMPT "¿CUÁL ES EL DESPLAZAMIENTO?" INPUT DESPLAZAMIENTO x = -160 ángulo = 0 PUNTO DESPLAZAMIENTO + x , SIN ( ángulo ) * 80 , 3 ángulo = ángulo + 2 SI ( x = x + 1 ) < 159 , SALTAR -2 ]

Este texto crea una nueva macro SINCURVEque se puede llamar simplemente escribiendo SINCURVEen el símbolo del sistema, o desde otras macros o programas. SINCURVE utiliza dos variables locales, x y angle , así como una variable global, OFFSET .

La barra inclinada PROMPT(/) INPUTes una modificación del BASIC original INPUTque no solicita la entrada si el usuario la escribe en la línea de comandos al llamar a la macro. En este caso, escribir SINCURVEmostrará el indicador de comandos y el programa esperará la entrada, mientras que escribir SINCURVE 30omitirá el indicador y se asignará automáticamente el valor 30 a OFFSET. Esto permite utilizar una misma macro tanto de forma interactiva como dentro de un programa como una función.

POINTes un ejemplo de uno de los muchos comandos gráficos incluidos en el lenguaje Zgrass. POINTrequiere una ubicación X e Y, así como un color. En este ejemplo, el usuario proporciona OFFSETla posición x de la curva en la pantalla, mientras que la posición Y la proporciona la función trig , adecuadamente ampliada para su visualización (en este caso, 80 veces). El color se proporciona en la última entrada, y en este caso es 3. El UV-1 usaba registros de color, por lo que 3 no implicaba un color en particular, sino un color seleccionado de la paleta actual.

Esto IFtambién es notable. Coloca un incremento, (x=x+1), delante de la prueba, una característica que normalmente no está disponible en BASIC. En este caso, se le indica al IF que llame a SKIP -2si es verdadero, lo que retrocederá dos líneas y puede usarse en lugar de un GOTO, ya que no hay un número de línea objetivo.

Notas

Referencias

Citas

Bibliografía

  • DeFanti, Thomas; Fenton, Jay; Donato, Nola (agosto de 1978). «BASIC Zgrass: un lenguaje gráfico sofisticado para el ordenador Bally Home Library» . Actas de la 5.ª conferencia anual sobre gráficos por ordenador y técnicas interactivas . Vol.  12. ACM SIGGRAPH Computer Graphics. págs. 33-37 . doi : 10.1145/800248.807366 . ISBN  9781450379083. S2CID 8014940 . 
  • DeFanti, Thomas (noviembre de 1980). "Estructuras de control del lenguaje para una fácil visualización electrónica" . BYTE .