TECO ( / ˈ t iː k oʊ / [1] ), abreviatura de Text Editor & Corrector , [2] [3] [4] es un editor de texto orientado a caracteres y un lenguaje de programación , [5] [6] que fue desarrollado en 1962 para su uso en computadoras de Digital Equipment Corporation , y desde entonces ha estado disponible en PC y Unix . Dan Murphy desarrolló TECO mientras era estudiante en el Instituto Tecnológico de Massachusetts (MIT). [5]
Según Murphy, el acrónimo inicial era Tape Editor and Corrector porque " la cinta de papel perforada era el único medio para el almacenamiento de la fuente del programa en nuestro PDP-1. No había disco duro, disquete, cinta magnética (magtape) ni red". [5] Para cuando TECO estuvo disponible para uso general, el nombre se había convertido en "Text Editor and Corrector", [4] ya que incluso la versión PDP-1 para entonces admitía otros medios. [5] Posteriormente fue modificado por muchas otras personas [7] y es un antecesor directo de Emacs , que originalmente se implementó en macros TECO. [8] [9] [10]
TECO no es sólo un editor, sino también un lenguaje de programación interpretado para la manipulación de texto. Los programas arbitrarios (llamados "macros") para buscar y modificar texto le otorgan un gran poder. Sin embargo, a diferencia de las expresiones regulares , el lenguaje era imperativo , aunque algunas versiones tenían un operador "o" en la búsqueda de cadenas.
TECO no tiene realmente sintaxis ; cada carácter de un programa es un comando imperativo, enviado a su rutina correspondiente. Esa rutina puede leer más caracteres del flujo del programa (dando el efecto de argumentos de cadena), cambiar la posición del "contador de programa" (dando el efecto de estructuras de control) o insertar valores en una pila de valores (dando el efecto de paréntesis anidados). Pero no hay nada que impida operaciones como saltar al medio de un comentario, ya que no hay sintaxis ni análisis.
TECO ignora mayúsculas y minúsculas y espacios en blanco (excepto tabulación , que es un comando de inserción). [11]
Un ensayo satírico sobre programación informática, " Los verdaderos programadores no usan Pascal ", sugería que un juego común para los fanáticos de TECO era ingresar su nombre como una secuencia de comandos y luego tratar de averiguar qué sucedería. El mismo ensayo, al describir TECO, acuñó el acrónimo YAFIYGI , que significa "Lo pediste, lo conseguiste" (en contraste con WYSIWYG ).
El editor EMACS, iniciado originalmente por David A. Moon y Guy L. Steele Jr., se implementó en TECO como un conjunto de Editor MACroS. TECO se volvió más utilizado luego de una implementación de PDP-6 de Digital Equipment Corporation (DEC) desarrollada en el Proyecto MAC del MIT en 1964. Esta implementación mostraba continuamente el texto editado visualmente en una pantalla CRT y se usaba como un editor interactivo en línea. Las versiones posteriores de TECO fueron capaces de manejar el modo de pantalla completa en varias terminales de video DEC RS-232 como VT52 o VT100 .
TECO estaba disponible para varios sistemas operativos y computadoras, incluyendo la computadora PDP-1 , la PDP-8 (bajo OS/8), [12] [13] el Incompatible Timesharing System (ITS) en la PDP-6 y PDP-10 , y TOPS-10 y TOPS-20 en la PDP-10 . Una versión de TECO fue provista con todos los sistemas operativos DEC; la versión disponible para RT11 era capaz de manejar la pantalla gráfica GT40 mientras que la versión disponible para RSTS/E fue implementada como un sistema de tiempo de ejecución multiusuario y podía ser usada como el entorno operativo completo del usuario; el usuario nunca tuvo que salir realmente de TECO. La macro VTEDIT (Video Terminal Editor) de TECO fue usada comúnmente en sistemas RSTS/E y VAX con terminales capaces de control directo del cursor (por ejemplo VT52 y VT100 ) para proporcionar un editor visual de pantalla completa similar en función al Emacs desarrollado contemporáneamente .
TECO continúa incluido en OpenVMS por VSI y se invoca con el EDIT/TECO
comando. [14]
Un descendiente de la versión DEC distribuida para el PDP-10 todavía está disponible en Internet, junto con varias implementaciones parciales para el entorno MS-DOS / Microsoft Windows .
TECO fue desarrollado originalmente en el MIT [15] alrededor de 1963 por Daniel L. Murphy para su uso en dos computadoras PDP-1 , pertenecientes a diferentes departamentos, ambas alojadas en el Edificio 26 del MIT. [16] En estas máquinas, el proceso de desarrollo normal implicaba el uso de una Friden Flexowriter para preparar el código fuente fuera de línea en una tira continua de cinta de papel perforada. Los programadores de los grandes mainframes de IBM perforaban habitualmente su código fuente en tarjetas , utilizando perforadoras de teclas que imprimían caracteres de matriz de puntos legibles para humanos a lo largo de la parte superior de cada tarjeta al mismo tiempo que perforaban cada carácter legible por máquina. De este modo, los programadores de IBM podían leer, insertar, eliminar y mover líneas de código manipulando físicamente las tarjetas en la baraja. La cinta de papel perforada no ofrecía tales comodidades, lo que llevó al desarrollo de la edición en línea.
Uno de los primeros editores para la PDP-1 se llamó Expensive Typewriter . Escrito por Stephen D. Piner, era el editor orientado a líneas más rudimentario imaginable, carente incluso de capacidades de búsqueda y reemplazo. Su nombre fue elegido como una burla irónica a un editor anterior, bastante inflado, llamado Colossal Typewriter . Incluso en aquellos días, la edición en línea podía ahorrar tiempo en el ciclo de depuración. Otro programa escrito por los piratas informáticos de la PDP-1 fue Expensive Desk Calculator , en una línea similar.
El propósito original declarado de TECO era hacer un uso más eficiente del PDP-1. Como se preveía en el manual, en lugar de realizar una edición "costosa" sentándose en una consola , uno simplemente examinaría el texto defectuoso y prepararía una "cinta correctora" que describiera las operaciones de edición que se realizarían en el texto. Uno introduciría eficientemente la cinta fuente y la cinta correctora en el PDP-1 a través de su lector de alta velocidad (200 caracteres por segundo). Al ejecutar TECO, perforaría inmediatamente una cinta editada con su perforadora de alta velocidad (60 caracteres por segundo). Uno podría proceder inmediatamente a cargar y ejecutar el ensamblador, sin perder tiempo en la edición en línea.
Las sofisticadas operaciones de búsqueda de TECO se debían al hecho de que las impresiones de Flexowriter sin conexión no estaban numeradas por línea. Por lo tanto, las ubicaciones de edición debían especificarse por contexto en lugar de por número de línea. Las diversas construcciones condicionales y de bucle (que hicieron que TECO fuera Turing-completa ) se incluyeron para proporcionar suficiente poder descriptivo para la cinta correctora. La sintaxis concisa minimizó la cantidad de pulsaciones de teclas necesarias para preparar la cinta correctora.
La cinta correctora era un programa y requería depuración como cualquier otro programa. Pronto se hicieron evidentes los inconvenientes de incluso la búsqueda y reemplazo global más simple. En la práctica, la edición de TECO se realizaba en línea, tal como se había hecho con Expensive Typewriter (aunque TECO era sin duda un editor con más funciones que Expensive Typewriter, por lo que la edición era mucho más eficiente con TECO). La versión original de PDP-1 no tenía pantalla. La única forma de observar el estado del texto durante el proceso de edición era escribir comandos que hicieran que el texto (o partes del mismo) se escribieran en la consola de la máquina de escribir.
En 1964, se había implementado una versión especial de TECO ( TECO-6 ) en el PDP-6 del MIT. Esa versión admitía edición visual, utilizando una pantalla que mostraba el contenido del búfer de edición en tiempo real, actualizándose a medida que cambiaba. [17] Entre los creadores de TECO-6 se encontraban Richard Greenblatt y Stewart Nelson . [18]
En el MIT, el desarrollo de TECO continuó en el otoño de 1971. [ cita requerida ] Carl Mikkelsen había implementado un modo de edición en tiempo real basado libremente en los comandos de la consola gráfica TECO-6, pero que funcionaba con las pantallas de texto CRT Datapoint -3300 recién instaladas. [ 19 ] Sin embargo, la implementación del búfer TECO era terriblemente ineficiente para procesar funciones de inserción o eliminación de un solo carácter: la edición consumía el 100% del PDP-10. Con el apoyo de Richard Greenblatt , en el verano de 1972 Carl reimplementó el almacenamiento del búfer TECO y reformó las macros como código nativo PDP-10. [ cita requerida ] Como se ingresaba al modo de tiempo real escribiendo cntl+ R, esto se conocía como modo control-R. Al mismo tiempo, Rici Liknaitski agregó macros de tiempo de entrada ( + ), que operaban cuando se leía la cadena de comandos en lugar de cuando se ejecutaba. [ cita requerida ] Las macros de tiempo de lectura hicieron que los buffers de texto auxiliares de TECO, llamados registros Q, fueran más útiles. [ cita requerida ] Carl expandió el espacio de nombres de registros Q. Con macros de tiempo de lectura, un gran espacio de nombres de registros Q y operaciones de buffer eficientes, se preparó el escenario para vincular cada tecla a una macro. [20] Estas macros de edición evolucionaron hasta convertirse en Emacs . [21]cntl]
La implementación de VMS tiene una larga historia: comenzó como TECO-8, implementado en ensamblador PDP-8. Este código se tradujo al ensamblador PDP-11 para producir TECO-11. TECO-11 se utilizó en las primeras versiones de VAX/VMS en modo de compatibilidad con PDP-11. Más tarde se tradujo del ensamblador PDP-11 al ensamblador VAX para producir TECO32. Luego, TECO32 se convirtió con las utilidades de traducción binaria VEST y AEST para hacerlo compatible con OpenVMS en Alpha e Itanium respectivamente. [22] [23] [24]
El comando MUNG de OS/8 CCL invocaba a TECO para leer y ejecutar la macro TECO .TE especificada. Los parámetros de línea de comandos opcionales brindaban mayor adaptabilidad. [25]
Durante y poco después de los años de la era de las tarjetas perforadas , hubo programas fuente que habían comenzado como basados en tarjetas perforadas . Los comentarios eran a menudo una serie de líneas que incluían asteriscos marginales individuales y líneas completas de asteriscos en la parte superior e inferior. Una vez que las tarjetas se transferían en línea, era una tarea ardua realinear las estrellas marginales. TECO al rescate... [26] [27]
La oscuridad del lenguaje de programación TECO se describe en la siguiente cita de " Los verdaderos programadores no usan Pascal ", una carta de Ed Post a Datamation, julio de 1983:
Se ha observado que una secuencia de comandos TECO se parece más al ruido de una línea de transmisión que a un texto legible. Uno de los juegos más entretenidos para jugar con TECO es escribir tu nombre en una línea de comandos e intentar adivinar qué hace. Casi cualquier posible error de escritura mientras hablas con TECO probablemente destruirá tu programa o, peor aún, introducirá errores sutiles y misteriosos en una subrutina que alguna vez funcionó. [28]
Según Craig Finseth, autor de The Craft of Text Editing , [29] TECO ha sido descrito como un lenguaje de "sólo escritura", lo que implica que una vez que un programa está escrito en TECO, es extremadamente difícil comprender lo que hizo sin la documentación adecuada.
A pesar de su sintaxis, el lenguaje de comandos TECO era tremendamente potente y todavía existen clones disponibles para MS-DOS y Unix .
Los comandos TECO son caracteres (incluidos los caracteres de control) y el mensaje que aparece es un único asterisco:
*
La tecla Escape se muestra como un signo de dólar, al presionarla una vez delinea el final de un comando que requiere un argumento y al presionarla dos veces inicia la ejecución de los comandos ingresados:
*$$
Dado un archivo llamado hello.c con el siguiente contenido:
int main ( int argc , char ** argv ) { printf ( "Hola mundo! \n " ); return 0 ; }
Se podría usar la siguiente sesión TECO (teniendo en cuenta que el mensaje es "*" y "$" es cómo se repite ESC) para cambiar "Hola" por "Adiós":
*EBhello.c$$ Abrir archivo para lectura/escritura con copia de seguridad*P$$ Lee la primera página*SHello$0TT$$ Busca "Hola" e imprime la línea (puntero colocado después de la cadena buscada) printf("¡Hola mundo!\n"); La línea*-5DIGoodbye$0TT$$ Borra cinco caracteres antes del puntero (es decir, "Hola"), inserta "Adiós" e imprime la línea printf("¡Adiós mundo!\n"); La línea actualizada*EX$$ Copiar el resto del archivo y salir
Estos dos programas de ejemplo son una simple clasificación de intercambio del búfer de texto actual, basado en el primer carácter de cada línea, tomado de la Guía del usuario de PDP-11 TECO. [12] Se muestran una versión " goto " y una " estructurada ". El segundo programa originalmente tenía un error que impedía que el programa terminara y aquí se utiliza la versión corregida.
!START! j 0aua ! saltar al principio, cargar el primer carácter en el registro A !¡CONT! l 0aub! carga el primer carácter de la siguiente línea en el registro B !qa-qb"g xa k -l ga 1uz ' ! si A>B, cambia líneas y establece la bandera en el registro Z !qbua! ¡carga B en A!l z-."g -l @o/CONT/ ' ! retrocede si hay otra línea en el búfer !qz"g 0uz @o/START/ ' ! repita si se realizó un cambio en la última pasada !
<0uz! ¡Borrar bandera de repetición!j 0aua l ! ¡carga el primer carácter en el registro A!<0aub ! carga el primer carácter de la siguiente línea en B !qa-qb"g xa k -l ga -1uz ' ! si A>B, cambia líneas y establece la bandera !qbua! ¡carga B en A!l .-z;> ! retrocede si hay otra línea en el búfer !qz;> ! repita si se realizó un cambio en la última pasada !
Tee'koh
se construyó originalmente sobre TECO
<tab>text$, inserta el texto especificado precedido por una tabulación.
Editor y corrector de texto estándar de TECO para VAX, PDP-11, PDP-10 y PDP-8.
¿Qué lenguajes de programación eran compatibles con el PDP-8? ... TECO, el editor de texto, se incluyó en las distribuciones estándar de OS/8
Este artículo se basa en parte en el Jargon File , que es de dominio público.