更具体地说,我的问题是:在编写OCaml软件的GUI方面,最有效(且易于掌握)的方法是什么?有人接触过OCaml本身的简单有效的GUI模块,或者找到了一种有效的语言或自由软件包,可以用它来完成这项工作,并与OCaml良好地通信/协作吗?
我已经用OCaml编写了一个解释器,因此我的词法分析器、语法分析器、核心解释器函数等都是OCaml模块。目前,我有一个命令行解决方案(一个“main.ml”),允许用户通过在命令行中输入表达式并接收打印的终端输出来与解释器交互,显示已解析和简化的表达式等。然而,这个命令行解决方案只是为了测试目的。我希望用户通过GUI进行交互,它可以很简单(Java框架是从很久以前开始考虑的),但需要以某种方式与我编码的OCaml模块进行接口。到目前为止,我已经找到了一个OCaml库:http://caml.inria.fr/pub/docs/manual-ocaml-4.00/manual042.html。有人知道这是否有效和有用吗?(我认为我已经听到关于这个库的负面评论)
如果我选择用更适合的语言编写GUI,那么软件交互会是:用适合的语言编写GUI(例如C++,Python等),然后将OCaml编写的解释器编译成可执行文件,然后以某种方式将GUI连接到可执行文件。我不感兴趣的是一些松散连接或奇怪的解决方案,比如管道(我一直在想操作系统设计中所涉及的进程间通信)或套接字(我倾向于将这些用于网络编程),如果不是OCaml本身,我想象一定有一种方法可以将我的OCaml编码的解释器“嵌入”到另一种语言的GUI代码中。有什么想法、指导或建议吗?
编辑:如果我能在类似Linux RedHat的操作系统上得到GUI,我会很高兴。如果我能让GUI在Windows上工作,那就太好了,但至少我要在Linux上运行。
编辑2:刚刚发现这个,有人对"OCaml-Java"有什么看法吗?http://ocamljava.x9c.fr/它听起来相当有趣,因为它具有"...运行已经使用ocamlc编译的Objective Caml源代码的能力;其次,将Objective Caml源代码编译成可执行的jar文件的能力。"我的担忧是,从未让我觉得Java是获得快速但有用的GUI的最佳方式...
当前解决方案:在检查了下面@Jeffrey Scofield提供的各种解决方案后,我选择目前深入研究LablGtk(这将允许我保持在OCaml中)。对于那些查看此帖子的人来说,下一个有前途的选择是研究与C的外语接口,因为C和OCaml已经有了一些关系。似乎有办法在OCaml中调用C代码,在C中调用OCaml(尽管这可能非常困难,因为您最终将用相当复杂的包装器函数包装OCaml函数调用,并且这些函数将更具体地针对从OCaml内部调用的函数类型-->即您将不得不处理每个OCaml函数及其参数在C中的“映射”)。请查看http://www.mega-nerd.com/erikd/Blog/CodeHacking/Ocaml/calling_ocaml.html获取更多信息。最初,OCaml-Java似乎是一个很好的想法,因为我熟悉Java GUI编程,但是两种语言之间的交互不像C和OCaml那样直接,而且这方面的文档似乎很少(使用OCaml-Java不是你只需拿起并开始进行Java GUI编程...)。OCaml-JavaScript看起来很有趣,但请记住,如果您选择这条路,最可能需要投资时间进行良好的HTML 5编码设置以及一些JavaScript。或者,这里有几篇SO文章谈论管道和套接字,这是创建GUI后端系统的有效方法。但是,如果您不介意您的程序系统/产品将是“松散耦合”的,那么这是一个好主意。我将在弄清楚LablGtk并确保它为我的OCaml后端代码产生可接受的GUI前端后更新此解决方案。