什么是WebAssembly(Wasm)?

WebAssembly是什么?

WASM是什么?带你了解WebAssembly的前世今生
参考URL: http://www.mabiji.com/webassembly/wasm.html

WebAssembly是什么?WebAssembly即WASM, WebAssembly是一种新的编码格式并且可以在浏览器中运行,WASM可以与JavaScript并存,WASM更类似一种低级的汇编语言。

WebAssembly(又名wasm)是一种高效的,低级别的编程语言。 它让我们能够使用JavaScript以外的语言(例如C,C ++,Rust或其他)编写程序,然后将其编译成WebAssembly,进而生成一个加载和执行速度非常快的Web应用程序。

Wasm 具有运行高效、内存安全、无未定义行为和平台独立等特点,经过了编译器和标准化团队多年耕耘,目前已经有了成熟的社区。

WebAssembly和Rust

WebAssembly和Rust是紧密相关联的。WebAssembly是基于堆栈的虚拟机的二进制指令格式,它被设计为编程语言的可移植编译目标。目前很多语言都已经将 WebAssembly 作为它的编译目标了,但是不同的语言编译的成熟度不同。目前最高成熟度的语言有几个:C/C++/Rust。

目前对于WebAssembly来说的最佳选择还是Rust。因为Mozilla同时全力在推 WebAssembly 和 Rust(WebAssembly 标准是由Mozilla主导的,同时Rust也诞生于Mozilla)。

WebAssembly和JavaScript

WebAssembly 的出现是否会取代 JavaScript?
参考URL: https://www.zhihu.com/question/322007706

提到WebAssembly大家很自然的会想到JavaScript,WebAssembly并不是JavaScript的替代,二者可以协同工作,通过使用WebAssembly的JavaScript API,把WebAssembly模块加载到一个JavaScript应用中并且在两者之间共享功能。

WebAssembly优势

  • 快速高效:WebAssembly被设计为针对Size和Load Time进行优化的格式,可以在各个硬件平台上以native speed运行;
  • 安全性:WebAssembly是运行在沙盒内的,甚至可以和当前的Java虚拟机共享一套环境,并且也遵守浏览器各种跨域不跨域的规章制度;
  • 开放性:WebAssembly开放标准,不受任何一家厂商控制,并且被设计为可以和Java API和Context交互。

wasm只是一个字节码标准,人们可以基于这个标准开发高级语言。类似jvm一样,很多语言可以编译成jvm字节码,从而使用jvm平台。wasm出现的意义是使用其他语言开发web app成为可能。之前也有其他语言,比如typescript开发,但是都是把代码编译成JavaScript运行,本质上还是使用的JavaScript. 个人认为JavaScript以后会作为浏览器默认支持的高级语言一直存在下去,但是wasm出现可以使基于web的开发工具出现百花齐放的状态,web端可能出现类似Java这样适合大型项目的静态类型语言。以后浏览器可能成为第二操作系统,大部分的用户应用都是云端app,少部分应用才需要安装到本地操作系统。

**WebAssembly 目前还不具备 IO 以及 DOM 访问能力。**跟外接的交互只有实现函数并导出,以及在函数实现中调用导入的函数。如果在浏览器或者 Node.js 中运行一定需要借助 JavaScript 才行。

WebAssembly虽然可以实现一套VM环境,但是我认为不会取代JS,WASM应该作为JS的扩展而存在,由于JS的性能有限WASM可以实现一些高性能组件。
比如:编码工具,图像音频处理,数据分析等。

将DLL(动态链接库)编译成WebAssembly格式是一个涉及多个步骤的过程。WebAssembly是一个能够在现代浏览器中运行的低级代码格式,它可以与JavaScript协作并为网络应用提供高性能。下面是将DLL转换为WebAssembly的一般步骤: 1. **检查DLL的兼容性**:首先需要检查你的DLL是否包含了可以被WebAssembly支持的语言特性。因为WebAssembly目前主要支持C和C++,所以你需要确保DLL是用这些语言编写的,或者至少包含了可以被这些语言调用的接口。 2. **选择合适的工具链**:目前,Emscripten是一个非常流行的编译器工具链,它可以将C/C++代码编译成WebAssembly。如果你的DLL是用C/C++编写的,那么可以使用Emscripten来进行编译。 3. **使用Emscripten编译DLL**:将DLL转换为WebAssembly通常涉及到两个主要步骤:一是使用Emscripten将C/C++代码编译成WebAssembly模块(.wasm文件),二是在Web应用程序中加载和使用这些模块。 - 使用Emscripten前端将你的DLL中的C/C++源码重新编译为WebAssembly模块。这个过程可能需要修改代码以适配Web环境,比如使用Web API替代某些特定的系统调用。 - 编写JavaScript代码来加载和实例化生成的WebAssembly模块,并创建相应的JavaScript接口以便其他Web代码可以使用这些模块。 4. **在Web应用中使用WebAssembly模块**:一旦你有了.wasm文件和相应的JavaScript绑定,你就可以在HTML页面中通过JavaScript调用这些WebAssembly模块的功能了。 5. **优化和测试**:编译完成后,你需要对生成的WebAssembly代码进行测试和优化,确保其在Web环境中运行正常,并且性能达到预期。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西京刀客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值