Haskell 中如何实现套接字、管道和文件 IO 等低级内容?我猜这些 IO 方法在 Haskell 中不是原生的,但 Haskell 很快封装了一些低级 C 库,对吗?
问问题
522 次
2 回答
9
套接字、管道和文件在内核中实现;要从用户空间程序中使用它们,您需要调用内核. 如果您将内核视为库,那么是的,I/O 必然由低级 C/汇编程序库实现。
实际上,诸如 GHC 之类的 Haskell 实现将使用 C 库的系统调用包装器。参见例如GHC RTS 评论,它描述了构成使用 GHC 编译的任何 Haskell 程序的核心的 C 位。如有疑问,请查阅源代码。
于 2012-10-15T12:33:49.550 回答
4
“快速换行”在这里并不总是最好的描述。
- 有时它被包裹在您包裹包裹的意义上(例如 wxcore 包裹 wx)。
这最接近您提到的“快速包装”,但我认为最好将其称为薄包装,因为我认为它并不像所有这些那么简单。 - 有时它被包裹起来,就像室内装潢包裹着椅子(例如 wxHaskell 包裹着 wx)。
我将其称为“围绕”构建。 - 有时它像汽车包裹引擎一样包裹起来(例如反应香蕉包裹 wx)。
我将其称为“使用”,如果您查看它,您会发现其中有一个引擎,但它看起来不像引擎,并且您使用它的方式非常不同。 - 有时它像货车包裹货车一样包裹(例如,haskell 的线程包裹操作系统线程)。我称之为“重新实现”。(Haskell 可以使用 OS 线程,但 Haskell 的“本机”线程要轻量级得多。)
您可能会争辩说,因为 GHC 的运行时系统是用 C 编写的,而您的操作系统可能是用 C 编写的,所以 Haskell 是 C 的包装器,但这就像说 Spyker C8 汽车包装了奥迪 V8 引擎。如果你把他们可爱的 C8 称为一个装有奥迪的盒子,世爵可能会不高兴。当您驾驶汽车时,您使用的是引擎,但不是直接使用。有些人喜欢调整他们的汽车,就像有些人喜欢超频他们的 CPU 一样,但除非你愿意,否则你不必这样做。有人说如果你想了解你的车,你应该知道引擎是如何工作的。
如果您可以原谅一级方程式的参考,主要是 Haskell 像 Torro Rosso 包裹法拉利一样“包裹”C,但有时它就像 Maclaren 包裹梅赛德斯一样。(在您称 Torro Rosso 慢之前,请将其与福特进行比较。)
于 2012-10-15T15:43:42.440 回答