WebAssembly-driven
发展历程
主要目的
- 可移植
- 快速
- 安全
为不同的运行环境重复编写代码带来了大量的重复工作,应当提高已有代码的重用效率,实现同一份代码在不同运行环境的快速部署。尤其是当今开源软件的价值主张越发清楚,快速、安全地将他人编写的有价值的、可重复使用的代码化为己用越发重要。
以往的解决办法
直至今日,Java一直是其中一些问题的解决方案,它几乎无处不在,并且是可移植的。但是,一旦离开了基于浏览器的保护范围,仍然存在安全问题。
并且,单线程设计不利于长期运行或高并发度任务。
此外,增加Java的依赖性十分容易,当一个依赖包被修改或删除时,可能会扰乱大量的部署软件。
简介
WebAssembly是一种低级语言,一开始是为了给Web提供近似本地的表现。它使用基于栈的执行模型,运行在一个虚拟机上。WebAssembly binaries也被叫做模块,可以通过二进制或者文本的方式表示。这样可以将像是C、C++、Rust、C#、Go和AssemblyScript这些语言通过Emscripten之类的编译器编译到WebAssembly。然后这些模块可以被import到JS或者其他宿主环境中并实例化,并且每个模块都在单独的互相隔离的上下文中运行,拥有独立的内存二和运行栈。
WebAssembly目标是构造一种新的标准,使其能够比JavaScript更加安全、快速和方便地将代码部署到web端。并且它可以将用C,C++和Rust这种更高级的语言编写的程序交叉编译并运行在web端。但是WebAssembly不仅仅局限于web端,它可以被用在很多主机环境中,比如,它可以通过WebAssembly的接口将C应用移植并像普通的桌面应用那样运行。
但是目前WebAssembly还不像其他本地编译器那样成熟,所以一些特定的代码可能会在这些平台上表现出不同的行为,从而导致在将程序移植到WebAssembly的过程中产生一些潜在的bug,并且可能会引发安全问题。