webassembly 是一个实验性的低端编程语言,应用于浏览器内的客户端?

2020-01-15 14:23:53 +08:00
 chuhemiao
  1. 看了下维基,也是一头雾水,12 月 5 日成为万维网联盟( W3C )的推荐为 WEB 的第四种语言,

  2. webassembly 维基

  3. 话说这个语言的实用性在哪,求大佬科普

7552 次点击
所在节点    Web Dev
37 条回复
slanternsw
2020-01-16 02:18:39 +08:00
顺便最完善的 wasm 工具链得用 rust. wasm-bindgen 有和没有是完全不同的开发体验。
lookas2001
2020-01-16 08:09:37 +08:00
wasm 的诞生是由于
1 js 性能不是特别好
2 js 有太多历史问题(设计上等)
3 js 垄断了前端开发
故 wasm 的设计
1 足够底层,运行起来足够快
wasm 的不足
1 导致源代码不可读
2 到现在为止调用浏览器提供的接口只能通过 js 进行

其实把浏览器看成一个小操作系统未尝不可。
js api 其实就可以理解为 system call
只不过更加高层,抽象罢了。

推荐 rust+1
yksoft1test
2020-01-16 08:10:52 +08:00
wasm 可以相当于一台虚拟机,可以执行编译型语言。我之前把一些模拟器 port 到了 Emscripten 平台,Emscripten 平台支持把 C/C++的代码编译到 wasm。
https://yksoft1.github.io/
lookas2001
2020-01-16 08:12:52 +08:00
云游戏不是用这些技术的。
云游戏是运算在服务器上完成,把画面发到到客户端。
这个本质上运算还是在客户端上进行的,服务器仅仅提供的是需要运算的代码。
murmur
2020-01-16 08:18:57 +08:00
目前 wasm 主要用于加密,而且有落地的例子,比如 google 那个牛逼验证码就是类似的一个虚拟机
至于 figma,跟墨刀一样(我在用墨刀),很好,但是别人还是用 sketch,adobe xd 别人都看不上
前端现在的迷惑就在这里,你自以为做了一个很牛逼的东西,把 pc 端的软件迁移到浏览器里,但是别人还是用 pc 端软件
didiv
2020-01-16 08:40:49 +08:00
Livid
2020-01-16 08:44:01 +08:00
这里有一个很有趣的例子:

https://milek7.pl/openttd-wasm/
agdhole
2020-01-16 09:22:16 +08:00
哔哩哔哩的视频投稿生成封面功能就是在本地的 wasm 里做的
seakingii
2020-01-16 10:00:11 +08:00
上面有人说虚拟机.... 推荐一个 DEMO,用 WASM 开发的 虚拟机, 在浏览器里运行 LINUX,WINDOWS 操作系统...


WIN2000 https://bellard.org/jslinux/vm.html?url=https://bellard.org/jslinux/win2k.cfg&mem=192&graphic=1&w=1024&h=768


更多的虚拟机列表 https://bellard.org/jslinux/






tabris17
2020-01-16 10:02:18 +08:00
你可以把 wasm 理解成浏览器中运行的汇编语言
civet
2020-01-16 11:09:11 +08:00
低端编程语言亮了
libook
2020-01-16 11:33:26 +08:00
Assembly 就是汇编,往往代表直接以机器码形式呈现的程序,你可以想想以往的汇编语言的特点是什么,WebAssembly 是在浏览器端(严格来说是引擎端)的一种具备汇编特点的技术。

举个例子:浏览器上往往只支持 JS、CSS、HTML 三种语言,这些都是以源码的形式由浏览器实时解释运行的语言,浏览器内部实现了这些语言的语法、API 的细节,对计算机底层机器码进行了功能上的封装,特点是人类友好、性能较差;而 WebAssembly 是直接运行机器码,虽然是在 VM 或沙盒上运行的,但开销极低,特点是人类不友好、性能较强。

实际上用 WebAssembly 来做开发也不是直接写 WebAssembly,依靠 LLVM 编译器的强大功能,可以将很多语言的程序编译成 WebAssembly,比如 C/C++、Rust、C#/.Net 、Java、Python、Go,以往 C 语言是直接编译成机器码跑在硬件或操作系统上,WebAssembly 可以让 C 语言编译成 WebAssembly、转化成 WebAssembly VM 或沙盒机器码运行、VM 或沙盒在硬件或操作系统上,由于中间 VM 或沙盒的开销极低,所以可以让程序的性能与直接跑在硬件或操作系统上相近。

既然是 Web 开头的技术,那么还有一个很大的特点就是可以和 JS 互操作。

应用场景基本就是在浏览器端有强性能需求的场景,比如 AI、视频编解码器、图形引擎,或者仅仅是想把桌面软件迁移到浏览器上( AutoDesk 将 AutoCAD 迁移到了浏览器上)。
murmur
2020-01-16 11:44:43 +08:00
autocad 就别吹了,吹过的最好去申请个账号试试,免费的,这东西唯一用途就是提供了一个官方的在线 CAD 预览方案,以后真的提供本地版本就可以做图纸 web 浏览器了
至于设计,连玩具都谈不上,先不说 cad 的插件体系,国内各种国产 cad 都有自己的插件,web 版的连功能都残缺
CAD 这东西不是家用,要用就是重使用,他不是 ps,小的可以修个照片切个图,大的可以做设计,不是专业设计师装 CAD 干嘛。。。
lc1450
2020-01-16 16:06:04 +08:00
@yksoft1test 您好,我最近在研究模拟器相关的东西, 能否留个联系方式(或者加我 q:MTQ1MDc1NTMyMw==),有些问题需要请教
yksoft1test
2020-01-16 16:17:02 +08:00
@lc1450 我现在连 DOSBox 那个已经非常清晰的 CPU 部分都没法完全搞懂。你请教错人了
mlzboy
2020-03-26 12:49:21 +08:00
@seakingii 老哥,有 github 地址么,这个网址打不开了,想学习一下怎么应用 webassembly
seakingii
2020-03-26 15:02:38 +08:00
@mlzboy

GO 语言编写 WebAssembly 的教程

https://github.com/golang/go/wiki/WebAssembly

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/638114

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX