目标是取代Javascript?Go语言官方将支持WebAssembly架构编译

新兴系统语言Go也鸭子划水,即将在GO 1.11的编译器中,让开发者直接把程序编译成WebAssembly,让位元组码可以在浏览器或是Node.js等非Web环境执行,Go社群直言,这个动作的目的就是要让Go取代Javascript。

看来网页环境现在是系统程序语言的兵家必争之地,除了Mozilla积极改进Rust,增加与WebAssembly和Javascript的互通性外,新兴系统语言Go也鸭子划水,即将在GO 1.11的编译器中,让开发者直接把程序编译成WebAssembly,让位元组码可以在浏览器或是Node.js等非Web环境执行,Go社群直言,这个动作的目的就是要让Go取代Javascript。

Go社群在今年2月的时候释出,在Go编译器中加入WebAssembly架构的设计文件以及代码专案,Go官方认为,让Go成为JavaScript的替代品,作为一种Web应用程式的开发语言,将对软体工程生态系有积极的影响。

官方文件提到了一些Go语言与WebAssembly的差异,以及可能的处理方式。与Javascript相反,WebAssembly完全支持64位整数,但目前只能用32位整数寻址,因此使用的內存容量被限制在4GB,不过在Go的WebAssembly架构中支持64位指标,因此计画在容许的条件下,可转换成64位运算。

图0:目标是取代Javascript?Go语言官方将支持WebAssembly架构编译

与多数的暂存器机架构不同,WebAssembly属于堆叠机器,会维护自己的堆叠,每个函数也都可以有任意数量的区域变量,官方表示,完全使用WebAssembly的堆叠,并非Go现在的选择,Go需要可以检查堆叠做垃圾回收还有追踪堆叠等工作。

Go的WebAssembly架构完全支持垃圾回收功能,而WebAssembly也正着手进行增加自己的垃圾回收功能,但文件提到,很难想像能比专门为Go量身订制的垃圾回收有更好的性能。

官方表示,他们的开发方向会支持所有Go的规格,并且尽量保留开发者喜欢的Go重要功能,目前还有不少提升性能的工作要进行,特别是Go语言中的goto语法在WebAssembly会特别有用,现在专案的进度已经可以让有兴趣的人开始尝试。

另外,WebAssembly除了可以被设计成能在Web环境中执行外,在非Web环境像是Node.js这种JavaScript VM也没问题,同时也能在小型壳层测试或是被使用在完整的应用程式。关于这方面的设计,官方表示有很多还需要考察,毕竟不同环境需要的功能不同,在非Web环境会需要与Web环境不同的API,但在Web与非Web使用情境大量重叠的状况,将会对此提出共同规范。

阅读余下内容

发表评论

电子邮件地址不会被公开。 必填项已用*标注


京ICP备12002735号