Haskell到JavaScript编译器编写在浏览器中运行的代码的最高生产级别是什么?

Haskell到JavaScript编译器编写在浏览器中运行的代码的最高生产级别是什么?,javascript,haskell,code-translation,Javascript,Haskell,Code Translation,我不是在寻找一个有着10年历史记录的超级健壮的解决方案,而是寻找一种可以在实际应用程序中使用的解决方案,而不仅仅是能够运行Hello World示例 我的首选是在服务器上运行编译器,这样我就可以提前编译Haskell代码。当然,解决方案需要不仅仅是一个编译器,还需要使Haskell代码能够访问浏览器上可用的API(DOM、XHR…) 脚注:到目前为止,我看到的项目似乎没有得到积极维护,或者超出了运行“Hello world”的能力,或者在某些情况下甚至超出了项目描述的范围。您可能会发现以下列表很

我不是在寻找一个有着10年历史记录的超级健壮的解决方案,而是寻找一种可以在实际应用程序中使用的解决方案,而不仅仅是能够运行Hello World示例

我的首选是在服务器上运行编译器,这样我就可以提前编译Haskell代码。当然,解决方案需要不仅仅是一个编译器,还需要使Haskell代码能够访问浏览器上可用的API(DOM、XHR…)


脚注:到目前为止,我看到的项目似乎没有得到积极维护,或者超出了运行“Hello world”的能力,或者在某些情况下甚至超出了项目描述的范围。

您可能会发现以下列表很有用:

从列表中:

* UHC (Utrecht Haskell Compiler) backend converts UHC core to JavaScript, allowing the compiling of Haskell code to JS.
* YHC (York Haskell Compiler) backend, as above but with YHC core language.
* jshaskell

我知道这不是Haskell,但Coffee脚本是基于表达式的,而且相当优雅。

我偶然发现了一个名为

看起来很有希望

引用自
自述文件

Haskell到Javascript转换器 该项目旨在为以下问题提供解决方案:

  • 将现代Haskell库编译为Javascript文件并使用 在Ajax应用程序或
  • 用Haskell语言开发整个Ajax应用程序
项目的早期版本位于


这里有一个更完整的列表:

还有Fay(尽管它只是haskell的一个子集)


YesSOD列出了一个“最具生产水平”的候选名单:(YesSOD是一个非常流行的Haskell网络框架,因此他们可能知道自己在谈论什么)

这种语言,Roy,可能不是真正的Haskell(?),但它看起来非常相似:

罗伊似乎还活着;GitHub回购协议中有许多分支:
它似乎还活着:


如果您使用的是Play Framework 2.0,那么有一个插件,Ray,可以在Play Framework 2.0上运行Roy:



上一次提交是四个月前,这是很久以前的事了,请记住Play Framework 2可能是在4或5个月前发布的。

虽然GHCJS似乎没有得到积极维护,但似乎是非常流行的

  • Emscripten将位代码编译为JavaScript
  • 似乎正在积极发展
  • 直观地说,要回答这个问题,以下管道可能离“生产质量”不远:Haskell词素(->GHC->)LLVM词素(->Emscripten->)JavaScript词素

我承认这是一篇投机性文章。

为什么?[可能有一个原因导致它们没有得到维护!]大多数现有的Haskell实现都编译为C或x86。我敢肯定,部署的ECMAScript引擎比C或x86引擎都多。所以,这很有道理,不是吗?ECMAScript也是一种非常好的汇编语言,除了它迫切需要
GOTO
、continuations、一个具体化的堆栈或类似的东西。(注意:我只是说ECMAScript是一种汇编语言。将
GOTO
作为编程语言添加到ECMAScript将是一个可怕的错误。继续使用OTOH将非常酷。事实上,ECMAScript已经有了异常,不管怎样,
GOTO
s…)@Ira:根据这个论点,世界上应该有比汽车更多的汽车工厂。@Ira:几乎可以肯定的是,C语言的实现比JavaScript语言的实现要多,尽管从逻辑上讲,这并不符合大多数都是用C语言编写的事实。无论如何,我猜将Haskell编译成JavaScript主要是为了在浏览器中获得Haskell强大的静态保证,haskell类型强制和所有这些令人敬畏的东西,但我需要发布javascript代码。在这个列表中,“Emscripten LLVM to javascript compiler.”位于C/C++部分,这是错误的,因为它可以编译任何可以编译为LLVM字节码的语言,包括。其中,UHC看起来最有希望。到今天为止,它的最后一次发布是在2010年10月,他们有一个博客,上面有特定于JavaScript的帖子()。YHC已经死了,所以我甚至不考虑评估它。jshaskell是googlecode()上的一个项目。到今天为止,自2010年7月以来,该存储库从未被触动过,谷歌代码将该项目的活动描述为“无”;不太令人鼓舞。关于ghcjs,另请参见:@sclv,您可以尝试ghcjs吗?它已经可以使用了,还是现在更像是一个原型?@avernet,我只看了自述文件,所以我说不出来。我可以说,截至2015年4月,GHCJS似乎非常容易接近,相当成熟;我能够在运行Hello World时不出现任何故障,这是我目前无法说的(这是唯一其他“正确的”,即非方言Haskell->JS编译器)。你知道为什么它不那么出名吗?这真是个好主意。也许是表演?一个家伙似乎以前就有过。(谷歌搜索)在过去找不到关于这方面的任何其他信息。也许不太需要。我还没有时间测试它。也许很快。Elm是这个领域另一个有趣的项目,从链接的wiki页面判断。JMacro看起来是最成熟的,但它只是Haskell内部的一个EDSL。匆忙似乎是下一个最成熟的,而且似乎对哈斯克尔本身更加忠诚。我查看了它的Github页面,它似乎得到了积极的维护。我非常确定YesSOD是服务器端,而不是像JS那样的客户端。YesSOD的维护人员仍然知道一个选项,可以将Haskell编译为Javascript,并为这些工具创建了自己的评级。