Một phép loại suy hợp lý sẽ là học lái xe.
Có tồn tại các quy tắc, giao thức để tuân theo và các tiêu chuẩn về chất lượng và độ bền ở cả xe và người lái.
- Xe có vô lăng.
- Một số có hộp số tay và một số là tự động.
- Bạn (ở hầu hết các quốc gia) lái xe ở bên phải đường.
- Biển báo hướng dẫn cách lái xe trên một con đường cụ thể.
- Các đơn vị đo lường (hầu hết) tính bằng km/h.
- Nhiên liệu lấy trong xe là một hỗn hợp và tiêu chuẩn nhất định.
- Người lái xe được đào tạo và phải tuân theo một tiêu chuẩn nhất định về lái xe.
Bây giờ, bạn có thể gợi ý (mặc dù tôi không phải là người có văn hóa và tự cho mình một số giấy phép thơ mộng) rằng các con đường ở châu Âu "tuân thủ các tiêu chuẩn" với nhau, chẳng hạn như nếu bạn học lái xe ở Tây Ban Nha, bạn có thể lái xe đến bất cứ đâu ở châu Âu, có khả năng là với cùng một chiếc ô tô hoặc ít nhất có thể là một chiếc ô tô khác, nơi tất cả các phụ tùng và gậy đều ở vị trí mà bạn có thể mong đợi.
Ví dụ, bạn có thể phát minh ra một cách lái xe hoàn toàn mới, có thể với các biển báo hoàn toàn khác, mà bạn lái xe ở hai bên đường, sử dụng cần điều khiển để lái xe và bạn đo khoảng cách của mình theo đơn vị khối trên giờ, tuy nhiên, chuyển sang hệ thống đó từ cái mà bạn đã từng sử dụng đòi hỏi cả một con thuyền nhiều nỗ lực hơn.
Loại POSIX phù hợp với một mô hình tương tự nhưng thay vì ô tô, đường xá, tốc độ và điểm đến, nó đề cập đến đầu vào, tin nhắn, chương trình, đầu ra và tính năng.
Nói chung, tốt nhất (với tư cách là lập trình viên và người dùng) là có sẵn các quy tắc nhất định quản lý các tính năng/chức năng và đầu vào/đầu ra, vì vậy bạn có thể viết một chương trình phù hợp với các tiêu chuẩn này và sau đó không cần nỗ lực nhiều để xây dựng lại chương trình tương tự để chạy trên đó một hệ thống khác, cũng có các đầu vào/đầu ra giống nhau.
Ví dụ, hệ thống Linux gọi đọc và viết tuân thủ posix. Chúng lấy một số đầu vào nhất định, theo một thứ tự nhất định và trả lại một số đầu ra nhất định với các quy tắc chi phối đầu ra có thể là gì hoặc đại diện trong những trường hợp nhất định.
Bạn có thể viết một chương trình trên Linux để mở hai tệp, sử dụng đọc
và viết
để truyền dữ liệu giữa chúng và đóng chúng lại. Sau đó, có khả năng xây dựng lại nó để chạy trên máy Mac mà không phải viết lại mã nguồn cơ bản.
Tuy nhiên, bạn cũng có thể thực hiện thao tác chính xác như vậy -- nhanh hơn nhiều -- bằng cách mở hai tệp, sử dụng Gửi file
lệnh gọi hệ thống để di chuyển dữ liệu giữa chúng và đóng lại (trừ khi bạn đang sử dụng các nhân rất cũ). Rắc rối ở đây là Gửi file
cuộc gọi hệ thống không phải Tuân thủ POSIX -- bạn không thể đảm bảo rằng cuộc gọi hệ thống như vậy tồn tại đúng cách trên hệ thống để thực hiện những gì bạn muốn.
Trên thực tế, nếu bạn xem trang Mac man để biết Gửi file
gọi, mặc dù được gọi là cùng một hoạt động, nhưng nó có một bộ tham số khác và cung cấp các tính năng khác nhau (đồng thời, về mặt kỹ thuật, bạn thực sự không thể sử dụng nó để sao chép từ tệp này sang tệp khác trên đĩa).
Do đó bạn sẽ không thể chạy chương trình bằng linux Gửi file
có thể dự đoán được trên một hệ thống ít nhất là nhanh chóng mà không cần thay đổi chương trình hoặc sử dụng một số lớp tương thích khác.
Đây là lý do tại sao mọi người quan tâm đến POSIX. Nó tránh phát minh lại bánh xe và có khả năng cho phép bạn chuyển sang một hệ điều hành 'tuân thủ posix' tổng thể tốt hơn hoặc ít nhất, tập trung vào việc cung cấp sản phẩm của bạn thay vì lo lắng về chất lượng vật liệu được sử dụng để xây dựng nền tảng.
Tôi đã bỏ qua phần lớn vấn đề về thời điểm POSIX không thực sự được tuân thủ hoàn toàn và hoàn toàn ngay cả bởi những người cho rằng hệ thống của họ tuân thủ POSIX, nhưng đó là ý chính của khái niệm.
Một điểm cuối cùng tôi muốn làm rõ. Nếu bạn viết mã theo mẫu số chung thấp nhất của một tiêu chuẩn (như POSIX), bạn sẽ bỏ lỡ cơ hội đạt được hiệu suất lớn mà lẽ ra bạn có thể tận dụng bằng cách sử dụng các tiện ích mở rộng không chuẩn trên hệ điều hành mà bạn đang viết mã.
Vì vậy, đây cũng là một lựa chọn thiết kế, nếu bạn đang hướng tới hiệu suất cao/thông lượng cao thì để đạt được điều đó, bạn có thể không viết mã để tuân thủ POSIX.
Mặc dù vậy, việc thuê một lập trình viên biết cách lập trình 'posixally' (biết cách mở
, đọc
, viết
pthread
và đóng lại
hoạt động trong POSIX) sẽ dễ dàng hơn nhiều so với việc thuê ai đó chỉ lập trình theo một số tiêu chuẩn kỳ lạ không được sử dụng.
Vì vậy, nó không chỉ là về hiệu suất (những chiếc xe), mà còn là khả năng thích ứng (sự thành thạo của họ trong việc điều khiển chiếc xe).