Los primeros años de la FORT

imagen

KDPV tomado de aquí

Introducción


FORT es un lenguaje informático simple y natural. Ha recibido una distribución significativa donde se necesita una alta eficiencia. En los años 60, siguió el camino del desarrollo desde las universidades, pasando por los negocios, hasta los laboratorios. Esta es una historia sobre cómo un simple intérprete amplió sus capacidades y pudo convertirse en un lenguaje de programación y un sistema operativo completos.

Este trabajo fue escrito para una conferencia sobre la historia de los lenguajes de programación - HOPL II. Finalmente fue rechazada, probablemente debido a su estilo de presentación.

FORT se extendió en los años sesenta en Estados Unidos, en universidades, negocios y ciencias, junto con otros idiomas desarrollados. En ese momento yo era el único programador en él, hasta el final de este período no tenía nombre. Todo lo descrito aquí se recupera de la memoria, la documentación fragmentaria y las listas de programas supervivientes.

FORT en su conjunto no es original, pero es una combinación única de componentes. Estoy agradecido con aquellas personas y organizaciones que me permitieron desarrollarlo, a menudo sin saberlo yo mismo. Y le agradezco su interés en hacerle leer al respecto.

FORT es un lenguaje informático simple y natural. Hoy [1991 - aprox. trans.] Se considera un lenguaje de programación de clase mundial. El hecho de que haya alcanzado tal nivel sin el apoyo de la industria, las universidades o el gobierno es una consecuencia de su efectividad, confiabilidad y versatilidad. Fort es un idioma que se elige cuando su efectividad es más importante que la popularidad de otros idiomas. Este es un caso frecuente en áreas prácticas como los sistemas de control y comunicaciones.

Muchas organizaciones FORT y muchas pequeñas empresas ofrecen sistemas, aplicaciones y documentación. En América del Norte, Europa y Asia, se llevan a cabo conferencias anuales. El borrador del estándar ANSI [ANS 1991] se presentará en breve.

Ninguno de los libros sobre FORT describe completamente su "gusto". Creo que el mejor sigue siendo el primero de ellos: "Starting Forth" de Leo Brodie [disponible, por ejemplo, aquí - https://www.forth.com/starting-forth/ - aprox. traducción] .

El FORT clásico que estamos discutiendo proporciona un soporte mínimo suficiente para que el programador desarrolle el lenguaje mejor para su aplicación. Está destinado a un entorno como una estación de trabajo, que incluye un teclado, pantalla, computadora y unidad [en esos días, las unidades de disco a menudo eran externas, por lo que el autor simplemente enumera los componentes de un sistema informático mínimo - aprox. traducción] .

FORT es esencialmente un lenguaje de texto sin contexto. Le permite combinar "palabras", separadas por espacios, para construir nuevas "palabras". Alrededor de 150 de estas palabras forman un sistema que proporciona:

         SAO  1958  
        SLAC  1961   
         RSI  1966    ,   , 
     Mohasco  1968  ,  , ,  ,
                    
        NRAO  1971   *,    

* El código bordado es una forma de compilar un programa en el que es una matriz de llamadas de subprograma, consulte https://en.wikipedia.org/wiki/Threaded_code - aprox. perev.

Dicho sistema contiene de 3 a 8 kilobytes de código de programa compilado de 10-20 páginas de código fuente. Puede ser desarrollado fácilmente por un programador, incluso en una computadora con recursos limitados.

Este texto necesariamente describe mi carrera; pero fue concebido como una "biografía" del FORT. Analizaré las características de FORT enumeradas anteriormente y los nombres de las "palabras" asociadas a ellas. Los significados de muchas "palabras" son obvios. Algunos requieren una descripción, y otros van más allá del alcance de este trabajo.

La parte del diccionario de idiomas FORT a considerar se enumera a continuación:


     WORD  NUMBER  INTERPRET  ABORT
     HASH  FIND  '  FORGET
     BASE  OCTAL  DECIMAL  HEX
     LOAD  EXIT  EXECUTE  (
 (  )
     KEY  EXPECT
     EMIT  CR  SPACE  SPACES  DIGIT  TYPE  DUMP
 
     DUP  DROP  SWAP  OVER
     +  -  *  /  MOD  NEGATE
     ABS  MAX  MIN
     AND  OR  XOR  NOT
     0<  0=  =
     @  !  +!  C@  C!
     SQRT  SIN.COS  ATAN  EXP  LOG
 
     :  ;  PUSH  POP  I
 (   )
     BLOCK  UPDATE  FLUSH  BUFFER  PREV  OLDEST

     CREATE  ALLOT  ,  SMUDGE
     VARIABLE  CONSTANT
     [  ]  LITERAL  ."  COMPILE
     BEGIN  UNTIL  AGAIN  WHILE  REPEAT
     DO  LOOP  +LOOP  IF  ELSE  THEN


MIT, SAO, 1958


El momento más emocionante fue octubre de 1957, cuando se lanzó el Sputnik [satélite Sputnik-1 - aprox. traducción] . Fui estudiante de segundo año en el MIT y trabajé a tiempo parcial en el SAO (Observatorio Astrofísico Smithsoniano, hasta 16 sílabas, una pesadilla) en Harvard. El observatorio fue responsable del seguimiento óptico de los satélites: observaciones visuales utilizando la luna [que significa Proyecto Moonwatch - https://en.wikipedia.org/wiki/Operation_Moonwatch - aprox. transl.] y cámaras de rastreo satelital [ cámaras Baker-Noon - https://en.wikipedia.org/wiki/Schmidt_camera#Baker-Nunn - aprox. perev.]. Sorprendidos, contrataron a estudiantes para descubrir trayectorias en las calculadoras de escritorio de Friden. John Gaustad me contó sobre el IBM EDPM 704 en el MIT y me prestó su manual FORTRAN II. Como resultado, mi primer programa, Ephemeris 4, me dejó sin trabajo.

Ahora, ya en el papel de programador, trabajé con George Veis para aplicar su método de mínimos cuadrados para determinar los parámetros de las órbitas, las posiciones estacionarias y, en última instancia, para determinar la forma de la Tierra. Por supuesto, este "trabajo a tiempo parcial" tomó al menos 40 horas y, sin embargo, sí, mi diploma estaba cubierto.

John McCarthy enseñó un excelente curso de LISP en el MIT. Este curso fue mi introducción a la recursión y la maravillosa variedad de lenguajes de programación. Wil Baden señaló que LISP para el cálculo lambda es lo mismo que FORT para la notación de posfijo Lukasewcleicz [La notación de Lukashevich, también conocida como la notación polaca inversa - aprox. traducción] .

El submarino también fue relevante, con su extraño análisis de derecha a izquierda. Aunque lo admiro e imito a sus operadores, no estoy convencido de que constituyan el conjunto óptimo.

La programación en los años cincuenta fue más dura de lo que es hoy. Mi código fuente tomó 2 tarjetas perforadas. Para que pasaran por el auto, tuve que jugar, y básicamente lo hice yo mismo. El montaje tardó media hora (al igual que en C), pero el tiempo limitado de la computadora significó solo un lanzamiento por día, excepto, tal vez, para el tercer turno.

Entonces escribí un intérprete simple que lee tarjetas con datos de entrada y controla el programa. También controlaba la informática. Para cada uno de los cinco parámetros de la órbita, hubo ecuaciones empíricas para tener en cuenta la deriva atmosférica y las desviaciones de la forma de la Tierra de la esfera. De esta manera, podría componer varias ecuaciones para varios satélites sin recompilar el programa.

Factores como P2 (polinomio de segundo grado) y S (seno) participaron en estas ecuaciones. La mayoría de las veces, la computación de punto flotante de 36 bits ocupaba, por lo que la sobrecarga era baja. La pila de datos no era necesaria, pero probablemente no lo sabía.

Y así comenzó la historia del intérprete FORT, a partir de las palabras

WORD  NUMBER  INTERPRET  ABORT


Todavía no se han registrado en palabras, porque eran números de operador.

INTERPRET utiliza WORD para leer palabras separadas por espacios, y NUMBER para convertir palabras [números en un registro de texto - aprox. traducir.] en forma binaria (en este caso, con un punto fijo). Dicha entrada en formato libre era inusual, pero más eficiente (más pequeña y más rápida) y más confiable. La entrada de estilo Fortran se formateó en columnas específicas, y los errores tipográficos causaron numerosos retrasos.

Este intérprete usó la construcción IF ... ELSE IF codificada en FORTRAN para que coincida con cada carácter. Todo el manejo de errores fue simplemente interrumpir la ejecución del programa. Entonces, como ahora, la palabra ABORTARpreguntando al usuario qué hacer. Como las tarjetas de entrada estaban numeradas en el orden de lectura, puede averiguar dónde estaba el error.

Stanford, SLAC, 1961


En 1961, vine a Stanford para estudiar matemáticas. Aunque Stanford creó su propio departamento de informática, estaba más interesado en la informática. Me impresionó que pudieran (¿atreverse?) Escribir su propio compilador ALGOL. Y sin embargo, el destino me llevó a la computadora Burroughs B5500. Nuevamente contraté para trabajar a tiempo parcial en SLAC (Stanford Linear Accelerator, 10 sílabas), escribir código para optimizar la retención del haz en un futuro acelerador de electrones de tres kilómetros. Esta fue una aplicación natural del método de mínimos cuadrados (en el que tenía experiencia) al espacio de fase. Hal Butler fue responsable de nuestro grupo, y nuestro programa de TRANSPORTE fue un éxito.

Otra aplicación del método de mínimos cuadrados fue el programa CURVE, escrito en 1964 en ALGOL. Era un programa universal para la selección de datos no lineales con corrección diferencial. Su rigor estadístico proporcionó un análisis detallado de la consistencia del modelo y los datos experimentales.

Se interpretaron el formato de datos y las ecuaciones del modelo, y se utilizó una pila para facilitar los cálculos. CURVE fue un impresionante precursor de FORT. Para brindar la oportunidad de trabajar no con ecuaciones simples, sino con modelos mucho más elaborados, presentó las siguientes palabras:

     +  -  *  NEGATE
     IF  ELSE  THEN  <
     DUP  DROP  SWAP
     :  ;  VARIABLE  !  (
     SIN  ATAN  EXP  LOG


La ortografía era ligeramente diferente:

     NEGATE  -    MINUS
       DROP  -    ;
       SWAP  -    .
          !  -    <
   VARIABLE  -    DECLARE
          ;  -    END
     ( ...)  -    COMMENT ...;


Para definir una palabra de entrada de seis caracteres (llamada ATOM por analogía con LISP), el intérprete usó IF ... ELSE IF . DUP , DROP y SWAP fueron instrucciones de la máquina; Me sorprendió que estuvieran escritos de manera diferente. La palabra " : " (dos puntos) se tomó del formato de etiqueta en ALGOL, y se "volcó" para analizar de izquierda a derecha (para evitar que el intérprete detecte palabras indefinidas):

     ALGOL - LABEL:
     CURVE - : LABEL

De hecho, los dos puntos marcaron la posición en la línea de entrada, que se interpretaría más tarde. La interpretación fue detenida por la palabra " ; "(punto y coma). Una versión del colon se llamaba DEFINE .

Operador de registro " ! "(Marca de exclamación) apareció en relación con VARIABLE ; pero leer " @ " fue automático. Tenga en cuenta que el código se ha vuelto lo suficientemente complicado como para requerir comentarios. La condición de postfix una vez criticada comenzó desde aquí:

     ALGOL - IF expression THEN true ELSE false
     CURVE - stack IF true ELSE false THEN

Si había un valor distinto de cero en la parte superior de la pila, se percibía como un valor booleano verdadero (verdadero). ENTONCES proporcionó un final único, cuya ausencia siempre me confundió en ALGOL. Se interpretaron expresiones similares de la siguiente manera: SI escaneaba la entrada para ELSE o THEN . La palabra < introdujo la convención de que una relación deja un valor booleano en la pila: 1 si es verdadero y 0 si es falso. Las funciones trascendentales son, por supuesto, llamadas a rutinas de biblioteca.

En pan gratis


Dejé Stanford en 1965 para convertirme en programador de computadoras independiente en Nueva York. Esto no era inusual, y encontré programación de trabajo en FORTRAN, ALGOL, Jovial, PL / I y varios ensambladores. Literalmente me arrastré con mi paquete de tarjetas perforadas y lo reprogramé según fue necesario. Aparecieron mini computadoras y, con ellas, terminales. El intérprete era perfecto para la entrada de teletipo, y pronto adquirió código para trabajar con la salida. Entonces encontramos las palabras:

     KEY  EXPECT
     EMIT  CR  SPACE  SPACES  DIGIT  TYPE

EXPECT es un bucle que llama a KEY para leer las pulsaciones de teclas. TYPE es un bucle que llama a EMIT para mostrar un carácter.

Con el advenimiento del teletipo, es hora de la cinta perforada y los programas más incómodos que pueda imaginar, que requieren muchas horas de edición, perforación, carga, ensamblaje, impresión, descarga, prueba y luego nuevamente. Recuerdo un terrible domingo en un rascacielos en Manhattan, cuando no pude encontrar cinta adhesiva (nada más ayudó), y maldije que "debe haber una mejor manera".

Hice un trabajo decente para Bob Davis en Realtime Systems, Inc (RSI). Estudié a fondo el 5500 MCP, suficiente para soportar su servicio de tiempo compartido (trabajando con terminales remotas), y también escribí un traductor de FORTRAN a ALGOL y las utilidades de edición de archivos. El traductor me mostró el valor de los espacios entre palabras que FORTRAN no requiere.

El intérprete todavía solo distinguía las palabras por los primeros 6 caracteres (ya que la palabra de datos en el Burroughs B5500 era de 48 bits). Aparecieron las palabras LISTA EDITAR COMENZAR OTRA VEZ .

Las palabras BEGIN ... OTRA VEZ se escribieron como START ... REPEAT y sirvieron como "corchetes" para los comandos de edición T TYPE I INSERT D DELETE F FINDmás tarde usado en el editor NRAO.

La palabra CAMPO se utilizó en el estilo Forth DBMS de Mohasco. De ahí una de las señas de identidad de FORT. La regla es que el FORT confirma cada línea de entrada agregando OK cuando se completa la interpretación. Esto puede ser problemático, ya que cuando la entrada termina con un carácter CR, se debe mostrar un espacio, luego OK y CR al final. En RSI, OK, me encontré en la siguiente línea, pero sin embargo transmití una confirmación amistosa a través de una línea de comunicación aterradora [el chiste de un autor basado en el hecho de que en esos años el trabajo de las computadoras con líneas de comunicación era inusual; Para el lector moderno, el chiste ya ha perdido su relevancia y suena, al menos, extraño - aprox. traducción] :

     56 INSERT ALGOL IS VERY ADAPTABLE
     OK


Esta notación postfix sugiere el uso de una pila de datos, pero su profundidad suficiente es solo una.

Mohasco, 1968


En 1968, vine a trabajar como programador en la empresa comercial Mohasco Industries, Inc en Amsterdam, Nueva York. Era una gran empresa que producía artículos para el hogar: alfombras y muebles. Trabajé con Geoff Leach en RSI, y él me convenció de trasladarlo a la parte norte del estado. Me acabo de casar y en Amsterdam había una atmósfera maravillosa de un pueblo pequeño, en contraste con Nueva York.

Reescribí mi código en COBOL y descubrí qué es realmente el software empresarial. Bob Raiko fue responsable del procesamiento de datos corporativos y me dio dos proyectos relacionados.

Alquiló una mini computadora IBM 1130 con una pantalla gráfica 2250. El objetivo era ver si los gráficos de computadora podían ayudar a crear alfombras estampadas. La respuesta fue "no puede ayudar sin compatibilidad con el color", y la opción 1130 ya no estaba disponible.

En ese momento tenía la última minicomputadora: procesador de 16 bits, 8K RAM, unidad de disco (la primera en mi vida), teclado, impresora, lector de tarjetas y punch, compilador FORTRAN. El lector y el punzón eran una opción de respaldo en caso de falla del disco. Nuevamente porté mi intérprete (de vuelta a FORTRAN) y agregué ensamblador cruzado para trabajar con 2250.

El sistema fue asombroso. Podía dibujar imágenes animadas tridimensionales cuando IBM apenas podía dibujar imágenes planas estáticas. Como este fue mi primer gráfico en tiempo real, escribí el código de Spacewar, el primer videojuego. También reescribí mi programa de ajedrez FORT, originalmente escrito en ALGOL, y quedé muy impresionado con lo fácil que fue.

El archivo que contenía el intérprete se llamaba FORTH, que significaba la cuarta (próxima) generación de software, FOURTH. Pero el nombre tuvo que acortarse, ya que el sistema operativo limitó los nombres de los archivos a 5 caracteres.

Este entorno de programación para el 2250 era muy superior al de FORTRAN, por lo que amplié el ensamblador cruzado 2250 al compilador 1130. Había muchas palabras nuevas:

     DO  LOOP  UNTIL
     BLOCK  LOAD  UPDATE  FLUSH
     BASE  CONTEXT  STATE  INTERPRET  DUMP
     CREATE  CODE  ;CODE  CONSTANT  SMUDGE
     @  OVER  AND  OR  NOT  0=  0< 


Su ortografía seguía siendo diferente [del estándar para FORT - aprox. traducción] :

      LOOP     CONTINUE
     UNTIL -      END
     BLOCK -      GET
      LOAD -      READ
      TYPE -      SEND
 INTERPRET -      QUERY
    CREATE -      ENTER
      CODE -       


Esta fue la única aplicación que he encontrado para un símbolo de centavo.

El contador y el límite del bucle se almacenaron en la pila de datos. HACER y CONTINUAR surgió gracias a FORTRAN.

BLOCK controla el número de buffers para minimizar los accesos al disco. LOAD lee el código fuente de un bloque de 1024 bytes de tamaño. El tamaño de 1024 bytes se eligió en función del tamaño del bloque en el disco, y fue exitoso. La palabra ACTUALIZAR le permitió marcar un bloque en la memoria y luego vaciarlo al disco cuando necesite liberar el búfer (o mediante la palabra FLUSH ). Implementa un tipo de memoria virtual y se llama implícitamente durante las operaciones de escritura.

La palabra BASESe permite trabajar con números octales, hexadecimales y decimales. La palabra CONTEXTO fue la primera pista de los diccionarios y sirvió para separar las palabras del editor. La palabra ESTADO establece modos de compilación e interpretación. Durante la compilación, el número de caracteres y los primeros 3 caracteres de la palabra fueron compilados [compilados en el identificador - aprox. traducción] para su posterior interpretación. Por extraño que parezca, las palabras podrían ser interrumpidas por caracteres especiales, pero esto pronto fue abandonado. El operador de lectura ( @ ) tenía muchas opciones, ya que era necesario distinguir la lectura de variables, matrices y el disco. DUMP permitió cavar en la memoria para la depuración.

Pero lo más importante, ahora había un diccionario. El código del intérprete ahora tomó un nombre y lo buscó en una lista vinculada. La palabra CREAR creó una entrada de vocabulario clásico:

   *       
   *     3  *
   *  ,   
   *  

* Los identificadores FORT se empaquetan en 32 bits en la forma: 1 byte - el número de caracteres en la palabra, los 3 bytes restantes - los primeros 3 caracteres de la palabra (húsares, ¡silencio!) - aprox. perev.

El campo de código fue una innovación importante: tan pronto como se encontró la palabra, solo quedaba una transición indirecta de la sobrecarga del intérprete. Aprendí sobre el significado del número de caracteres en las palabras distintivas de los desarrolladores de compiladores en Stanford.

La palabra CÓDIGO ha creado una clase importante de palabras. Su campo de parámetros contenía instrucciones de la máquina. Por lo tanto, ahora era posible crear cualquier palabra dentro de las capacidades de una computadora. La palabra " ; CÓDIGO " definió el código que debía ejecutarse para una nueva clase de palabras e introdujo lo que ahora se llama objetos.

PalabraSMUDGE evitó la recursión durante la interpretación de las definiciones. Debido a ver el diccionario en orden desde las definiciones más recientes hasta las más antiguas, la recursión no deseada era común.

Finalmente, apareció una pila de retorno. Antes de esto, las definiciones no podían anidarse o tenían que almacenar la dirección de retorno en la pila de datos. En general, fue un momento de gran innovación en el desarrollo (intermitente) del Fuerte.

Geoff Leach y yo escribimos el primer artículo sobre FORT (en forma de un informe interno de Mohasco) en 1970. Ella no ha perdido relevancia hoy.

En 1970, Bob ordenó el Univac 1108. Era un proyecto ambicioso para apoyar una red de línea dedicada para un sistema de entrada de pedidos. Escribí un generador de informes en FORT, pero estaba seguro de que podría escribir un código para ingresar pedidos. Para aumentar la confianza en el FORT, lo porté a 5500 (¡como un programa separado!). Pero el software corporativo era COBOL. Sorprendentemente, se logró un compromiso al establecer el sistema FORT en 1108 para que interactuara con los módulos COBOL para el procesamiento de transacciones.

Recuerdo muy bien el viaje a Schenectady ese invierno para tomar el tiempo en el tercer turno en 1107. No había piso ni ventana en mi habitación, y este era un ejercicio nocturno de supervivencia. Pero el sistema resultó ser increíblemente exitoso e impresionó incluso a Univac (Les Sharp participó en la integración con el proyecto). El criterio decisivo fue el tiempo de respuesta, pero también estaba decidido a mantener el proyecto en una forma adecuada para el mantenimiento (es decir, mantenerlo pequeño y simple). Por desgracia, la recesión económica obligó a la administración a cancelar 1108. Todavía creo que fue una mala decisión. Fui el primero en renunciar.

Fort para 1108 tendría que ser escrito en ensamblador. Almacenaba los mensajes de entrada y salida y distribuía el procesador entre las tareas que procesaban cada línea. Aquí tienes el clásico sistema operativo. Pero también podría analizar las líneas de entrada y ejecutar (con la palabra PERFORM ) los módulos COBOL correspondientes. Supervisó las memorias intermedias del tambor de memoria y participó en el embalaje y desempaquetado de registros. Las palabras

     BUFFER  PREV  OLDEST
     TASK  ACTIVATE  GET  RELEASE


apareció justo entonces.

BUFFER no leyó el disco si se sabía que el bloque solicitado está vacío. PREV y OLDEST son variables del sistema que hacen posible implementar la gestión del búfer en una base "menos utilizada". TAREA definió la tarea en el momento del arranque y ACTIVAR la ejecutó cuando fue necesario. Obtenga y libere recursos compartidos controlados (tambor de memoria, impresora). PAUSE es la palabra por la cual la tarea libera al procesador. Se incluyó en todas las operaciones de E / S y era invisible para el código de transacción. Hizo posible un algoritmo de programación cíclico simple que evita el bloqueo.

Después de la declaración[probablemente sobre el despido - aprox. trans.] Escribí un poema enojado y un libro que nunca fue publicado. Describió cómo programar en FORT y alentó la simplicidad y la innovación. También describe la técnica del código cosido indirecto, pero por primera vez se implementó en NRAO.

Trabajé en el concepto de metalenguaje, un lenguaje que habla de un idioma. Fort ahora podía interpretar el ensamblador que ensambló el compilador, que compiló al intérprete. Al final, decidí que la terminología no funcionaba, pero el término "metacompilación" para recompilar el FORT aún estaba en uso.

NRAO, 1971


George Conant me ofreció un puesto en el NRAO (Observatorio Nacional de Radioastronomía, 22 sílabas). Lo conocía en CAO y le gustaba Ephemeris 4. Nos mudamos a Charlottesville, Virginia, y pasamos el verano en Tucson, Arizona, cuando el radiotelescopio Kitt Peak estaba disponible para mantenimiento.

El proyecto consistió en programar la minicomputadora Honeywell 316 para controlar un nuevo banco de filtros para un radiotelescopio de onda milimétrica de 36 pulgadas. Tenía una cinta magnética de nueve pistas y un terminal de tubo Tektronix con una "memoria" [probablemente se refiere a tubos de brillo posterior o potencioscopios - aprox. perev.]. George me dio total libertad para desarrollar el sistema, pero no estaba contento con el resultado. En NRAO todos usaban FORTRAN, y ahora aparecí con mi FORT. Tenía razón en que los estándares de la organización deberían proporcionar un lenguaje de programación común. Otros programadores ahora también quieren sus propios idiomas.

Sea como fuere, escribí el código FORT en ensamblador en el mainframe IBM 360/50. Luego lo volví a compilar en 316. Luego lo compilé de forma nativa en 316 (aunque tenía un terminal 360, el tiempo de respuesta fue terrible). Una vez que el sistema estuvo disponible, fue fácil. Había dos modos de observación: todas las frecuencias y líneas espectrales. Las líneas espectrales eran más interesantes, porque podía mostrar los espectros a medida que recopilaba los datos y suavizar las formas de las líneas utilizando el método de mínimos cuadrados.

En Tucson, donde lideró Ned Conklin, el sistema fue bien recibido. Este fue otro paso para reducir la cantidad de datos inmediatamente a medida que se recopilaban. Los astrónomos comenzaron a usarlo para detectar y mapear moléculas interestelares, tan pronto como se convirtió en un área de investigación de moda.

Bess Rather fue contratada para apoyar el observatorio. Primero tuvo que estudiar el sistema FORT, y luego explicarlo y documentarlo con una ayuda mínima de mi parte. Al año siguiente, reprogramé el DDP-116 para optimizar la orientación del telescopio. Luego Bess y yo reemplazamos el DDP-116 y Honeywell 316 con el DEC PDP-11.

Tal reemplazo se hizo posible debido al desarrollo de código indirecto cosido. Este fue un desarrollo natural de mi trabajo en Mohasco, aunque luego supe que DEC usaba código cosido directo en uno de sus compiladores. En lugar de compilar la definición completa cada vez, el compilador simplemente tomó la dirección de cada palabra utilizada del diccionario. Esta mejora de rendimiento para cada enlace requirió solo dos bytes, y el intérprete pudo ejecutar el código mucho más rápido. En DEC PDP-11, este intérprete era esencialmente una macro de dos palabras:

: NEXT IP )+ W MOV W )+ ) JMP ;


Ahora el FORT se ha completado. Y lo sabía. Pude escribir código más rápido y fue más eficiente y confiable. Además, era portátil. Continué reprogramando el DDP-116, que se enfoca en apuntar el telescopio Green Bank de 300 pulgadas y el HP mini, que comenzó con una radioastronomía de base muy larga (VLBI). George me dio ModComp, y programé la transformación de Fourier para interferometría y búsqueda de púlsar (en conjuntos de datos de 64K). Incluso demostré que la multiplicación compleja por IBM 360 en FORT era un 20% más rápida que en ensamblador.

La NRAO agradeció lo que escribí. Tenían un acuerdo con una empresa de consultoría para identificar tecnologías colaterales. El tema de las patentes FORT se ha discutido durante bastante tiempo. Pero dado que las patentes de software eran contradictorias y podían resolverse con la participación de la Corte Suprema, la NRAO se negó a abordar este problema. Como resultado, los derechos de autor volvieron a mí. No creo que las ideas deban ser patentadas. Mirando hacia atrás, uno debería estar de acuerdo en que la única posibilidad de FORT es permanecer en el dominio público. Y allí floreció.

El código cosido cambió las palabras estructurales (como DO LOOP IF THEN ). Obtuvieron una implementación elegante con direcciones en la pila de datos en tiempo de compilación.

Ahora cada implementación del fuerte tenía ensamblador para la arquitectura de su computadora. Utilizó códigos de operación en notación postfix, y generó direcciones en la pila de datos, con palabras estructuradas tipo FORT para ramificación. La mnemotecnia del ensamblador se definió como clases de palabras usando ; CODE . Fue posible codificar todo esto en un día.

Los operadores aritméticos inusuales también han demostrado su valía.

M*  */  /MOD  SQRT  SIN.COS  ATAN  EXP  LOG


M * es la multiplicación de hardware habitual de dos números de 16 bits en un producto de 32 bits (argumentos, por supuesto, en la pila de datos). Le sigue * / con división para implementar la aritmética fraccional. / MOD devuelve tanto el cociente como el resto, y es ideal para buscar entradas en un archivo. SQRT devuelve un resultado de 16 bits de un argumento de 32 bits. SIN.COS devuelve inmediatamente seno y coseno, lo cual es útil para aritmética vectorial y compleja (FFT). ATAN es la operación inversa y no tiene ambigüedades de cuadrante. EXP y LOG se calculan en la base 2.

En estas funciones, se utilizó la aritmética de punto fijo: 14 o 30 bits a la derecha del punto binario para trigonometría, 10 para logaritmos. Esto se ha convertido en un sello distintivo de FORT, ya que dicha aritmética es más simple, más rápida y más precisa que el punto flotante. Pero si es necesario, puede implementar fácilmente hardware y software con un punto flotante.

Aplaudo el invaluable trabajo de Hart, quien compiló tablas de aproximaciones de funciones con diferente precisión. Liberaron a los programadores de aplicaciones de las limitaciones de las bibliotecas existentes. Apareció la

palabra > (se escribió como ; :) . Definió una clase de palabras (como ; CÓDIGO), estableciendo que la definición debe interpretarse al referirse a una palabra. Fue difícil de implementar, pero resultó ser especialmente útil para definir códigos de operación.

Sin embargo, no pude convencer a Charlottesville de que FORT les queda bien. No se me permitió programar VLA. En cualquier grupo de programadores, el 25% ama Fort y el 25% lo odia. Las disputas son difíciles y rara vez se llega a un compromiso. Como resultado, el primer 25% unió fuerzas y creó Forth, Inc. Pero esa es otra historia.

Moralidad


La historia de FORT tiene una cierta moralidad: un joven programador persistente lucha contra la indiferencia para descubrir la Verdad y salvar a sus camaradas sufrientes. Está mejorando: mire a Forth, Inc. enfrentarse a IBM en el sistema bancario francés.

Sé que FORT sigue siendo el mejor lenguaje de programación. Estoy satisfecho con su éxito, especialmente en el campo ultraconservador de la inteligencia artificial [recuerdo, 1991 - aprox. traducción] .

Mi preocupación es que aquellas personas que no deberían apreciar cómo FORT encarna su propia descripción del lenguaje de programación ideal.

Pero todavía estoy investigando sin licencia. FORT ha llevado a una arquitectura que promete una increíble combinación de hardware y software. Así como otro nuevo entorno de programación.

All Articles