用Haskell编写跨平台软件比用Java编写困难多少?

use*_*225 3 java haskell cross-platform

对于Haskell和一般的编程人员来说,我是一个新手,我想将Haskell用于我考虑的项目。我主要担心的是用Haskell编写跨平台程序会有多困难。理想情况下,我希望最终产品能够正常运行,并且易于在大多数Windows,Mac和Linux计算机上安装。

我还没有编写任何Java,但是据我了解,Java的主要优势之一是您可以“编写一次,在任何地方运行”。由于我还没有听说过有关Haskell的说法,因此我认为编写跨平台Haskell程序要比编写跨平台Java程序花费更多的工作。

我的问题是,我们在谈论多少工作?如果我希望我的程序在大多数Windows,Mac和Linux机器上都可以运行,那么如果我选择使用Haskell而不是Java这样的JIT编译语言,将会给我带来多大的麻烦?

作为后续问题:

我第一个问题的答案通常可以在多大程度上适用于所有非JIT编译语言?在Haskell中创建跨平台软件的挑战与在任何其他编译语言中进行的挑战大致相同吗?Haskell在这方面有多独特?

谢谢!

jam*_*idh 5

您可以将语言大致分为两种:需要某种类型的帮助程序的语言和经过编译的语言。需要帮助软件的语言示例包括-Java(需要jre),HTML(需要浏览器),解释语言(例如perl或python)需要perl / python解释器。C / C ++和GHC / Haskell是已编译的语言,并且可以独立运行(Haskell也具有解释器,但您可能无法假设用户会安装它)。

每种方法都有不同的挑战。要运行Java / HTML / Perl / Python,用户必须安装正确版本的关联帮助程序,但是除此之外,您可以轻松提供一个版本的程序并假定它可以在任何地方运行。要分发已编译的程序,通常必须在每个目标OS上对其进行编译,并为每个目标OS提供单独的版本。GHC已被移植到Linux,Mac和Windows,因此您可以执行此操作。编译的程序可以在目标计算机上运行,​​而无需安装其他任何程序。

两种语言都可能存在库兼容性问题。...您的用户可能需要安装所需的库(像apt这样的程序包管理器可以自动执行此操作)。这会影响所有语言(无论是否使用辅助软件),而且我认为这不是一种语言相对于另一种语言的优势(尽管某些语言,例如Python和Java在某种程度上都宣传“含电池”,这意味着基本安装中会包含很多您想要的东西)。

因此,如果您坚持使用普通的库,并且不介意为每个目标平台进行重新编译,则Haskell程序可以在所有通用系统上运行(比C / C ++更好,后者在每个OS上使用略有不同的变体)。

另请参阅ghc编译的二进制文件需要GHC还是自包含的?