【问题标题】:any higher-level language that writes out javascript?写出javascript的任何高级语言?
【发布时间】:2011-05-13 10:52:34
【问题描述】:

我正在寻找一种能写出 javascript 的高级语言。换句话说,这种语言与 javascript 的关系类似于 C++ 与汇编代码的关系。

这种高级语言的要求是类型安全、易于重构、能够拥有类、继承等(有点像 java/C#/vb.net)。

优点是我可以用这种高级语言编写代码,而不必依赖“hacks”来将继承带到 javascript。此外,我不必进行任何运行时类型/鸭子检查,因为更高级别的语言会施加类型安全限制,并且生成的 javascript 只会“完成工作”。

与使用汇编编码相比,使用 C++ 编码时我们可能拥有的任何优势都将是其他优势。

我实际上会尝试自己编写这种高级语言,但它的工作量太大,我想知道是否有人实际上已经做过类似的事情。

【问题讨论】:

  • 很多人已经在 J​​avaScript 之上实现了语言,例如 CoffeeScriptParenScript。您是否正在寻找具有继承性的东西?
  • 看看 Google Web Toolkit:code.google.com/webtoolkit
  • @Greg Hewgill 是的,这是我的要求之一

标签: javascript ecmascript-5


【解决方案1】:

CoffeeScript.

CoffeeScripts 的目标不是将已经存在的高级语言编译成 JavaScript,而是创建一种新语言作为“比 JavaScript 更好的 JavaScript”。

这类似于将 C++ 用作“比 C 更好的 C”。

当然,因为它更接近 JavaScript,它完全支持 所有 JavaScript 功能。编译器也是用 CoffeeScript (JavaScript) 本身编写的。

【讨论】:

  • btw CoffeeScript 不支持继承对吧?
  • @Raynos heys coffeescript 看起来很酷,但我有 2 个问题。首先有没有办法打开“类型安全”选项(编译时类型安全检查而不是运行时类型安全检查),还有一个 IDE 吗? (否则它不会允许轻松重构)
  • @Pacerier “有 IDE”。 JavaScript 有 ide。 WebStorm/Netbeans/VIM。 CoffeeScript 不是严格类型的,因为 JavaScript 不是。个人认为这是一件好事。你不想要类型。 CoffeeScript 应该镜像 python
  • @Raynos 但是,如果没有类型,我们将无法强制执行智能感知和编译时检查。
  • @Pacerier JavaScript 不需要这些。不需要 Intellisense,严格类型严重限制了 JavaScript 的功能。您试图将 JavaScript 放入不适合的盒子中。尝试将其用作 JavaScript。
【解决方案2】:

Script#,它将 C# 代码编译成 JavaScript。不过,不确定它可能有任何限制。还有jsc,通过反编译将.NET程序集转换为JavaScript。

AFK 也不编译以利用 ECMAScript 第 5 版中的新功能。

【讨论】:

  • 我用过 Script#。让我使用它而不是 gwt 的唯一原因是我不想为我的项目 (Java) 添加额外的语言依赖项。如果你没有这些限制,那么gwt绝对是更成熟的产品。
  • @Pacerier:据我所知没有。只有 JSC 可以转换用 VB.NET 制作的 .NET 程序集。
  • @Charlie Kilian dang Script# 不支持继承!
【解决方案3】:

Google Web Toolkit (GWT)Java 代码到 JavaScript 作为更广泛范围的一部分。这是来自相邻链接的 sn-p:

GWT SDK 提供了一套核心 Java API 和小部件。这些让你 用 Java 编写 AJAX 应用程序和 然后将源代码编译为高度 经过优化的 JavaScript 所有浏览器,包括移动设备 适用于 Android 和 iPhone 的浏览器。

您当然可以使用 Google Closure Compiler 从 JavaScript 本身编译 JavaScript。

还可以查看此Scott Mitchell's blog article 关于Script#

但是,正如@Andy E 所说 - 没有任何东西声称适用于 ECMAScript5

【讨论】:

  • 那是 Scott Mitchell 的文章,不是我的。 (Scott 后面有我的一些文章的链接,但它们是关于不同主题的;我从来没有写过 Script#。)
  • 嘿,我已经看过 GWT api 了,GWT 实际上是否允许我们从头开始创建自己的类,而不是使用它们的 API? (实际上我对他们的 API 完全不感兴趣,我需要的是一个语言到语言的转换器)
【解决方案4】:

您应该考虑结合使用LLVMemscripten。它将允许您将大量语言(包括 C 和 C++)编译成 LLVM 位码,然后编译成 JavaScript。这是来自their projects page

Emscripten 将 LLVM 位码编译成 JavaScript,这使得将 C 和 C++ 源代码编译成 JavaScript 成为可能(首先使用 Clang 将其编译成 LLVM 位码),可以在 Web 上运行。 Emscripten 已用于移植大型现有 C 和 C++ 代码库,例如 Python(标准 CPython 实现)、Bullet 物理引擎和 eSpeak 语音合成器等。

使用这种技术的一个特别令人惊奇的端口是box2d.js 项目,它采用了出色的box2d 库并将其转换为this amazing demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-22
    • 2019-12-12
    • 1970-01-01
    • 2021-05-12
    • 2021-03-14
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多