【发布时间】:2012-09-07 01:18:19
【问题描述】:
我无法理解 Haskell (GHC) 如何编译程序,以及这些程序是如何运行的。
- GHC 是用 Haskell 编写的非平凡程序的典型示例。但是,GHC 的某些部分似乎不是用 Haskell 编写的,即运行时环境(C/C--)。这是为什么?性能原因? (我知道this site 和它的朋友们,但不太了解他们。)
- 谈到运行时环境:为什么编译语言需要一个?编译的程序不应该是机器代码而没有别的吗?据我了解,运行时环境有点类似于虚拟机或字节码解释器,它处理某种形式的元代码并在此基础上进行实际计算。那么:GHC 运行时到底做了什么,为什么首先需要它?
- 关于 FFI:如何处理 C 调用?最初,我认为使用 FFI 会生成一个可执行文件,其中 Haskell 和 C 编译在一起。但是,我多次读到 GHC 程序会从程序中调用 C 函数。这对于理解 FFI 在并行编程方面的问题尤其重要。那么:FFI 函数与普通 Haskell 函数有何不同?
【问题讨论】:
-
说到C,就算是用a runtime environment,也往往不是C本身写的。
-
“那么:GHC 运行时到底做了什么,为什么首先需要它?”例如内存管理和线程调度。
-
@C.A.McCann:您的链接显示
runtime library,与runtime environment不同。C/C++ runtime library与 Java 等使用的典型运行时环境完全不同。 -
@David 因为在 haskell 中并没有真正用于处理内存管理的工具,它允许您在上面的抽象层上使用类型值进行编程,而不是低得多的级别。
-
@C.A.McCann:Java 是对“运行时环境”的常用和习惯用法的引用。我认为我写的内容很清楚。
标签: haskell compilation runtime ghc