Java中的GUI,SML中的Backend?

时间:2011-07-29 19:08:30

标签: java java-native-interface jna sml

我是函数式编程语言(即标准ML及其方言)的忠实粉丝,主要是因为它们的表现力允许非常简洁,干净的代码。我可以使用ML比使用Java更快地解决许多问题。

然而,Java在编程GUI( - > SWT)时非常棒。我绝对不想用功能语言来做这件事。

这给我们带来了一个实际问题:有没有一种很好的方法可以用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。我试过了,但我认为它不能与实际的函数式编程语言竞争(在表达方面)

2 个答案:

答案 0 :(得分:1)

这不是确切的答案,但有一种功能语言非常适合JVM:Yeti

因此,如果你喜欢在ML中进行编码而不是目前关闭的编码,你可以使用JVM,它当然可以很好地集成到所有Java API中。

答案 1 :(得分: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。)