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

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

  2. webassembly 维基

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

7538 次点击
所在节点    Web Dev
37 条回复
darmau
2020-01-15 14:34:16 +08:00
可以用 chrome 打开 https://earth.google.com/web/ 看看

还有 https://www.figma.com/ ,找个设计文档打开看看中间的画布。

就知道 webassembly 能实现什么效果了
chuhemiao
2020-01-15 15:45:48 +08:00
@darmau figma 貌似是在线协作工具把
darmau
2020-01-15 16:02:29 +08:00
@chuhemiao 是。中间的画布部分是 canvas,用 webassembly 来控制,跟本地的画图应用没啥区别,甚至更强
mxT52CRuqR6o5
2020-01-15 16:03:22 +08:00
可以理解为类似于 jvm 的东西
youngster
2020-01-15 16:05:35 +08:00
让一切都可以容器化了啊,而且可视界面的那种
Hoshinokozo
2020-01-15 16:06:59 +08:00
WASM 不算编程语言,而是一种字节码标准,很多语言都能编译成 WASM
whileFalse
2020-01-15 16:12:26 +08:00
打个比方,你有一个 java 运行环境。以前这个运行环境只接受.java 源代码,该运行环境在内部编译成字节码,然后运行。
后来该环境进行了升级,可以接受 jvm 字节码输入。第一个优势当然是因为省却了编译过程,从而提升了运行速度。
第二个优势是,很多其他语言也可以编译成字节码。所以用 Scala、Kotlin 写的程序也能在该平台运行了。

同理,以前浏览器只能运行 js,需要在运行时编译。现在各个浏览器厂商达成了一致意见,推出了一个共同的字节码标准,日后浏览器可以支持运行这种字节码。所以既提高了启动速度,又能支持更多语言。
DOLLOR
2020-01-15 16:15:54 +08:00
还记得以前的 flash 么? wasm 就相当于当年的 swf。让 C 和 Rust 这种高性能语言编译成 wasm,能在浏览器上运行。
madao
2020-01-15 16:36:40 +08:00
@DOLLOR
如官网的描述所说,WebAssembly 是一种基于堆栈的虚拟机的二进制指令格式。
但是注意一个重点:它不仅仅能运行在浏览器,事实上我们在各个场景下都做了 wasm 的执行 runtime,无论是操作系统级别的( WASI ),还是嵌入式的应用接下来都会往下继续做更多的实践。

@Hoshinokozo 是的,但是有 WAT,WebAssembly Text Format,算是某种意义上和 wasm 最正相关的编程语言,但是实现上还是会用其他的高级语言。
chuhemiao
2020-01-15 16:51:35 +08:00
@youngster @madao 所以现在大厂都在推云游戏 也是有类似的技术?还是直接用的是这个东西
zunceng
2020-01-15 16:52:30 +08:00
低端这两个字。。。应该是底层的意思吧
madao
2020-01-15 17:31:29 +08:00
@chuhemiao wasm 除开在特定的计算和字节码解析(因为本来就是)有优势,事实上你的 JavaScript 写的足够好,你的 peak performance 是不会输给 Wasm 很多的噢,不过 WASM 是提供给你一个更加多元的的实践的选择(同时让你用静态语言写前端)。

这块今年我应该会做一个「完全同构」的前后端开发分享。
sazima
2020-01-15 21:22:42 +08:00
说一个最近的应用, 这货加载 3d 模型流畅了十倍不止. 以前 cecium 加载 3dtils 卡的要命
但是技术上还不太成熟.
FrankHB
2020-01-15 22:08:46 +08:00
@Hoshinokozo 字节码具有可编程性,为什么不算编程语言?就因为会的人少?照这样说,汇编和机器码是不是也顺带开除出编程语言了?
更不用说 WASM 也不限一种表示,早期还有对应的高级 AST 表示了。
FrankHB
2020-01-15 22:14:35 +08:00
@zunceng 原文是低级(low-level) ,指的是设计有意排除“高级”的抽象特性,不一定是底层。
低级语言可能因为缺乏抽象能力而直接让人读写,但不一定只能在底层发挥作用,比如当作 transpiler 的输入。门槛高了点罢了。
虽然现在的设计似乎是彻底偏向怂到传统路线上了。
slanternsw
2020-01-15 23:41:09 +08:00
https://github.com/bytecodealliance/
让 wasm 跑在浏览器外
好处是天生轻量易于隔离,用在边缘计算之类的地方也很合适
ragnaroks
2020-01-16 00:10:54 +08:00
让浏览器系统化
alphatoad
2020-01-16 01:15:44 +08:00
这两天在尝试 port c 项目到 wasm,折腾死我了
seakingii
2020-01-16 02:00:28 +08:00
从功能效果上可以看成"更低层的 JS 语言"
目前 JS 语言因为它本身的特性,效率不是太高.WASM 是为了改进这一点.

本人搞的一个玩具,用 GO 语言写,转换成 WASM,用来处理图像

https://image.beer
seakingii
2020-01-16 02:03:16 +08:00
另外还有个附带的 功能,就是相对 JS 有更好的加密性...

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

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

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

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

© 2021 V2EX