在Common Lisp中,程序通常以二进制文件的形式生成,其中捆绑了一个翻译器。StumpWM就是一个很好的例子。
如何对Haskell和OCaml做同样的事情呢?
不需要像Common Lisp那样提供调试器,目的是在不依赖于整个翻译器包的情况下进行扩展(需要GHC的xmonad )。
附注:我知道ocamlmktop,它工作得很好,除了我真的不明白为什么它需要"pervasives.cmi“并且没有和二进制文件捆绑在一起。所以,我能做的最好的事情就是使用/pervasives.cmi/将-I /路径/设置为/dir/。有什么方法可以覆盖它吗?
发布于 2010-12-19 19:42:52
对于( GHC ) Haskell来说,这是不可能的-你要么需要发布应用程序的二进制+GHC,这样你就可以通过GHC-API进行扩展,要么嵌入一种扩展语言。我不认为目前有任何“现成”的扩展语言可以嵌入到Haskell中,尽管HsLua可能已经很接近了。这是通向标准(C源代码) Lua的桥梁。上个月在Haskell-cafe上有一个关于用Haskell编写的扩展语言的帖子,我想答案是‘根本没有’。
http://www.haskell.org/pipermail/haskell-cafe/2010-November/085830.html
发布于 2010-12-21 16:47:54
在GHC中,有GHC-API,它允许您在程序中嵌入类似于ghci的解释器。它是一个非常低级且经常变化的库,因为它只是提供对GHC内部的访问。
然后是Hint,这是一个旨在将ghc-api封装在设计良好和更稳定的接口后面的库。
然而,我最近已经从使用这两个包中的任何一个切换到使用外部ghci。外部ghci过程通过标准输入/输出管道进行控制。这一变化使得它很容易与GHC 6.12.x和7.0.x保持兼容,而我们的ghc-api代码与GHC 7.x分离,并且提示也不能开箱即用。我不知道是否有新版本的提示可用,它适用于GHC7。
发布于 2010-12-19 21:48:15
对于Ocaml,你有没有尝试过使用findlib?请参见自定义Toploops一节。
https://stackoverflow.com/questions/4482530
复制相似问题