Próbowałem więc trochę zbadać to, szukając instrukcji PDP-10 / TOPS-10, aby dowiedzieć się, jaki jest stan techniki przed wprowadzeniem rur. Znalazłem to , ale TOPS-10 jest niezwykle trudny do znalezienia w Google. Istnieje kilka dobrych referencji na temat wynalezienia potoku: wywiad z McIlroy , historia i wpływ UNIX .
Musisz umieścić to w kontekście historycznym. Istniało niewiele nowoczesnych narzędzi i udogodnień, które uważamy za coś oczywistego.
„Na początku Thompson nawet nie programował na samym PDP, ale zamiast tego używał zestawu makr dla asemblera GEMAP na maszynie GE-635.” (29) Taśma papierowa została wygenerowana na GE 635, a następnie przetestowana na PDP-7 do momentu, gdy według Ritchie „pierwotne jądro Uniksa, edytor, asembler, prosta powłoka (interpreter poleceń) i kilka narzędzi (takich jak polecenia Unix rm, cat, cp) zostały ukończone. W tym momencie punkt, system operacyjny był samonośny, programy mogły być pisane i testowane bez uciekania się do taśmy papierowej, a rozwój samego PDP-7 był kontynuowany. ”
PDP-7 wygląda tak . Zwróć uwagę na brak interaktywnego wyświetlacza lub dysku twardego. „System plików” byłby przechowywany na taśmie magnetycznej. Pamięć programów i danych zawierała do 64 KB.
W tym środowisku programiści zwykle zwracali się bezpośrednio do sprzętu, na przykład wydając polecenia, aby podkręcić taśmę i przetwarzać znaki jeden po drugim odczytywane bezpośrednio z interfejsu taśmy. UNIX zapewnił abstrakcje na ten temat, aby zamiast „czytać z teletype” i „czytać z taśmy” jako oddzielne interfejsy, zostały one połączone w jeden, z kluczowym dodaniem potoku „odczyt z wyjścia innego programu bez przechowywania tymczasowej kopii na dysku” lub taśma ”.
Oto McIlroy na temat wynalazku grep
. Myślę, że dobrze to podsumowuje ilość pracy wymaganej w środowisku starszym niż UNIX.
„Grep został dla mnie wymyślony. Tworzyłem program do odczytywania tekstu na głos za pomocą syntezatora mowy. Gdy wymyśliłem reguły fonetyczne, sprawdzałem w słowniku Webstera słowa, na których mogą się nie powieść. Na przykład, jak sobie radzisz z digrafem” ui ”, które wymawia się na wiele różnych sposobów:„ owoc ”,„ podstęp ”,„ winny ”,„ udręka ”,„ intuicja ”,„ beguine ”? Rozbiłbym słownik na części, które mieszczą się w ograniczonym buforze i użyciu Eda globalne polecenie, aby wybrać listę. Zmniejszę tę listę, powtarzając skanowanie za pomocą ed, aby zobaczyć, jak działa każda proponowana reguła. ”
„Proces był żmudny i strasznie marnotrawny, ponieważ słownik musiał zostać podzielony (nie było stać na pozostawienie podzielonej kopii w linii). Następnie ed skopiował każdą część do / tmp, przeskanował ją dwukrotnie, aby wykonać polecenie g, i w końcu go wyrzuciłem, co również wymaga czasu. ”
„Pewnego popołudnia zapytałem Kena Thompsona, czy mógłby wyciągnąć z edytora funkcję rozpoznawania wyrażeń regularnych i zrobić jednoprzebiegowy program. Powiedział tak. Następnego ranka znalazłem notatkę w poczcie z ogłoszeniem programu o nazwie grep. Działało to jak urok. Zapytany, co oznacza to śmieszne imię, Ken powiedział, że to oczywiste. Oznaczało to polecenie edytora, które symulował, g / re / p (globalny wydruk wyrażeń regularnych).
Porównaj pierwszą część tego cat names.txt | awk '{print $2 ", " $1}' | sort | uniq | column -c 100
przykładu. Jeśli twoimi opcjami jest „budowanie linii poleceń” kontra „napisz program specjalnie do tego celu, ręcznie, w asemblerze”, to warto zbudować linię poleceń. Nawet jeśli zajmie to kilka godzin przeczytanie instrukcji (papierowych). Następnie możesz zapisać go do wykorzystania w przyszłości.