Así que intenté investigar un poco sobre esto buscando manuales PDP-10 / TOPS-10 para averiguar cuál era el estado del arte antes de las tuberías. Encontré esto , pero TOPS-10 es notablemente difícil de google. Hay algunas buenas referencias sobre la invención de la tubería: una entrevista con McIlroy , sobre la historia y el impacto de UNIX .
Tienes que poner esto en contexto histórico. Pocas de las herramientas y comodidades modernas que damos por sentado existieron.
"Al principio, Thompson ni siquiera programó en el 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 completó un núcleo 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 momento punto, el sistema operativo era autosuficiente, los programas podían escribirse y probarse sin recurrir a la cinta de papel, y el desarrollo continuó en el PDP-7 ".
Un PDP-7 se ve así . 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 abordar el hardware directamente, 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 el teletipo" y "leer desde la 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 requerida en el entorno anterior a UNIX.
"Grep fue inventado para mí. Estaba haciendo un programa para leer texto en voz alta a través de un sintetizador de voz. A medida que inventaba las reglas fonéticas, buscaba en el diccionario Webster palabras en las que pudieran fallar. Por ejemplo, ¿cómo manejas el dígrafo? ui ', que se pronuncia de muchas maneras diferentes:' fruta ',' astucia ',' culpable ',' angustia ',' intuición ',' beguina ': dividiría el diccionario en pedazos que encajen en el limitado búfer y uso de ed un comando global para seleccionar una lista. Reduciría esta lista mediante escaneos repetidos con ed para ver cómo funciona cada regla propuesta ".
"El proceso fue tedioso y terriblemente despilfarrador, ya que el diccionario tuvo que dividirse (uno no podía permitirse dejar una copia dividida en línea). Luego ed copió cada parte en / tmp, la escaneó dos veces para cumplir 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 reconocimiento de expresiones regulares del editor y hacer un programa de una pasada para hacerlo. Dijo que sí. A la mañana siguiente encontré una nota en mi correo anunciando un programa llamado grep. Funcionó de maravilla. Cuando se le preguntó qué significaba ese nombre gracioso, Ken dijo que era obvio. Representaba el comando del editor que simulaba, g / re / p (impresión de expresión regular global) ".
Compare la primera parte de eso con el cat names.txt | awk '{print $2 ", " $1}' | sort | uniq | column -c 100
ejemplo. Si sus opciones son "construir una línea de comando" versus "escribir un programa específicamente para ese propósito, a mano, en ensamblador", entonces vale la pena construir la línea de comando. Incluso si lleva unas horas leer los manuales (en papel) para hacerlo. Luego puede escribirlo para referencia futura.