Así que traté de investigar un poco sobre esto buscando manuales de PDP-10 / TOPS-10 para averiguar qué era lo último en tecnología antes de las tuberías. Encontré esto , pero TOPS-10 es notablemente difícil de buscar en Google. Hay algunas buenas referencias sobre la invención de la tubería: una entrevista con McIlroy , < a href="http://people.fas.harvard.edu/~lib113/reference/unix/unix2.html"> en la historia y el impacto de UNIX .
Tienes que poner esto en el contexto histórico. Pocas de las herramientas y conveniencias modernas que damos por sentadas existen.
"Al principio, Thompson ni siquiera programó en el propio PDP, sino que utilizó un conjunto de macros para el ensamblador GEMAP en una máquina GE-635". (29) Se generó una cinta de papel en el GE 635 y luego se probó en el PDP-7 hasta que, según Ritchie, se completaron "un núcleo de Unix primitivo, un editor, un ensamblador, un shell simple (intérprete de comandos) y algunas utilidades (como los comandos Unix rm, cat, cp) En este punto, el sistema operativo era autosuficiente, los programas se podían escribir y probar sin recurrir a la cinta de papel, y el desarrollo continuaba en el propio PDP-7 ".
Un PDP-7 se parece a esto . Tenga en cuenta la falta de una pantalla interactiva o disco duro. El "sistema de archivos" se almacenaría en la cinta magnética. Había hasta 64kB de memoria para programas y datos.
En ese entorno, los programadores tendían a dirigirse directamente al hardware, por ejemplo, emitiendo comandos para girar la cinta y procesar los caracteres uno a la vez, leídos directamente desde la interfaz de la cinta. UNIX proporcionó abstracciones sobre esto, de modo que en lugar de "leer desde teletipo" y "leer de cinta" siendo interfaces separadas, se combinaron en una sola, con la adición crucial de "leer desde la salida de otro programa sin almacenar una copia temporal en el disco". o cinta ".
Aquí está McIlroy sobre la invención de grep
. Creo que esto hace un buen trabajo al resumir la cantidad de trabajo requerido en el entorno pre-UNIX.
"Grep se inventó para mí. Estaba haciendo un programa para leer texto en voz alta a través de un sintetizador de voz. Como inventé las reglas fonéticas, buscaría palabras en el diccionario de Webster que pudieran fallar. Por ejemplo, ¿cómo se las arregla? el dígrafo 'ui', que se pronuncia de muchas maneras diferentes: 'fruta', 'guile', 'culpable', 'angustia', 'intuición', 'beguine'? Rompería el diccionario en piezas que encajan en el limitado búfer y use un comando global para seleccionar una lista. Reduciría esta lista con repetidas exploraciones con ed para ver cómo funcionaba cada regla propuesta ".
"El proceso fue tedioso y tremendamente inútil, ya que el diccionario tuvo que ser dividido (uno no podía permitirse dejar una copia dividida en la línea). Luego copió cada parte en / tmp, lo escaneó dos veces para lograr el El comando g, y finalmente lo tiró, lo que también lleva tiempo ".
"Una tarde le pregunté a Ken Thompson si podía sacar el reconocedor de expresiones regulares del editor y hacer un programa de una sola pasada para hacerlo. Dijo que sí. A la mañana siguiente encontré una nota en mi correo anunciando un programa llamado grep. Funcionó a la perfección. Cuando se le preguntó qué significaba ese nombre gracioso, Ken dijo que era obvio. Significó el comando del editor que simuló, g / re / p (impresión de expresión regular global) ".
Compara la primera parte de eso con el ejemplo cat names.txt | awk '{print $2 ", " $1}' | sort | uniq | column -c 100
. Si sus opciones son "construir una línea de comando" en lugar de "escribir un programa específicamente para el propósito, a mano, en ensamblador", entonces vale la pena construir la línea de comando. Incluso si toma unas pocas horas de leer los manuales (en papel) para hacerlo. Luego puede escribirlo para futuras referencias.