Các chương trình Unix tuyệt vời nhất

Tác giả của bài báo, Douglas McIlroy, là một nhà toán học, kỹ sư và lập trình viên người Mỹ. Ông nổi tiếng với việc phát triển đường ống trong hệ điều hành Unix, các nguyên tắc lập trình hướng thành phần và một số tiện ích ban đầu: đánh vần, tìm khác biệt, sắp xếp, nối, nói, tr.

Đôi khi bạn bắt gặp những chương trình thực sự tuyệt vời. Sau khi lục lọi trí nhớ của mình, tôi đã biên soạn một danh sách các viên ngọc thực sự của Unix trong nhiều năm. Về cơ bản, đây là những chương trình khá hiếm và không quá cần thiết. Nhưng điều làm cho chúng nổi bật là sự độc đáo của chúng. Tôi thậm chí có thể tưởng tượng rằng chính tôi đã nghĩ ra ý tưởng về bất kỳ ai trong số họ.

Chia sẻ chương trình nào bạn cũng rất ấn tượng?

PDP-7 Unix

Để bắt đầu, chính hệ thống PDP-7 Unix. Sự đơn giản và sức mạnh của nó đã khiến tôi chuyển từ một máy tính lớn mạnh mẽ sang một cỗ máy nhỏ bé. Đó là hệ thống tệp phân cấp tinh túy, trình bao riêng biệt và kiểm soát quy trình cấp người dùng mà Multics trên máy tính lớn đã không thể đạt được sau hàng trăm năm phát triển. Những thiếu sót của Unix (chẳng hạn như cấu trúc bản ghi của hệ thống tệp) cũng mang tính hướng dẫn và giải phóng như những đổi mới của nó (chẳng hạn như chuyển hướng shell I/O).

dc

Thư viện toán học máy tính để bàn có độ chính xác thay đổi của Robert Morris đã sử dụng phân tích lỗi nghịch đảo để xác định độ chính xác cần thiết ở mỗi bước nhằm đạt được độ chính xác của kết quả do người dùng chỉ định. Tại Hội nghị Kỹ thuật Phần mềm NATO năm 1968, trong báo cáo của tôi về các thành phần phần mềm, tôi đã đề xuất các quy trình tham khảo có thể tạo ra bất kỳ độ chính xác mong muốn nào, nhưng tôi không biết cách áp dụng chúng vào thực tế. dc vẫn là chương trình duy nhất tôi biết có thể làm được điều này.

typo

Typo sắp xếp các từ trong văn bản theo mức độ tương đồng của chúng với phần còn lại của văn bản. Lỗi chính tả như 'hte' có xu hướng ở cuối danh sách. Robert Morris tự hào nói rằng chương trình sẽ hoạt động tốt như nhau đối với bất kỳ ngôn ngữ nào. Mặc dù lỗi đánh máy không giúp bạn tìm ra lỗi ngữ âm, nhưng đó là một lợi ích thực sự cho tất cả những người sắp chữ và nó đã làm rất nhiều điều tốt trước khi trình kiểm tra chính tả từ điển ít thú vị hơn nhưng chính xác hơn xuất hiện.

Typo cũng bất ngờ ở bên trong cũng như ở bên ngoài. Thuật toán đo độ tương tự dựa trên tần suất xuất hiện của bát quái, được tính trong một mảng 26×26×26. Bộ nhớ nhỏ hầu như không có đủ không gian cho bộ đếm một byte, do đó, một kế hoạch đã được triển khai để nén số lượng lớn thành bộ đếm nhỏ. Để tránh tràn, bộ đếm được cập nhật trên cơ sở xác suất, duy trì ước tính logarit của giá trị bộ đếm.

tương đương

Với sự ra đời của sắp chữ ảnh, việc in ký hiệu toán học cổ điển trở nên khả thi, nhưng vô cùng tẻ nhạt. Lorinda Cherry quyết định phát triển một ngôn ngữ mô tả cấp độ cao hơn, và ngay sau đó Brian Kernigan đã tham gia cùng cô. Bước đi tuyệt vời của họ là đưa truyền thống truyền miệng vào văn bản, vì vậy eqn rất dễ học. Bộ tiền xử lý ngôn ngữ biểu thức toán học đầu tiên thuộc loại này, eqn đã không được cải thiện nhiều kể từ đó.

cấu trúc

Brenda Baker bắt đầu phát triển bộ chuyển đổi Fortan-to-Ratfor của mình theo lời khuyên của sếp cô ấy, tôi. Tôi nghĩ rằng điều này có thể dẫn đến một sự sắp xếp lại đặc biệt của văn bản gốc. Nó sẽ không có số câu lệnh, nhưng nếu không thì sẽ không dễ đọc hơn mã Fortran có cấu trúc tốt. Brenda đã chứng minh tôi sai. Cô phát hiện ra rằng mọi chương trình của Fortran đều có dạng cấu trúc chuẩn. Các lập trình viên thích dạng chuẩn hơn là những gì họ viết ban đầu.

pascal

Chẩn đoán cú pháp trong trình biên dịch do nhóm của Sue Graham tại Berkeley tạo ra là công cụ hữu ích nhất mà tôi từng thấy—và nó được thực hiện tự động. Khi có lỗi cú pháp, trình biên dịch sẽ nhắc bạn chèn mã thông báo để tiếp tục phân tích cú pháp. Không có nỗ lực để giải thích những gì là sai. Với trình biên dịch này, tôi đã học Pascal trong một buổi tối mà không có tài liệu hướng dẫn nào.

các bộ phận

Ẩn bên trong mô-đun WWB (Writer's Workbench) parts Lorinda Cherry xác định các phần của bài phát biểu cho các từ trong một văn bản tiếng Anh chỉ dựa trên một cuốn từ điển nhỏ, các quy tắc chính tả và ngữ pháp. Dựa trên chú thích này, chương trình WWB hiển thị các chỉ số về phong cách của văn bản, chẳng hạn như mức độ phổ biến của tính từ, mệnh đề phụ và câu phức. Khi Lorinda được phỏng vấn trên NBC's Today và nói về việc kiểm tra ngữ pháp sáng tạo trong các văn bản WWB, đó là lần đầu tiên đề cập đến Unix trên truyền hình.

ví dụ

Al Aho mong đợi trình phân giải biểu thức chính quy xác định của mình sẽ vượt qua trình phân giải không xác định cổ điển của Ken. Thật không may, cái sau đã hoàn thành việc chuyển qua các biểu thức chính quy phức tạp, trong khi egrep xây dựng tự động hóa xác định của riêng mình. Để vẫn giành chiến thắng trong cuộc đua này, Al Aho đã vượt qua lời nguyền về sự tăng trưởng theo cấp số nhân của bảng trạng thái của máy tự động bằng cách phát minh ra một cách để xây dựng nhanh chóng chỉ những mục trong bảng thực sự được truy cập trong quá trình nhận dạng.

cua

Siêu chương trình hấp dẫn của Luca Cardelli dành cho hệ thống cửa sổ Blit đã giải phóng những con cua ảo lang thang khắp không gian màn hình trống, ngày càng cắn đứt các cạnh của cửa sổ đang hoạt động.

Vài suy nghĩ chung

Mặc dù không thể nhìn thấy từ bên ngoài, nhưng lý thuyết và thuật toán đã đóng một vai trò quyết định trong việc tạo ra hầu hết các chương trình này: lỗi đánh máy, dc, struct, pascal, egrep. Trên thực tế, chính ứng dụng bất thường của lý thuyết mới là điều đáng ngạc nhiên nhất.

Gần một nửa danh sách - pascal, struct, parts, eqn - ban đầu được viết bởi phụ nữ, vượt xa số phụ nữ trong khoa học máy tính.

Douglas McIlroy
Tháng 3, 2020


Nguồn: www.habr.com

Thêm một lời nhận xét