JS 成为 Web 的 WebAssembly,这已经是老生常谈的话题。不过,JS 是一种很便携的语法,并且是很安全的机器语言。今天,我很高兴地宣布,在 WebAssembly 上可以进行跨浏览器的工作。
WebAssembly 是什么:
WebAssembly, 缩写为“wasm”,.wasm 为文件名后缀,是一种新的用于低端安全代码的二进制语法。它最初与 asm.js 合作,不过从长远来看,为了更好地向多源编程语言的通用目标等级格式提供服务,WebAssembly会从 JS 的语义中分离。
为通过 JS 支持 wasm 的 polyfilling,wasm 和 asm 保持体面的间隔是至关重要的。甚至是 JS 和 asm.js 共享内存线程和 SIMD 支持也是相当重要的。可能长期发散的例子:零成本异常,动态链接,call/cc。是的,我们的目标是开发 Web 多编程语言目标文件格式。
为什么:asm.js 是很不错的,但是引擎一旦为它优化,解析器就会成为一个热锅 —— 会让移动设备变得很烫。传输压缩是必要的,而且能节省带宽,但是要在解析之前解压。第二个考虑因素:JS 存在一些尴尬的角落,甚至是在 asm.js 集合中。最后,一旦浏览器支持本地 WebAssembly 语法,JS 和 wasm 就会分离,不会因为编译器使用了一些完全不同的编程语言就会引入一些不安全或者不合适的特性到 JS 中。
请查看 FAQ 获取更多的细节信息。不,JS 在可见的未来里是不会消失的。是的,wasm 可以不用侍奉两个主人来缓解 JS。这是一个双赢的计划。
怎么样:如果你使用 Emscripten,然后 wasm 会通过一个命令行标志首先支持原型 polyfill。但是作为本地 wasm 解码器出现在引擎顶部(请查看 V8 本地原型解码器),Emscripten 将会自动配置以获得最佳的效果。另一个原型:一个 JS AST 压缩器(编码器)。
是谁: 一个 W3C 社区团体,WebAssembly CG 对所有人开放。正如你在 github 日志上看到的,WebAssembly 是 Google、Microsoft、Mozilla 和其他几个公司共同努力的结果。我很抱歉,这项工作在一开始是通过私有库完成的,但是,这只是临时措施,用来使这几家公司达成共识,从而能让这些公司有更 长远的合作。
你可以看到,Google PNaCl 团队的 JF Bastien 只能勉强守住秘密。

来 自 Google PNaCl 团队和 V8 团队的人,来自 Microsoft 的核心人员,以及来自 Mozilla 的 asm.js 和 Emscripten 的大师,这些人紧密地合作,直到每个人都看到了曙光,这真是一件振奋人心的事情。我在这里尤其要感谢 Google 的 JF Bastien,K. Gadd 和 Ben Titzer;Mozilla 的 Dan Gohman;来自 Microsoft 的 Abhijith Chatra 和 Michael Holman;asm.js 和 Emscripten 的 Alon Zakai;做 JavaScriptCore/WebKit 的 Filip Pizlo;尤其是 asm.js/OdinMonkey 的策划 Luke Wagner。
Via :Brendan Eich's Blog
关js能做native什么事情啊?又不是说js编译成exe了。跟native一点关系都没有。
js我觉得最屌的有两个地方,一个是类的定义和函数定义联在一起
再一个就是那个闭包和它的作用域
引用来自“非仙”的评论
我看到的是js将死,以后c#,java, py等都会以子集的方式支持WebAssembly,共享同一个虚拟机,还会有多少人用js?引用来自“0Scn”的评论
WebAssembly项目的联合团队已经声明解释了不是取代JavaScript的意思,是双赢,是对JavaScript尴尬领域的填补,也是开发Web多编程语言统一目标文件格式。或多或少的类似Asm.js、NativeClient、Emscripten、Duetto、LLJS、Ceylon、Pyjs、rb2js、Go2js......等等的作用,好吧,“一切皆JavaScript”,但由于是Google、Microsoft、Mozilla、Apple(WebKit)及其他等达成共识主导的,自然很大很大可能成为统一标准,未来浏览器原生支持,且性能大大提升(据说理论上比现有原型设计提速23倍),未来支持更多的编程语言编译为wasm跑JavaScript引擎上。当然目前焦点是关注在C/C++上和开发一个polyfill library能让WebAssembly代码转译为JavaScript,随后将开发更多的工具,比如调试器这些,以及支持更多的语言,比如Rust, Go和C#...等等。团队也提及了一些应用场景,应用程序的某些部分比如动画、可视化、压缩等等领域可编译为WebAssembly模块,而用户接口/逻辑大部分用JavaScript写。没有什么谁取代谁的意味,喜欢和擅长原生JavaScript的人依旧会喜欢JavaScript,喜欢C/C++的,喜欢Python的、喜欢Go的、喜欢Rust的、喜欢C#的......也依旧如此,只不过现在和未来多了一种统一的目标格式能让你选择喜欢的语言去编码但又能够轻易的直接的跑在浏览器(或者其他支持的运行环境)上。如果浏览器都支持 .wasm,
JS、PHP、Java、Python、Ruby 都支持生成 .wasm,
用 JS 的会有多少?
引用来自“饼干的荣耀”的评论
完全不知道4楼在说什么……引用来自“Neo”的评论
4楼看样子完全没有了解过asm.js,asm.js都只是支持C/C++这样的静态类型语言WebAssembly 一出,JS 万能?很明显是JS直接被扔到后方了吧……
别的语言也能写 WebAssembly,谁要你那蹩脚的语法……
引用来自“饼干的荣耀”的评论
完全不知道4楼在说什么…….js 的标准将不再重要,
或许用 Python 写也行,只要编译成 .wasm 就好。
引用来自“非仙”的评论
我看到的是js将死,以后c#,java, py等都会以子集的方式支持WebAssembly,共享同一个虚拟机,还会有多少人用js?