9co*_*an9 18 user-interface ocaml interface user-interaction
我已经看到一些线程涉及OCaml中的GUI编程,但我不认为它们在需要GUI界面时会明确地导致明确的解决方案.
我的问题,更具体地说,如下:在为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可执行文件?我对一些松散连接或奇怪的解决方案感兴趣,通过管道(我一直在考虑这些的进程间通信,例如操作系统设计中涉及的内容)或套接字(我倾向于将这些用于网络编程),I想象如果不是OCaml本身,必须有某种方法将我的OCaml编码的解释器"容纳"在另一种语言的GUI代码中.有什么想法,指导或建议吗?
编辑:如果我能获得类似Linux的操作系统(即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已经开始有关系了.似乎有一些方法可以在C语言中调用OC代码和OCaml中的C代码(尽管这可能非常困难,因为您实际上最终会使用一些复杂的包装函数包装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看起来很有趣,但请记住,如果您选择此路径,除了一些JavaScript之外,您很可能不得不花时间在良好的HTML 5编码设置上.或者,SO中有几个帖子讨论管道和套接字,它们是创建GUI后端系统的有效方法.但是,如果您不介意您的程序系统/产品将"松散耦合",这是一个好主意.一旦我弄清楚LablGtk并确保它为我的OCaml后端代码产生可接受的GUI前端,我将更新此解决方案.
Jef*_*eld 10
我认为LablGtk工具包目前是合理的最新版本.这是一个选择.但是,我自己没有用过它.
将一组OCaml模块链接到用C,C++或Objective C编写的主程序中并不太困难.您可以或多或少地直接调用OCaml函数并获取结果.为此,您需要学习外部功能界面,一旦进入凹槽就不那么困难了.然后,您可以使用C系列中您喜欢的任何GUI库.如果您对此方法感兴趣,可以从OCaml手册的第19章开始.
您可以使用C中介链接其他语言,具体取决于语言.对于解释语言,您可以将OCaml函数添加为新原语.(根据我的经验,口译员通常用C或C++编写.)
对于Java,有OCaml-Java(正如你所提到的).我自己没有用过,但很有趣.我相信JVM会施加一些限制,因此您可能需要在编码时要格外小心.
对于Web应用程序,有js-of-ocaml,它将OCaml编译为JavaScript.