创建调用OCaml或Haskell的GUI桌面应用程序 - 这是一个傻瓜的差事吗?

Rob*_*lan 6 user-interface ocaml haskell

在Haskell和OCaml中,都可以从C程序调用语言.为广泛使用这种技术的Windows,Mac或Linux创建Native应用程序有多可行?

(我知道有像wxHaskell这样的GUI库,但是假设有人希望只用外语获得一部分应用程序逻辑.)

或者这是一个可怕的想法?

Don*_*art 5

嗯,主要风险是虽然设施存在,但它们没有经过良好测试 - 很多应用程序都没有这样做.从C调用Haskell应该不会有太多麻烦,看起来很简单:

http://www.haskell.org/haskellwiki/Calling_Haskell_from_C

我会说如果有一些令人信服的理由在前端使用C(例如你有一个遗留的应用程序)并且你真的需要一个Haskell库,或者出于其他原因想要使用Haskell,那么,是的,去吧.主要的风险就是没有很多人这样做,所以文档和示例少于调用其他方式.


Phy*_*hyx 3

我通过编译在 Haskell 外部调用的 haskell 共享库来广泛利用这一点。

通常涉及的任务是

  1. 创建适当的国外出口报关单
  2. 为您需要编组的任何数据类型创建可存储实例
  3. 创建 C 结构(或您正在使用的语言的结构)来读取此信息
  4. 因为我不想手动初始化 haskell RTS,所以我将初始化/终止代码添加到库本身。(windows 中的 dllmain 和 unix 上的 __attribute__ ((constructor)))
  5. 因为我不再需要它们中的任何一个,所以我创建了一个 .def 文件来隐藏所有闭包和 rts 函数,使其不出现在导出表(Windows)中
  6. 使用 GHC 将所有内容编译在一起

这些任务相当机械化且结构化,以至于您可以编写一些东西来自动化它们。事实上,我自己使用的是我创建的一个工具,它对您标记为导出的函数进行依赖项跟踪,它会将它们包装起来并为您编译共享库,同时为您提供 C/C++ 中的声明。

(不幸的是,这个工具还没有被破解,因为在我愿意这样做之前,我仍然需要修复和测试更多的东西)

工具可在此处获取http://hackage.haskell.org/package/Hs2lib-0.4.8