El lenguaje TRAC (para cálculo de texto y compilación ) es un lenguaje de programación desarrollado entre 1959 y 1964 por Calvin Mooers e implementado por primera vez en el PDP-1 en 1964 por L. Peter Deutsch . [4] Fue uno de los tres "primeros lenguajes" recomendados por Ted Nelson en Computer Lib . TRAC T64 se utilizó hasta al menos 1984, cuando Mooers lo actualizó a TRAC T84. [4]
Descripción del idioma
TRAC es un lenguaje puramente de texto, una especie de lenguaje de macros . A diferencia de los lenguajes de macros ad hoc tradicionales de la época, como los que se encuentran en los ensambladores, TRAC está bien planificado, es consistente y, en muchos sentidos, completo [ ¿hecho u opinión? ] . Tiene operadores de entrada y salida explícitos, a diferencia de la E/S implícita típica en el nivel de macro más externo, lo que lo hace simultáneamente más simple y más versátil [ vago ] que los lenguajes de macros más antiguos.
TRAC es un lenguaje de procesamiento de texto, [5] también llamado lenguaje de procesamiento de cadenas. [6] Debido a esto, el único tipo de datos disponible es una cadena de caracteres. Los números son cadenas de dígitos, con aritmética de números enteros (sin límites específicos en valores máximos) proporcionada a través de funciones integradas ("primitivas") que operan en su representación de cadena. Podría decirse que un aspecto de su completitud es que el concepto de error se limita a eventos como la falta de espacio de archivo y la solicitud de expansión de una cadena más larga que el almacenamiento de trabajo del intérprete; lo que en muchos lenguajes se describiría como operaciones ilegales se manejan en TRAC definiendo un resultado (a menudo una cadena nula) para cada combinación posible de las cadenas de argumentos de una función.
TRAC es, como APL o LISP , un lenguaje orientado a expresiones (en contraste con los lenguajes más típicos orientados a procedimientos ) pero, a diferencia de APL, carece por completo de operadores. En la mayoría de los aspectos, es un caso de programación funcional pura . Tiene, en común con LISP, una sintaxis que generalmente implica la presencia de muchos niveles de paréntesis anidados.
TRAC es homoicónico : es decir, un programa TRAC puede representarse y manipularse dentro del propio lenguaje TRAC. [7] [8] [9] El énfasis en las cadenas como el único tipo de datos es tan fuerte que TRAC proporciona mecanismos para manejar los propios caracteres sintácticos del lenguaje, ya sea en sus roles sintácticos o como cualquier otro carácter, y el código automodificable tiene más la sensación de una consecuencia natural de las técnicas de programación TRAC típicas que de ser una característica especial.
La principal inspiración para TRAC provino de tres artículos de Douglas McIlroy . [7] [10] [11] [12]
Propiedad intelectual
Mooers registró el nombre TRAC como marca en un esfuerzo por mantener su control sobre la definición del lenguaje, una acción inusual y pionera en ese momento. En un momento dado, presentó una demanda por infracción de propiedad intelectual contra DEC , alegando que un contrato para entregar una minicomputadora con un intérprete TRAC violaba sus derechos. "El primer número de Dr. Dobb's Journal , una de las primeras publicaciones en el campo de las computadoras personales, tiene un editorial mordaz contra Mooers y su rapacidad al intentar cobrar a la gente por su lenguaje informático". [13] [14] Desde entonces, el nombre se ha utilizado varias veces para proyectos de tecnología de la información no relacionados , incluido un sistema de gestión de proyectos de código abierto actual llamado Trac .
Influencia y uso
TRAC se implementó posteriormente en el PDP-8 , PDP-10 y PDP-11 .
Ha habido varios lenguajes inspirados en TRAC. Para evitar problemas con Mooers, cambiaron el nombre de los primitivos y/o usaron metacaracteres diferentes. En el caso de SAM76, los primitivos se agregaron, según Claude Kagan, "porque TRAC es lenguaje infantil". En el caso de MINT, los primitivos se agregaron para dar acceso a una sofisticada maquinaria de edición de texto.
- Una de las deficiencias percibidas de TRAC era la falta de extensibilidad total: algunas funciones primitivas de TRAC son sensibles a la distinción entre un argumento nulo (cero caracteres) y uno inexistente (no delimitado), pero más allá de su último argumento no nulo, una función definida por el usuario no puede hacer la distinción. SAM76 era un lenguaje similar a TRAC que eliminaba esa limitación.
- Russ Nelson implementó un lenguaje de extensión de emacs llamado MINT ( MINT I s N ot T RAC). Este lenguaje es utilizado por el editor FreeDOS FreeMACS .
- John Walker implementó una biblioteca de lenguaje de extensión integrable DIESEL [15] (Dumb Interpretively Evaluation String Expression Language ) originalmente para el procesamiento de macros de menú en AutoCAD . [ 16 ]
TRAC fue utilizado por FTP Software en su producto PC/TCP como lenguaje de programación del marcador del módem.
TRAC también se utilizó como interfaz en el renderizador Cray de Digital Productions para películas, incluida The Last Starfighter .
Programa de ejemplo
Este es un ejemplo de un programa simple que pregunta el nombre del usuario y sale, escrito en TRAC T64: [17]
#(DS,PROG.A,( #(PD:(¿CUAL ES TU NOMBRE? )) #(DS,NOMBRE,##(RS)) #(PD,( ADIÓS)) ))'
TRAC T84 utiliza una sintaxis ligeramente diferente y nombres diferentes para sus primitivos. El siguiente es un script para calcular números de Fibonacci, escrito en TRAC T84: [18]
:(s,fibo,( :(eso es,<1>, 1, 0,( :(eh,<1>, 2, 1,( :(aa, :(ri,fibo,:(como, <1>,1)),:(ri,fibo,:(como, <1>,2))) )) )) ))` :(mierda,fibo)'
Véase también
- TTM (lenguaje de programación) , un lenguaje de programación inspirado en TRAC
Referencias
- ^ "Especificación TRAC T2001". 5 de febrero de 2005. Archivado desde el original el 5 de febrero de 2005.
- ^ "Lenguaje de programación Trac 2001". SourceForge . 8 de marzo de 2013.
- ^ ab "TRAC – Un lenguaje de manipulación de cadenas hombre-máquina". HOPL: Enciclopedia histórica en línea de lenguajes de programación . Archivado desde el original el 13 de agosto de 2009.
- ^ ab "Coding Supply: todo lo que necesita un programador". Archivado desde el original el 8 de abril de 2001.
- ^ David Walden. "Macro recuerdos, 1964-2013". 2014.
- ^ Carol Loeb Mir. "Una comparación del manejo de cadenas en cuatro lenguajes de programación". 1972.
- ^ ab Mooers, CN ; Deutsch, LP (1965). "TRAC, un lenguaje de manejo de texto". Actas ACM '65 Actas de la 20.ª conferencia nacional de 1965 . págs. 229– 246. doi :10.1145/800197.806048. S2CID 40013081.
- ^ Kay, Alan (1969). El motor reactivo (PhD). Universidad de Utah.
- ^ Klaas van Schelven. "No digas 'homoicónico'".
- ^ McIlroy, MD , Extensiones de macroinstrucciones de lenguajes compiladores. CACM 3, n.º 4 (1960), 214–220.
- ^ Eastwood, DE y McIlroy, MD, Modificación del compilador de macros de SAP. Bell Telephone Laboratories Computation Center, 1959.
- ^ McIlroy, MD, Uso de macroinstrucciones de SAP para manipular expresiones simbólicas. Bell Telephone Laboratories Computation Center (1960)
- ^ Mooers, Calvin (22 de junio de 1993). "Entrevista de historia oral con Calvin N. Mooers y Charlotte D. Mooers". Instituto Charles Babbage . hdl :11299/107510.
- ^ "Diario del Dr. Dobb - Volumen 1". 1976.
- ^ "DIESEL - Lenguaje de expresión de cadenas evaluado interpretativamente tonto". www.fourmilab.ch .
- ^ "Componentes de software / Sistemas integrados". www.fourmilab.ch .
- ^ Manual para principiantes del lenguaje TRAC (1972) (archivado) por Calvin N. Mooers.
- ^ Página de información de TRAC (archivada), en The History of Computing Project, con un pequeño ejemplo de código y una foto de CM Mooers.
Enlaces externos
- La Fundación TRAC (archivada)
- TRAC, un lenguaje de descripción de procedimientos para la máquina de escribir reactiva en Comunicaciones de la ACM, Volumen 9, Número 3, marzo de 1966.
- Página de información del TRAC de Andrew Walker
- Entrada de TRAC en la Enciclopedia de lenguajes informáticos HOPL
- Un proyecto de implementación de TRAC en SourceForge .
- Entrevista de historia oral con Calvin N. Mooers y Charlotte D. Mooers en el Instituto Charles Babbage . La entrevista analiza la recuperación de información y la investigación sobre lenguajes de programación desde la Segunda Guerra Mundial hasta principios de los años 1990.