Tôi muốn biết những thuật toán nào họ sử dụng trong nội bộ và làm thế nào để thông minh quyết định một thuật toán cụ thể cho một nhiệm vụ cụ thể? Ví dụ: nếu sort có được một tệp đầu vào lớn, nó sẽ sử dụng các thuật toán khác nhau cho các kích thước dữ liệu khác nhau?
Đó là một câu hỏi thú vị (+1 cho điều đó). Tôi không biết câu trả lời là gì, nhưng nếu tôi là bạn, tôi sẽ xem mã nguồn của các tiện ích GNU điển hình để có ý tưởng về thuật toán của chúng.
Liệu grep có chuyển đổi thuật toán một cách thông minh trong khi tìm kiếm các tập dữ liệu khác nhau không?
Tôi không nghĩ vậy. Đừng trích dẫn tôi vì tôi thực sự không thể nói với bạn một cách chắc chắn 100%, nhưng tôi thực sự không nghĩ vậy. Triết lý của UNIX về mọi thứ là một thứ chỉ làm một thứ và một thứ duy nhất. Đó là lý do tại sao chúng tôi có một số phiên bản của grep ( grep
, egrep
, fgrep
).
Ngoài ra, ý tưởng là làm một việc và chỉ một việc duy nhất vào thời gian chạy. Các hành vi và thuật toán khác nhau có thể được cấu hình làm đối số dòng lệnh, để cùng một chương trình có thể hoạt động hơi khác nhau (và có thể được tối ưu hóa hơn một chút) giữa các lần chạy. Ví dụ tốt là wc
và diff
lệnh.
Tuy nhiên, việc điều chỉnh hành vi là dựa trên cấu hình (thông qua các đối số dòng cmd); họ không thay đổi / điều chỉnh hành vi trong thời gian chạy. Nó thường là một sự phức tạp không cần thiết đối với loại tạo tác mà các công cụ UNIX nhắm đến.
Độ phức tạp như vậy phù hợp hơn với các công cụ IMO phức tạp hơn, ít mục đích chung hơn.
grep
,egrep
hoặcfgrep
.