# TRAC (lenguaje de programación)

TRAC (Text Reckoning And Compiling) es un lenguaje de programación desarrollado entre 1959 a 1964 por Calvin Mooers e implementado en un PDP-10 en 1964 por L. Peter Deutsch. Fue uno de los tres "primeros lenguajes" recomendados por Ted Nelson en Computer Lib. TRAC T64 se usó hasta al menos 1984, cuando Mooers lo actualizó a TRAC T84.
TRAC es un lenguaje puramente basado en texto, un tipo de lenguaje macro. A diferencia de los macro lenguajes 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. Tiene operadores de entrada y salida explícitos, a diferencia de la E/S implícita típica en el nivel macro más externo, lo que lo hace simultáneamente más simple y más versátil que los lenguajes macro más antiguos.
También difiere de los macro lenguajes tradicionales en que los números TRAC son cadenas de dígitos, con aritmética de enteros (sin límites específicos en valores máximos) proporcionados a través de funciones integradas ("primitivas"). Podría decirse que un aspecto de su integridad es que el concepto de error se limita a eventos como la falta de espacio de archivos y la solicitud de expansión de una cadena más larga que el almacenamiento de trabajo del intérprete; lo que en muchos idiomas se describiría como operaciones ilegales se tratan en TRAC definiendo un resultado (a menudo una cadena nula) para cada combinación posible de cadenas de argumentos de una función.
TRAC es un lenguaje de procesamiento de texto, también llamado lenguaje de procesamiento de cadenas.
El énfasis en las cadenas como cadenas 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 de auto-modificación 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.
TRAC es, como APL o LISP, un lenguaje orientado a la expresión (en contraste con los lenguajes orientados a procedimientos más típicos), 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.
TRAC es homoicónico.
TRAC tiene en común con LISP una sintaxis que generalmente implica la presencia de muchos niveles de paréntesis anidados.
Mooers registró el nombre TRAC 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, presentó una demanda por infracción de propiedad intelectual contra DEC, alegando que un contrato para entregar una mini computadora con un intérprete de TRAC violaba sus derechos. "El primer número del Dr. Dobb's Journal, una de las primeras publicaciones en el campo de la computadora personal, tiene un editorial vitriólico contra Mooers y su rapacidad al tratar de cobrar a las personas por su lenguaje informático". Sin embargo, la marca registrada (# 72301892) expiró en 1992. Desde entonces, el nombre se ha utilizado varias veces para proyectos de tecnología de la información no relacionados, incluido un sistema actual de gestión de proyectos de código abierto llamado Trac.
Ha habido varios lenguajes inspirados en TRAC. Para evitar problemas con Mooers, cambiaron el nombre de las primitivas y/o utilizaron diferentes metacaracteres. En el caso de SAM76, se agregaron primitivas, de acuerdo con Claude Kagan, "porque TRAC es una charla infantil". En el caso de MINT, se agregaron primitivas para dar acceso a una sofisticada maquinaria de edición de texto.
* Una deficiencia percibida de TRAC fue la falta de extensibilidad total: algunas funciones primitivas de TRAC son sensibles a la distinción entre un argumento nulo (carácter cero) y uno inexistente (no delimitado), pero más allá de su último argumento no nulo, un usuario -defined function no puede hacer la distinción. SAM76 era un lenguaje similar al TRAC que eliminó esa limitación.
* Russ Nelson implementó un lenguaje de extensión emacs llamado MINT (M INT I s N ot T RAC). Este lenguaje es utilizado por el editor FreeDOS FreeMACS .
TRAC fue utilizado por el software FTP en su producto PC/TCP como lenguaje de scripting del marcador de módem.
TRAC también se usó como front end en el renderizador de Digital Productions Cray para películas, incluido The Last Starfighter.