talkgo/night

第 55 期 Go&WebAssembly 简介

chai2010 opened this issue · 5 comments

WebAssembly 简介

WebAssembly是一种新兴的网页虚拟机标准,它的设计目标包括:高可移植性、高安全性、高效率(包括载入效率和运行效率)、尽可能小的程序体积。

根据 Ending定律:⼀切可被编译为WebAssembly的,终将被编译为WebAssembly。

本次分享Go&WebAssembly相关的用法。

分享时间

2019-08-15 21:00:00

分享地址

zoom 地址:https://zoom.us/j/6923842137

部分内容:浏览器中的超级玛丽

https://talks.godoc.org/github.com/chai2010/awesome-go-zh/chai2010/chai2010-golang-wasm.slide#18

预习资料

补充一下go官方给的wiki https://github.com/golang/go/wiki/WebAssembly 以及
WebAssembly 官网 https://webassembly.org/
个人比较倾向于对于 https://github.com/gopherjs/gopherjs 来比较理解,相对于go->js(包括react等等)的方案,WebAssembly带来的异同是什么?

@FelixSeptem wasm和gopherjs最大的差异:wasm是官方支持,同时wasm是国际标准是其它语言认可的中间格式。

以前虽然很多工具输出js,那是因为没有wasm可以选择。
现在有了wasm,大家肯定只支持wasm而逐渐弱化js的支持。
毕竟wasm虚拟机实现比v8简单多了,性能又可以秒杀js。

wasm最大的潜力是在浏览器之外,甚至可以想象成一个轻量化的Docker环境。
我觉得这个才是wasm真正有意思的地方,wasm对于js完全属于降维打击。

LGTM

还没有在生产环境使用过 wasm。从给的马里奥的例子来看,go wasm 本质上是分发由 Go 编译好 .wasm,而 Go 端的本质就是提供了一些能够解释为 wasm 的 utils。不太清楚会不会在分享中提及这一本质。

长远来看,这个 .wasm 文件在特性支持的情况下最终会包含完整的 Go 运行时,
但 go wasm 并没有明确在 web 场景下为什么一定需要它,当然不可否认它的确为兼容并移植 Go 代码来发展 web 应用带来了便捷,但前提是我们必须有足够多基础设施是基于 Go 的,但游戏并没有,非常希望看到一些能够说服用 Go 写 wasm 而不是其他语言(C/C++ 有着丰富的图形资产,而 Go 在这方面的积累为 0,甚至连马里奥的例子都是依赖一个 cgo 对 c sdl2 renderer 的封装)编译 wasm 的论点。

对逆向工程和 WebAssembly 不太了解,不知道 wasm 反编译困难吗?