Haskell中实现的低层次的东西,如套接字,管道和文件IO如何实现?我猜这些IO方法在Haskell中不是本地的,但Haskell很快包装了一些低级C库,是不是?Haskell和低级IO操作
8
A
回答
9
套接字,管道和文件在内核中实现;要从用户空间程序使用它们,您需要call into the kernel。如果将内核视为一个库,那么是的,I/O必然由低级C /汇编程序库实现。
实际上,像GHC这样的Haskell实现将使用C库的系统调用的包装器。见例如其中描述了构成GHC编译的任何Haskell程序核心的C位。如有疑问,请查阅source code。
4
“快速换行”在这里并不总是最好的描述。
- 有时它被包裹在包裹宗地(例如wxcore包裹wx)的意义上。
这是最接近你提到的“快速包装”, ,但我认为它会更好地称为薄包装,因为 我不认为它是那么简单。 - 有时它被包裹像装饰包裹椅子(例如wxHaskell包裹wx)。
我会称之为“内置”。 - 有时它像汽车一样包裹发动机(例如反应性香蕉包裹wx)。
我会称之为“使用”,如果你看它,你可以看到里面有一个引擎,但它看起来不像引擎,而且你使用它的方式很不一样。 - 有时候它会像卡车一样包裹货物列车(例如haskell的线程包装OS线程)。 我会称之为“重新实现”。 (哈斯克尔可以使用操作系统线程, 但Haskell的“天然”的线程是更加轻便。)
你可能会说,因为GHC的运行时系统是用C语言编写的操作系统可能是用C写的,Haskell是一个包装在C周围,但这就像说一辆世爵C8车包装奥迪V8发动机。如果您将可爱的C8车型称为带有奥迪的盒子,世爵可能会很不高兴。当你驾驶你的汽车时,你使用的是引擎,但不是直接。有些人喜欢调整他们的车,就像有些人喜欢超频他们的CPU一样,但是除非你想要,否则你不需要。有些人说如果你想了解你的汽车,你应该知道发动机的工作原理。
如果你可以原谅F1的参考资料,主要是Haskell“包装”C,就像托罗罗索包装一辆法拉利,但偶尔它就像一辆麦克拉伦包裹梅赛德斯。 (在你称之为Torro Rosso缓慢之前,将其与福特进行比较。)
相关问题
- 1. Haskell中的IO操作的复现
- 2. 操作的优先级在Haskell
- 3. GAE中Appstats的低级操作
- 4. 哈斯克尔:捕低级IO异常
- 5. Haskell:执行IO操作并提取列表理解内的值
- 6. 在Haskell处理IO操作时遇到困难
- 7. Amazon EC2 IO操作
- 8. 处理IO操作
- 9. IO操作与Task.Run
- 10. Haskell monadic IO
- 11. Haskell ReplicateM IO
- 12. Haskell基本IO
- 13. Haskell,IO,monads,quickcheck
- 14. WCF异步操作+ IO操作
- 15. 使用IO()操作,但返回IO X
- 16. 嘲笑IO操作:getArgs和putStrLn
- 17. 内存缓冲区和IO操作
- 18. Haskell IO与数字
- 19. Haskell的IO递归
- 20. 递归IO在Haskell
- 21. Haskell的IO例如
- 22. haskell io流内存
- 23. Haskell比较IO UTCTime
- 24. haskell网络io hgetline
- 25. Java,tdd方法,IO操作
- 26. IO操作中的超时
- 27. Telnet基本IO操作
- 28. Apple Swift文件IO操作
- 29. 循环内IO操作
- 30. 管道中的IO操作?
这可以说是我今天看过的最有趣的东西。谢谢。 – MathematicalOrchid
如果我完全不理解这些类比,这是不好的? – Cubic
@Cubic比喻警察会逮捕你,是的。如果你能指出什么是不透明的,也许我可以解释我的意思是一种更好的方式,而你会因缓刑而逃脱。 – AndrewC