【问题标题】:WebAssembly, JavaScript, and other languagesWebAssembly、JavaScript 和其他语言
【发布时间】:2015-11-06 18:19:41
【问题描述】:

随着 Web 新时代的到来,WebAssembly 将由 Google、Microsoft、Apple 和 Mozilla 合作设计:

WebAssembly 高级目标

  1. 定义一种可移植、节省大小和加载时间的二进制格式,作为编译目标,利用各种平台(包括移动和物联网

read more...

想问问已经掌握这方面知识的人:

任何编程语言都可以编译成 WebAssembly 吗?让它成为 C#、Java、Python、JavaScript、Ruby。如果是这样的话——Web 开发人员是否可以选择任何一种语言来完成他现在可以使用 JavaScript 完成的事情?

【问题讨论】:

    标签: javascript c# python webassembly


    【解决方案1】:

    我们的目标确实是支持任何语言,但支持任何语言都很难在没有巨大延迟的情况下实现。

    WebAssembly 目前专注于传统上提前编译、在线性内存堆上运行良好、不需要动态重新编译、运行时代码加载或垃圾回收的语言。其中一些限制是为了尽早获得最小可行产品(这发生在February 2017),并考虑到现有的浏览器内编译器可以做什么。

    请注意,MVP 不支持线程。稍后将添加主题。

    通过将用 C/C++ 编写的解释器编译成 WebAssembly,可以轻松地支持 Python、JavaScript 和 Ruby。更高版本的 WebAssembly 将支持 JIT 编译,但像 V8 这样的引擎必须将 WebAssembly 视为新的 ISA(例如与 x86-64 / ARM / ...)。

    C# 和 Java 需要类似的 GC 和堆栈操作原语。这也在路线图上,但在 MVP、线程和动态链接之后。

    请注意,这些语言可能工作得很好,但支持它们的所有库也很困难!我们(浏览器工程师)可以努力支持语言,但我们需要围绕强大的库支持建立社区。​​p>

    WebAssembly 会取代 JavaScript 吗?

    关于你的最后一句话:是的,WebAssembly 应该能够做很多 JavaScript 可以做的事情,因为它可以访问相同的 Web API。不过,它的目标不是取代 JavaScript:它是对 JavaScript 的补充,避免为了不自然地支持其他语言而向 JavaScript 添加功能,并为 C++ / Rust 等低级语言提供可预测的接近本机性能。

    为那些以 JavaScript 为目标或将类似语言编译为 JavaScript(例如 TypeScript)的人保持 JavaScript 进化,并将 WebAssembly 进化为喜欢其他语言的 JavaScript 的酷搭档。

    最终 WebAssembly 将支持even more low-level features。其中一些对于 JavaScript 采用没有意义,但现有代码(例如大型 C++ 代码库)假定这些功能的存在是为了正确性和/或性能。

    人们应该停止编写 JavaScript 并改用 WebAssembly 吗?不。我预计与 JavaScript 的紧密集成意味着 WebAssembly 模块将从 JavaScript 中使用(例如,快速图像处理器),现有的 C++ 代码库将针对 Web,但我看不到 JavaScript dying any time soon

    【讨论】:

    • 这是否意味着 JavaScript 最终将成为未来的语言?由于 WebAssembly 具有如此通用性(根据规范,它几乎无处不在:github.com/WebAssembly/design/blob/master/NonWeb.md),同时补充 JavaScript,这种语言将来会成为第一吗?
    • JavaScript 是网络的通用语。 WebAssembly 或 JavaScript 成为 #1 并不是真正的目标,至少对我来说不是。我们希望在不增加 JavaScript 负担的情况下改进 Web 平台的功能,并且不必因为 JavaScript 的设计而损害 WebAssembly。由于速度、可移植性和安全性方面,我们希望这个平台在浏览器之外也有用。这些指标的成功与海事组织有关。
    • 这确实是一个绝妙的方法。我对此感到非常兴奋!
    • @JF Bastien 好答案!。所有人都说 WebAssembly 不能替代 JavaScript,但是 WebAssembly 会取代 JavaScript,为什么我这么认为,想象一下情况——我是 C/C++/Java 开发人员,我需要从头开始编写一些 Web 应用程序——你觉得什么语言我会用吗?答案将是我最熟悉的语言,我会选择 C/C++/Java 而不是 JavaScript。对于许多 C/C++/Java 开发人员来说,JavaScript 是一场噩梦。这是一个原因。
    • @JF Bastien 还有另一个——想象一下你应该支持 JavaScript、C++/C/Java 的项目(因为将是你应该支持的库或模块),我认为它会很糟糕。您如何看待这些案例?
    【解决方案2】:

    我认为在这种情况下,用javascript编写的代码会逐渐转移到更喜欢的编程语言。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-24
      • 2010-10-13
      • 1970-01-01
      • 1970-01-01
      • 2011-03-03
      • 2015-03-11
      • 1970-01-01
      相关资源
      最近更新 更多