我们在 Haskell 中有一个大型控制台应用程序,我负责制作跨平台和添加 gui。
要求是:
- 尽可能原生的外观和感觉。
- 适用于 Windows 和 Mac OS X、Linux 的客户端(如果可能)。
- 无需安装单独的运行时。
- 无需网络通信。haskell 代码处理无法通过网络传输的非常敏感的信息。这确实是它不是 Web 应用程序的唯一原因。
现在,这个问题的真正原因是解释我目前正在研究的一种解决方案,并征求我没有想到的原因,这使得这成为一个坏主意。
我的解决方案是原生 gui。Windows 上的 Winforms、Mac OS X 上的 Cocoa 和 Linux 上的 GTK/Glade,它们只处理演示文稿。然后,我将在 Haskell 代码之上编写一个层,将其变成一个响应者,用于使用 ZeroMQ 处理消息以及可能用于来回序列化数据的 protobufs 来接收来自 UI 的消息。因此,本机应用程序将启动,它本身将启动所有魔法发生的守护进程,并来回发送消息。
除了确保守护进程只接受来自启动它的应用程序的连接,以及为高级 gui 元素(我正在考虑表格视图、单元格等)来回提供正确数据的挑战之外,我不看到很多缺点。
我没有想到什么让这成为一个坏主意?
我可能应该提一下,乍一看我打算在所有平台上使用 GTK。问题是,虽然它很接近,并且 GTK 和 Glade 对 Haskell 的支持很好用,但结果看起来并不“正确”。它很接近,但在微妙的方式上不够原生,这使得该解决方案对于碰巧为这项工作编写支票的人来说是不可接受的。
此外,多平台和多语言的 gui 问题也不是问题,所以我不一定要寻找其他方法来解决该问题,除非它简化了与 haskell 代码的互操作的某些内容。