在Haskell中编写跨平台软件比在Java中编写多难?

时间:2014-05-29 03:03:27

标签: java haskell cross-platform

我对Haskell和一般编程都很新,我想将Haskell用于我想到的项目。我主要担心的是用Haskell编写跨平台程序会有多困难。理想情况下,我希望我的最终产品能够在大多数Windows,Mac和Linux机器上轻松安装。

我没有编写任何Java,但据我所知,Java的一个主要优势是你可以“编写一次,随处运行”。由于我没有听说过关于Haskell的声明,我认为编写跨平台Haskell程序比编写跨平台Java程序要多得多。

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

作为后续问题:

我的第一个问题的答案在多大程度上可以适用于所有非JIT编译语言?在Haskell中创建跨平台软件的挑战是否或多或少等同于使用任何其他编译语言这样做的挑战? Haskell在这方面有多独特?

谢谢!

2 个答案:

答案 0 :(得分:4)

您可以粗略地将语言划分为两种类型 - 需要某种类型的帮助程序的程序,以及那些已编译的程序。需要辅助软件的语言示例包括:Java,需要jre,HTML需要浏览器,perl或python等解释语言需要perl / python解释器。 C / C ++和GHC / Haskell是编译语言,可以自己运行(Haskell也有解释器,但你可能不能假设你的用户会安装它)。

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

库兼容性可能是两种语言的问题....您的用户可能需要安装所需的库(像apt这样的包管理器可以自动执行此操作)。这会影响所有语言(有或没有辅助软件),我认为它不是一种语言与另一种语言的优势(尽管某些语言如Python,甚至Java在某种程度上都在宣传“包含电池”,这意味着相当你想要的任何东西都包含在基础安装中。

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

另见Do ghc-compiled binaries require GHC or are they self-contained?

答案 1 :(得分:2)

从技术上讲,Java是编译一次;在任何地方运行,因为它编译为intermediate machine-like language。与C / C ++一样,Haskell编译为本机机器二进制文件,这意味着您需要在任何地方编译(对于每个体系结构/操作系统)。