如何在Haskell中实现套接字,管道和文件IO等低级内容?我猜这些IO方法在Haskell中不是原生的,但是Haskell会快速包装一些低级C库,是不是?
答案 0 :(得分:9)
套接字,管道和文件在内核中实现;要在用户空间程序中使用它们,您需要call into the kernel。如果您将内核视为库,那么是的,I / O必须由低级C /汇编程序库实现。
实际上,像GHC这样的Haskell实现将使用C库的系统调用包装器。参见例如GHC RTS commentary,它描述构成用GHC编译的任何Haskell程序核心的C位。如有疑问,请咨询source code。
答案 1 :(得分:4)
“快速包装”并不总是这里最好的描述。
你可能会说,因为GHC的运行时系统是用C语言编写的,而你的操作系统可能是用C语言编写的,所以Haskell是C的包装,但这就像是说Spyker C8汽车包装了一台奥迪V8引擎。如果你把他们可爱的C8称为带有奥迪的盒子,世爵可能会感到不安。当你驾驶汽车时,你正在使用发动机,但不能直接使用发动机。有些人喜欢调整他们的汽车,就像有些人喜欢超频他们的CPU一样,但除非你愿意,否则你不需要。有些人说,如果你想了解你的车,你应该知道引擎是如何工作的。
如果你能原谅一级方程式的参考,主要是Haskell“包裹”C就像一辆Torro Rosso包裹一辆法拉利,但偶尔它就像一辆Maclaren包裹着一辆梅赛德斯。 (在你将Torro Rosso称为慢速之前,请将其与福特相提并论。)