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
Ổ 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.
"kết thúc nhanh" không phải lúc nào cũng là mô tả hay nhất tại đây.
- Đô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ả. - Đô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". - Đô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. - Đô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. Haskell IO (Chuỗi) và Chuỗi
- 2. Haskell Extensible IO Exceptions?
- 3. "Lazy IO" trong Haskell?
- 4. Mapping trên IO trong Haskell
- 5. Haskell ReaderT Env IO boilerplate
- 6. Luồng Haskell có hiệu ứng IO
- 7. Làm cách nào để bạn giới hạn hoạt động IO?
- 8. Haskell đơn nguyên: IO [đúp] tới [IO đúp]
- 9. Chuyển đổi [IO Int] thành IO [Int] trong Haskell?
- 10. Tại sao mẫu Haskell cho phép các hoạt động IO tùy ý trong quá trình biên dịch?
- 11. Memoizing IO tính toán trong Haskell
- 12. Haskell. Xử lý ngoại lệ không IO
- 13. Chức năng đa biến Haskell Với IO
- 14. Haskell: Bị mắc kẹt trong IO monad
- 15. Bàn điều khiển cấp thấp Nhập và chuyển hướng
- 16. Trình quản lý GHC IO hỗ trợ hoạt động IO nào?
- 17. Haskell IO: Không thể khớp với loại mong đợi `IO a0 'với loại thực tế
- 18. hoạt động gập haskell trên cây
- 19. Haskell: Các hoạt động boolean không nghiêm ngặt
- 20. Điều khiển camera cấp thấp iPhone iOS4?
- 21. Haskell: TVar hoạt động như thế nào?
- 22. HOpenGL hoạt động như thế nào đối với các luồng khác và TChans trong Haskell?
- 23. Scanr hoạt động như thế nào? Haskell
- 24. Lập trình Bluetooth cấp thấp trong C++
- 25. Thư viện mạng Java có độ trễ thấp và thấp?
- 26. Làm thế nào để lỗi khởi động xử lý khiếm thị và các môi trường cấp thấp khác
- 27. hành động IO Wrong đặt hàng bằng putStr và getline
- 28. Làm thế nào để concat hai (IO) Strings trong Haskell?
- 29. Trộn ByteString phân tích cú pháp và mạng IO trong Haskell
- 30. Làm cách nào để phân tích chuỗi IO trong Haskell?
Đ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
Có tệ không nếu tôi không hiểu những điểm tương đồng này? – Cubic
@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