是否有可能从D 2.0编译为Javascript?

时间:2011-03-27 10:10:24

标签: javascript ajax web-applications compiler-construction d

长期的C ++程序员(就是我)探索其他语言,并想知道是否值得学习D 2.0。 (这是D的重新编写。)到目前为止,我喜欢我所看到的 - 许多务实,明智的选择。现在,我想了解更多,并想知道是否有可能做到以下几点:

  1. 在D 2.0中编写一些代码。 (也许它是D 2.0明确定义的子集。)
  2. 编译1中的代码。
  3. 从编译器接收Javascript源代码。
  4. 总之,我希望有一个D 2.0编译器,后端能够生成Javascript。

    所以我的问题有两部分:

    1. 这样的编译器是否已存在?
    2. 如果这样的编译器存在,如果我选择实现一个,哪里是最好的起点?
    3. 对于上下文,我想要上述的原因是我可以在D 2.0中实现一堆业务逻辑,然后在纯Javascript(即没有Flash / Silverlight / Java)Web中使用该业务逻辑应用

      更新

      我有三个答案,其中两个是主题,一个不是,因此被忽略。

      @FeepingCreature认为它永远不会发生,因为“它与D的目标环境太不协调”。我很想知道这意味着什么,并且已经问过了。

      相比之下,@ Nekuromento指出理论上已经可以使用LDC,其次是LLVM Javascript后端。我检查了两个链接。 LDC对D 2.0的支持看起来像是正在进行的工作。但我猜它会在某个时刻到达那里。 LLVM Javascript也没有经过优化或缩小,但它从演示中看出它们的工作原理。所以我认为这至少是有用的。

      更新2

      好的 - 这似乎是迄今为止最好的解决方案。

      1. 调用LDC。 (@Nekuromento)LDC将Digital Mars前端与LLVM后端结合在一起。
      2. 通过LLVM Javscript后端管理1.的输出。 (@Nekuromento)
      3. 管道输出来自2. Closure(@BCS)
      4. 我会尽快选出最佳答案,但我真的想要一些更明智的意见。

        更新3

        有关我为何要这样做的更多信息。

        以下是我希望实施的一个项目的具体示例。它将是一个几何建模库,可能只由我编写,花了几年时间编写,最终达到大约100,000行代码。我希望它包含尽可能接近零的错误,因此,我不希望在Javascript中实现它。我希望它能够在服务器,桌面和浏览器上运行。 (在“浏览器中”我的意思是没有任何插件,如Flash,Silverlight或Java的帮助。)事实是,在Javascript上运行的浏览器中的代码将保留一段时间。项目将越来越需要一个战略来处理这个问题。

        更新4

        我希望得到更多的答案,但没有得到它们。好吧,没关系。感谢所有的反馈,包括@dsimicha的刺激性评论。 (我希望有时可以在技术上不同意,同时保持文明。)我接受了@Nekuromento的回答。

        更新5 2018-07-18

        七年过去了,LDC v1.11支持编译和链接到WebAssembly。3

3 个答案:

答案 0 :(得分:4)

这样的编译器目前不存在,但在javascript LLVM-backend上有一些工作。

因为有LDC。它使用DMD前端和LLVM,因此理论上可以添加javascript输出。

答案 1 :(得分:2)

在接下来的几天里,请关注D新闻组,我正在研究你可能感兴趣的东西(或者更确切地说,你想要的东西)。它目前可以编译:

int foo()
{
    if (true)
    {
        return 3;
    }
}

我希望在下周内获得一些alpha / beta。

答案 2 :(得分:1)

简短回答:不。

答案很长:真的。否。

不那么狡猾的答案:这与D的目标环境太不协调了。

如果你选择实施一个 - 地狱,更多的权力给你,但你的工作是为了你的工作。可能最好从阅读DMD前端开始,这是FOSS(并且,afaik,以标准DMD zip分发)。