我对Haskell和一般的编程都很陌生,我想把Haskell用于我想要的一个项目中。我主要关心的是用Haskell编写一个跨平台的程序有多困难。理想情况下,我希望我的最终产品能够正常工作,并且易于在大多数Windows、Mac和Linux机器上安装。
我没有编写任何Java,但据我所知,Java的主要优点之一是您可以“编写一次,在任何地方运行”。因为我还没有听说过关于Haskell的说法,所以我认为编写跨平台的Haskell程序要比编写跨平台的Java程序要多一些。
我的问题是,我们还谈了多少工作?如果我想让我的程序在大多数Windows、Mac和Linux机器上工作,如果我选择使用Haskell而不是像Java这样的JIT编译语言,我还会有多头疼呢?
和后续问题:
我的第一个问题的答案在多大程度上可以普遍应用于所有非JIT编译语言?在Haskell中创建跨平台软件的挑战与使用任何其他编译语言创建跨平台软件的挑战大致相同吗?Haskell在这方面有多独特?
谢谢!
发布于 2014-05-29 03:42:41
您可以大致将语言分为两种类型--需要某种类型的辅助程序的语言和编译的语言。需要帮助软件的语言示例包括- Java,它需要jre,HTML需要浏览器,像perl或python这样的解释语言需要perl/python解释器。C/C++和GHC/Haskell是编译语言,可以自己运行(Haskell也有一个解释器,但您可能不能假设用户会安装它)。
每种方法都有不同的挑战。要运行Java/HTML/Perl/Python,用户必须安装相关助手程序的正确版本,但除此之外,您可以轻松地提供程序的一个版本,并假设它可以在任何地方工作。要分发已编译的程序,通常必须在每个目标操作系统上编译它,并为每个目标操作系统提供一个单独的版本。GHC已经移植到Linux、Mac和Windows,所以您可以这样做。编译后的程序可以在目标机器上运行,而无需安装任何其他程序.除了一个必需的图书馆..。
在两种类型的语言中,库的兼容性都可能是一个问题。您的用户可能需要安装所需的库(像apt这样的包管理器可以自动安装)。这会影响所有语言(不管有没有辅助软件),我不认为它在一种语言与另一种语言之间的优势(虽然有些语言如Python,甚至Java在某种程度上宣传“包括电池”,这意味着您想要的几乎任何东西都包含在基本安装中)。
因此,如果您坚持使用普通的库,并且不介意为每个目标平台重新编译,那么Haskell程序可以在所有公共系统上工作(比C/C++好得多,后者在每个操作系统上使用的变体略有不同)。
发布于 2014-05-29 03:42:27
从技术上讲,Java只编译一次;在编译为中间机器语言时,可以在任何地方运行。与C/C++一样,Haskell将编译为本机二进制文件,这意味着您需要在任何地方编译(针对每个体系结构/OS)。
https://stackoverflow.com/questions/23925047
复制相似问题