内容简介:我今天想分享一个非常酷的项目首先让我说 Go 中的 Web Assembly 有一个大问题,它太过依赖于完成任务而定制的 API。在我看来当我发现
我今天想分享一个非常酷的项目 tinygo 经历。
首先让我说 Go 中的 Web Assembly 有一个大问题,它太过依赖于完成任务而定制的 API。在我看来 syscalls/js
是错误的使用 Web Assembly 方式:
- Go 开发者不应该学习 JavaScript
- 随着时间的推移,Web Assembly 将获得自己的 API,可能基于 WebIDL
- 它对运行 Web Assembly 的主机做了太多假设,甚至导入让模块运行所需的功能也是如此
- 调用本身在 Web Assembly 堆栈机器中(不是一些抽象)的外部函数将始终是最快的方法。
当我发现 tinygo
非常高兴,它编译一个 Web assembly 模块并使用更少的假设来发现该模块,而且有一个非常简单的基于注释的系统用于导入函数 - 据我所知,在主线 Go 编译器中是不可能的。
tinygo
利用 LLVM,并能够很好地将 Web assembly 模块减少相当大的数量。这让我能做的就是编写像这个 hello world
这样的非常小的模块:
package main //go:export console_log func console_log(msg string) //go:export main func start(){ console_log("hello world") } func main() {}
编译下来,这个模块只有 2 个导入要求:
- console_log
- io_std_out(因为目前 tinygo 假设有一些运行时)
导出:
- main
在我迄今为止看到的用于 Web assembly 技术的所有选项中,这和我希望的一样好。
我一直在编写一些库,这些库使用基于浏览器 Web IDL(浏览器环境具有哪些功能的标准化描述)来暴露一些非常有效的 DOM 操作 API: richardanaya/wasm-module
你可以通过大量的命令式函数的调用来获取 DOM 中的资源句柄并操纵它们,而不是制作系统 syscalls/js
。这种方法的优点是它非常简单和 C 类似,并且不需要您自己的特殊代码生成,并且完全与技术无关。只需导入您需要的功能。
这是一个画布应用程序的示例
package main //go:export global_getWindow func GetWindow() int32 //go:export Window_get_document func GetDocument(window int32) int32 //go:export Document_querySelector func QuerySelector(document int32 ,query string) int32 //go:export HTMLCanvasElement_getContext func GetContext(element int32,context string) int32 //go:export CanvasRenderingContext2D_fillRect func FillRect(ctx ,x ,y ,w ,h int32) //go:export CanvasRenderingContext2D_set_fillStyle func FillStyle(ctx int32, fillStyle string) func cstr(s string) string{ return s+"\000" } //go:export main func start(){ win := GetWindow() doc := GetDocument(win) canvas := QuerySelector(doc,cstr("#screen")) ctx := GetContext(canvas,cstr("2d")) FillRect(ctx,0,0,50,50) FillStyle(ctx,cstr("red")) FillRect(ctx,10,10,50,50) FillStyle(ctx,cstr("grey")) FillRect(ctx,20,20,50,50) } func main() {}
你可以 在这里 看到这个工作
总的来说,我很高兴在我的工具箱中再添加一个 工具 来更加简单方便的创建 Web assembly。也许通过一些工作, tinygo
可以生成的更简洁,并像 Rust
一样在网络的下一个技术平台上坚实可靠。
以上所述就是小编给大家介绍的《使用 Go 和 LLVM 进行 Web Assembly 的高效前端开发》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 前端项目如何使用sonar qube进行代码质量检查
- 在同一基准下对前端框架进行比较(2019年更新)
- 【译】使用 webpack 进行 web 性能优化(一):减小前端资源大小
- 技术讨论 | 如何对经前端加密后的数据进行爆破
- ZUI前端框架发布 1.9.2 版本,修复已知问题,并进行大量改进
- “前端智造,内容新生”,腾讯 2020 TLC 大会来袭,早鸟预售火热进行中
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
编译原理
Alfred V. Aho、Monica S.Lam、Ravi Sethi、Jeffrey D. Ullman / 赵建华、郑滔、戴新宇 / 机械工业出版社 / 2008年12月 / 89.00元
本书全面、深入地探讨了编译器设计方面的重要主题,包括词法分析、语法分析、语法制导定义和语法制导翻译、运行时刻环境、目标代码生成、代码优化技术、并行性检测以及过程间分析技术,并在相关章节中给出大量的实例。与上一版相比,本书进行了全面的修订,涵盖了编译器开发方面的最新进展。每章中都提供了大量的系统及参考文献。 本书是编译原理课程方面的经典教材,内容丰富,适合作为高等院校计算机及相关专业本科生及研......一起来看看 《编译原理》 这本书的介绍吧!