Vì vậy, tôi đã cố gắng thực hiện một chút nghiên cứu về điều này bằng cách tìm kiếm các hướng dẫn sử dụng PDP-10 / TOPS-10 để tìm hiểu trạng thái của nghệ thuật trước các đường ống. Tôi đã tìm thấy điều này , nhưng TOPS-10 rất khó để google. Có một vài tài liệu tham khảo tốt về phát minh ra đường ống: một cuộc phỏng vấn với McIlroy , về lịch sử và tác động của UNIX .
Bạn phải đặt điều này vào bối cảnh lịch sử. Rất ít các công cụ hiện đại và tiện lợi mà chúng ta cho là đã tồn tại.
"Lúc đầu, Thompson thậm chí không lập trình trên PDP mà thay vào đó sử dụng một bộ macro cho trình biên dịch GEMAP trên máy GE-635." (29) Một băng giấy được tạo ra trên GE 635 và sau đó được thử nghiệm trên PDP-7 cho đến khi, theo Ritchie, "một hạt nhân Unix nguyên thủy, một trình soạn thảo, một trình biên dịch, một trình bao đơn giản (trình thông dịch lệnh) và một vài tiện ích (như các lệnh rm, cat, cp) của Unix đã được hoàn thành. điểm, hệ điều hành là tự hỗ trợ, các chương trình có thể được viết và kiểm tra mà không cần dùng đến băng giấy, và sự phát triển vẫn tiếp tục trên chính PDP-7. "
Một PDP-7 trông như thế này . Lưu ý thiếu màn hình tương tác hoặc đĩa cứng. "Hệ thống tập tin" sẽ được lưu trữ trên băng từ. Có tới 64kB bộ nhớ cho các chương trình và dữ liệu.
Trong môi trường đó, các lập trình viên có xu hướng giải quyết trực tiếp phần cứng, chẳng hạn như bằng cách phát lệnh để quay băng và xử lý từng ký tự một lần đọc trực tiếp từ giao diện băng. UNIX cung cấp các khái niệm trừu tượng về điều này, thay vì "đọc từ teletype" và "đọc từ băng" là các giao diện riêng biệt được kết hợp thành một, với sự bổ sung quan trọng của "đọc từ đầu ra của chương trình khác mà không lưu trữ một bản sao tạm thời trên đĩa hoặc băng ".
Đây là McIlroy về phát minh của grep
. Tôi nghĩ rằng đây là một công việc tốt để tổng hợp số lượng công việc cần thiết trong môi trường tiền UNIX.
"Grep được phát minh cho tôi. Tôi đang tạo ra một chương trình đọc to văn bản thông qua bộ tổng hợp giọng nói. Khi tôi phát minh ra các quy tắc ngữ âm, tôi sẽ kiểm tra từ điển của Webster để biết các từ mà chúng có thể thất bại. Ví dụ, làm thế nào để bạn đối phó với máy đào ' ui ', được phát âm theo nhiều cách khác nhau:' trái cây ',' guile ',' guilty ',' anguish ',' intuit ',' beguine '? Tôi sẽ chia từ điển thành các phần phù hợp với bộ đệm hạn chế của ed và sử dụng một lệnh toàn cầu để chọn một danh sách. Tôi sẽ thu nhỏ danh sách này bằng cách quét liên tục với ed để xem mỗi quy tắc được đề xuất hoạt động như thế nào. "
"Quá trình này rất tẻ nhạt và lãng phí khủng khiếp, vì từ điển phải được tách ra (người ta không thể để lại một bản sao tách trên dòng). Sau đó, ed sao chép từng phần vào / tmp, quét hai lần để thực hiện lệnh g, và cuối cùng đã ném nó đi, điều này cũng mất thời gian. "
"Một buổi chiều, tôi hỏi Ken Thompson rằng anh ta có thể nhấc bộ nhận dạng biểu thức chính quy ra khỏi trình chỉnh sửa và tạo một chương trình một lượt để làm việc đó không. Anh ta nói có. Sáng hôm sau tôi thấy một ghi chú trong thư thông báo một chương trình có tên grep. Nó hoạt động như một bùa mê. Khi được hỏi cái tên ngộ nghĩnh đó có nghĩa là gì, Ken nói điều đó là hiển nhiên. Nó đại diện cho lệnh biên tập mà nó mô phỏng, g / re / p (in biểu thức chính quy toàn cầu). "
So sánh phần đầu tiên với cat names.txt | awk '{print $2 ", " $1}' | sort | uniq | column -c 100
ví dụ. Nếu các tùy chọn của bạn là "xây dựng một dòng lệnh" so với "viết một chương trình cụ thể cho mục đích, bằng tay, trong trình biên dịch chương trình", thì đó là giá trị xây dựng dòng lệnh. Ngay cả khi phải mất vài giờ đọc hướng dẫn (giấy) để làm điều đó. Sau đó bạn có thể viết nó ra để tham khảo trong tương lai.