2012-10-15 27 views
8

Các công cụ cấp thấp như ổ cắm, đường ống và tệp IO được triển khai trong Haskell như thế nào? Tôi đoán các phương pháp IO không phải là bản địa trong Haskell nhưng Haskell nhanh chóng kết thúc tốt đẹp một số thư viện C cấp thấp, phải không?Các hoạt động IO cấp thấp và Haskell

Trả lời

9

Ổ cắm, đường ống và tệp được thực hiện trong hạt nhân; để sử dụng chúng từ chương trình không gian người dùng, bạn cần phải call into the kernel. Nếu bạn coi hạt nhân là một thư viện, thì có, I/O nhất thiết phải được thực hiện bởi một thư viện C/assembler mức thấp.

Trong thực tế, việc triển khai Haskell như GHC sẽ sử dụng trình bao bọc của thư viện C xung quanh các cuộc gọi hệ thống. Xem ví dụ GHC RTS commentary, mô tả các bit của C tạo nên lõi của bất kỳ chương trình Haskell nào được biên dịch bằng GHC. Khi nghi ngờ, hãy tham khảo source code.

4

"kết thúc nhanh" không phải lúc nào cũng là mô tả hay nhất tại đây.

  1. Đôi khi nó được bọc theo nghĩa là bạn quấn một bưu kiện (ví dụ: wxcore kết thúc tốt đẹp wx).
    Điều này gần nhất với "gói nhanh" bạn đã đề cập, nhưng tôi nghĩ rằng nó sẽ tốt hơn được gọi là gói mỏng vì Tôi không nghĩ nó đơn giản như tất cả.
  2. Đôi khi nó được bọc như bọc vải bọc ghế (ví dụ wxHaskell kết thúc tốt đẹp wx).
    Tôi gọi đây là "được xây dựng xung quanh".
  3. Đôi khi nó được bọc như một chiếc xe kết thúc tốt đẹp một động cơ (ví dụ như chuối phản ứng kết thúc tốt đẹp wx).
    Tôi sẽ gọi đây là "sử dụng", và nếu bạn nhìn vào nó, bạn có thể thấy có một động cơ trong đó, nhưng nó không giống như một động cơ, và bạn sử dụng nó rất khác nhau.
  4. Đôi khi nó được bọc như xe tải bọc một tàu chở hàng (ví dụ như chủ đề haskell bọc chủ đề hệ điều hành). Tôi sẽ gọi điều này là "reimplemented". (Haskell có thể sử dụng đề hệ điều hành, nhưng Haskell của chủ đề 'bản địa' còn lâu mới nhẹ hơn.)

Bạn có thể tranh luận rằng bởi vì hệ thống runtime GHC được viết bằng C và hệ điều hành của bạn có lẽ viết bằng C, Haskell là một wrapper xung quanh C, nhưng đó là giống như nói một chiếc xe Spyker C8 kết thúc tốt đẹp một động cơ Audi V8. Spyker có thể khó chịu nếu bạn gọi C8 đáng yêu của họ là một chiếc hộp với chiếc Audi trong đó. Khi bạn đang lái xe, bạn đang sử dụng động cơ, nhưng không phải trực tiếp. Một số người thích tinh chỉnh xe hơi của họ, giống như một số người thích ép xung CPU của họ, nhưng bạn không phải trừ khi bạn muốn. Một số người nói rằng bạn nên biết làm thế nào động cơ hoạt động nếu bạn muốn hiểu chiếc xe của bạn.

Nếu bạn có thể tha thứ cho tài liệu tham khảo Công thức 1, chủ yếu là Haskell "kết thúc tốt đẹp" C như Torro Rosso kết thúc tốt đẹp một chiếc Ferrari, nhưng đôi khi nó giống như một chiếc Maclaren bọc một chiếc Mercedes. (Trước khi bạn gọi một Torro Rosso chậm, so sánh nó với một chiếc Ford.)

+1

Điều này được cho là điều thú vị nhất tôi đã đọc ngày hôm nay. Cảm ơn bạn. – MathematicalOrchid

+0

Có tệ không nếu tôi không hiểu những điểm tương đồng này? – Cubic

+1

@Cubic Cảnh sát tương tự sẽ bắt giữ bạn, vâng. Nếu bạn có thể xác định những gì mờ đục có lẽ tôi có thể giải thích những gì tôi có nghĩa là một cách tốt hơn, và bạn sẽ nhận được ngay với một câu bị đình chỉ. – AndrewC

Các vấn đề liên quan