Java中的GUI,SML中的后端?

Java中的GUI,SML中的后端?,java,java-native-interface,jna,sml,Java,Java Native Interface,Jna,Sml,我非常喜欢函数式编程语言(即标准的ML和它的方言),主要是因为它们的表达能力允许非常简洁、干净的代码。我可以用ML比用Java更快地解决许多问题 然而,Java在编程GUI(->SWT)方面确实很棒。我绝对不想在函数式语言中这样做 这就引出了我的实际问题:有没有一种好方法可以用ML编写程序,然后用Java编写的GUI包装它? 到目前为止,我得出的结论如下: 编译ML程序(例如,使用MLton或Poly ML)并按如下方式执行二进制文件: 来自Java的外部程序 ()。 问题:前端/后端通信的唯

我非常喜欢函数式编程语言(即标准的ML和它的方言),主要是因为它们的表达能力允许非常简洁、干净的代码。我可以用ML比用Java更快地解决许多问题

然而,Java在编程GUI(->SWT)方面确实很棒。我绝对不想在函数式语言中这样做

这就引出了我的实际问题:有没有一种好方法可以用ML编写程序,然后用Java编写的GUI包装它?

到目前为止,我得出的结论如下:

  • 编译ML程序(例如,使用MLton或Poly ML)并按如下方式执行二进制文件: 来自Java的外部程序 ()。
    问题:前端/后端通信的唯一方式是通过字符串。这可能需要大量(困难的)编码/解码
  • 使用JNI/JNA。据我所知,这将允许您传输整数、数组等。我认为外部程序必须用C/C++编写才能工作。有了MLton,我可以用C语言编写一个与我的功能程序的接口,并静态链接整个程序。
    问题:显然,这只适用于动态库,即Windows中的DLL。但是,MLton只允许我将ML/C程序编译为可执行文件。当尝试创建dll时,我会遇到一大堆错误
有人有这方面的经验吗?有更好的方法吗?
提前谢谢-斯特芬


编辑:我了解Scala,它试图将函数式编程的概念引入Java。我已经尝试过了,但我认为它无法与实际的函数式编程语言(在表达能力方面)竞争。

这不是确切的答案,但有一种函数式语言非常适合JVM:

因此,如果您喜欢使用ML进行编码,那么这可能是目前JVM上的最大优势,而且它与所有Java API都集成得很好

有没有一种好方法可以用ML编写程序,然后用Java编写的GUI包装它

我不知道这对于小型应用程序来说是否是一种好方法,但这绝对是一种适合大型IDE风格的方法:Isabelle/ML与Isabelle/Scala/JVM。这是交互式定理证明的一个应用,但从某种意义上说,普通SML编程只是一个微不足道的例子

因此,您可以编写基本的Isabelle/ML代码,以老式REPL的方式发出一些消息,但输出可以由JVM端的GUI组件进行解释。Isabelle/jEdit经常这样做,用少量的富文本(上/下字符和粗体)打印彩色文本

关于将管道/套接字上的函数值显式重新编码为字符串:这在Isabelle/ML/Scala中非常简单,因为它模仿了SML在非类型化内存中表示类型化值的方式,但在这里使用非类型化XML树而不是位。XML传输语法特别简单:YXML而不是官方的准人类可读的XML。所有这些都可以放入大约8000字节的SML源代码中——我很想在这里发布这些源代码,但最好在web上搜索“Isabelle YXML”或“YXML PIDE”


由于Scala/JVM单独作为独立的替代方案被提及:它肯定能工作,Scala在模仿许多编程风格(高阶函数面向对象)方面也非常强大和灵活,但对于复杂的符号应用程序(如定理证明),它无法达到SML的纯度和稳定性。(请注意,这里的底层SML平台是Poly/ML。)

您是否接受比Scala更具功能性的语言?如果是这样,您可能想查看Clojure,它也在JVM上运行。与Scala(被称为一种多范式语言)不同,Clojure是一种与Lisp相关的函数式语言?你能在SML中部署一个web服务吗?我读过关于yeti的文章,但它似乎还处于相当初级的阶段。引用:“编译器目前大部分是可用的,但仍处于开发阶段,不打算在生产中使用。”所以我恐怕这不是我真正想要的。谢谢你的回答!