WebAssembly,JavaScript和其他语言

时间:2015-08-13 16:45:38

标签: javascript c# python webassembly

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

  

WebAssembly高级目标

     
      
  1. 定义一种可移植,大小和加载时间有效的二进制格式,作为编译目标,可以通过利用各种平台(包括移动和平台)上的常用硬件功能,编译为以本机速度执行。的IoT
  2.         

    read more...

我想问那些已经拥有这些知识的人:

任何编程语言都可以编译成WebAssembly吗?让它成为C#,Java,Python,JavaScript,Ruby。如果是这种情况 - 网络开发人员是否可以选择任何语言来完成他现在使用JavaScript实现的目标?

2 个答案:

答案 0 :(得分:25)

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

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

请注意,MVP不支持线程。线程将在不久之后添加。

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

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

请注意,语言可以正常工作,但支持所有库也很困难!我们(浏览器工程师)可以很好地支持语言,但我们需要社区围绕图书馆的大力支持。

WebAssembly会取代JavaScript吗?

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

为那些定位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

答案 1 :(得分:2)

我认为在这种情况下,用javascript代码编写的代码将被转换为更受欢迎的编程语言。