WebAssembly 与Rust编程系列01 WebAssembly 是什么
Background: 背景说明
在经历过前几年React
Angular
Vue
三大开发框架的颠覆性的变革后, 当前web最火爆的技术应该一多半会在 WebAssembly
上;
随着 WebAssembly Post-MVP 标准的逐渐完善, 以及 谷歌和 Mozilla 对 WebAssembly 极尽所能的推广,都可以看出 WebAssembly
即将在未来一两年
大放异彩.
如果把眼光脱离开 web
的局限, Wasm 在 “out-of-web” 领域的发展速度更是让人激动不已.
所以 这篇文章主要 WebAssembly
到底是什么, 能够提供给我们什么样的能力.
WebAssembly 是什么
WebAssembly是一种新的编码方式,可以在现代的网络浏览器中运行 - 它是一种低级的类汇编语言,具有紧凑的二进制格式,可以接近原生的性能运行,并为诸如C / C ++等语言提供一个编译目标,以便它们可以在Web上运行。它也被设计为可以与JavaScript共存,允许两者一起工作。
WebAssembly是一种运行在现代网络浏览器中的新型代码,并且提供新的性能特性和效果。它设计的目的不是为了手写代码, 而是为诸如C、C++和Rust等低级源语言提供一个高效的编译目标。
上述两段话其实很精确的定义了 WebAssembly 是什么的概念,但是并不好懂;知其难而绕行之,我们可以从我们熟悉的一些概念,也就是 从 WebAssembly 不是什么的反面去了解它;
WebAssembly 不是什么
WebAssembly 不是 JavaScript的编译器
这其实是刚接触 WebAssembly最容易产生的一个误解, WebAssembly 并不是一个将其他诸如 C C++ Java 等
高级语言 编译为 JavaScript的工具
WebAssembly 可以作为 很多高级语言的编译目标, 但这个编译目标本身跟JavaScript并没有关系,
当然需要指出的是, 我们可以将 TypeScript 编译成 WebAssembly 模块;
总结而言, WebAssembly 本身是一个最终目标, 是一套自己定义的紧凑格式的二进制格式
WebAssembly 不是 JavaScript 的替代方案
WebAssembly 不是用来替代 JavaScript 的, 尽管网上很多 WebAssembly 的信徒一直在宣扬JavaScript的消亡,
但是 WebAssembly 只是开辟一个新的领域,这个或许会削弱Javascript 的重要性;更为重要的是,到目前为止,WebAssembly想要在
浏览器中执行,必须要JavaScript的加载;
WebAssembly 被设计为和JavaScript一起协同工作的, 从而使得网络开发者能够利用两种语言的优势:
-
JavaScript是一门高级语言。对于写网络应用程序而言,它足够灵活且富有表达力。它有许多优势——它是动态类型的,不需要编译环节以及一个巨大的能够提供强大框架、库和其他工具的生态系统。
-
WebAssembly是一门低级的类汇编语言。它有一种紧凑的二进制格式,使其能够以接近原生性能的速度运行,并且为诸如C++和Rust等拥有低级的内存模型语言提供了一个编译目标以便它们能够在网络上运行。
显然, WebAssembly 也不是那些 Flash, Silverlight, Adobe AIR, or Java Applets 的替代方案;
WebAssembly 不是 一门编程语言
尽管如定义所言, WebAssembly有一套的自己二进制格式以及 文本格式,但应该不会有人用它来编写程序和模块;
知道如何手动编写这些代码,往往更多的只是为了更好的理解 WebAssembly 而已
WebAssembly 能提供什么
- 快速、高效、可移植 —— 通过利用常见的硬件能力,WebAssembly代码在不同平台上能够以接近本地速度运行。
- 可读、可调试——WebAssembly是一门低阶语言,但是它有确实有一种人类可读的文本格式(其标准即将得到最终版本),这允许通过手工来写代码,看代码以及调试代码。
- 保持安全——WebAssembly被限制运行在一个安全的沙箱执行环境中。像其他网络代码一样,它遵循浏览器的同源策略和授权策略。
- 不破坏网络——WebAssembly的设计原则是与其他网络技术和谐共处并保持向后兼容。