Java中的图形用户界面,SML中的后端?

6
我是函数式编程语言的忠实粉丝(主要是标准ML及其方言),因为它们的表现力使得代码非常简洁干净,我可以用ML比Java更快地解决许多问题。
然而,当涉及到编写GUI(->SWT)时,Java确实非常棒。我绝对不会在函数式语言中进行这样的操作。
这引出了我的实际问题:有没有一种好的方法,可以使用ML编写程序,然后用Java编写的GUI进行包装? 到目前为止,我想到的是以下内容:
  • 编译 ML 程序(例如使用 MLton 或 Poly ML),并将二进制文件作为外部程序从 Java 中执行 (http://www.rgagnon.com/javadetails/java-0014.html)。
    问题:前端/后端之间唯一的通信方式是通过字符串。这可能需要大量的(困难的)编码/解码。
  • 使用 JNI/JNA。根据我所读到的,这将允许您传输整数、数组等。我认为外部程序必须用 C/C++ 编写才能使其工作。使用 MLton 的 Foreign Function Interface,我可以在 C 中编写一个接口,将其与我的函数式程序静态链接起来。
    问题:显然,这只适用于动态库,即在 Windows 中的 dll。然而,MLton 只允许我将 ML/C 程序编译成可执行文件。当尝试创建 dll 时,我会遇到一堆错误。

有人有经验吗?有更好的方法吗?
提前感谢!-Steffen

编辑:我知道Scala,它试图将函数式编程的概念引入Java。我尝试过它,但我认为它无法与实际的函数式编程语言竞争(就表达能力而言)。


你是否愿意尝试比Scala更加函数式的编程语言?如果是的话,你可以考虑一下Clojure,它也可以在JVM上运行。与Scala不同(Scala被标榜为多范式语言),Clojure是一种函数式语言,与Lisp有关。 - Thomas Owens
SOAP Web服务怎么样?你能在SML中部署Web服务吗? - Jaime Hablutzel
2个回答

1

这并不是完全准确的答案,但有一种功能性语言非常适合JVM:Yeti

因此,如果您喜欢使用ML进行编码,那么目前可能在JVM上最接近的就是它,并且它当然可以与所有Java API很好地集成。


我已经了解到了Yeti,但它似乎还处于相当早期的阶段。引用:“编译器目前基本可用,但仍在不断开发中,现在并不是真正意义上的生产使用。”因此,我担心这并不是我想要的东西。非常感谢您的回答! - smolkaj

0
有没有一种好的方法可以在ML中编写程序,然后用Java编写的GUI进行包装?
我不知道这是否适用于小型应用程序,但它绝对是一种方法,适用于大型IDE样式的东西:Isabelle/ML vs. Isabelle/Scala/JVM。这是交互式定理证明的一个应用,但纯SML编程在某种意义上是那个的一个微不足道的实例。
因此,您可以编写基本的Isabelle/ML代码,以老式REPL的方式发出一些消息,但JVM端的GUI组件可以解释输出。 Isabelle/jEdit经常使用它来打印彩色文本,带有一小部分富文本(上下标和粗体)。
关于将函数值显式重新编码为字符串通过管道/套接字传输的问题:在Isabelle/ML/Scala中,这变得非常简单,因为它模仿了SML在未类型化内存中表示类型化值的方式,但是这里使用未类型化的XML树而不是位。 XML传输语法是特定的,以保持简单:使用YXML而不是官方准人类可读的XML。所有这些都适合于大约8000字节的SML源代码 - 我很想在这里发布源代码,但最好搜索“Isabelle YXML”或“YXML PIDE”。
由于Scala/JVM已被提及为独立替代方案:它绝对有效,Scala在模仿许多编程风格(高阶函数-面向对象)方面也非常强大和灵活,但对于像定理证明这样复杂的符号应用程序,它无法达到SML的纯度和稳定性。(请注意,此处的基础SML平台是Poly/ML。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接