发布于:2021-01-15 14:42:33
0
299
0
全新的Joy编译器使用可在每种浏览器中使用的JavaScript,将Go的经典设计带到了前端。使用此简单的Go编译器,代码只需编写一次即可在任何地方读取。
Joy编译器承诺通过一个非常简单的工具将Go的简洁性带给JavaScript。现在,您可以使用Go的稳定性,但仍然使用JavaScript执行,使构建大型web应用程序变得越来越容易。
至少可以说,编写和维护持久的JavaScript是非常耗时的。多亏了JavaScript语言在过去几年里的巨大变化,主要的突破性变化以及随之而来的工具和库问题。虽然JavaScript不会有任何发展,但它与Joy编译器一起使用变得简单多了。
欢乐世界
基于这一理论,类型化代码更容易维护和更新,更少的语法比更漂亮的语法更好,Joy翻译成JavaScript。因此,您可以使用简单的Go编写代码,但仍然可以使用非常有用的JavaScript进行部署。
Joy是一个快速的1:1的JavaScript编译器,旨在从惯用的Go创建简洁的JavaScript。它使用Go的静态分析工具来消除无用代码,并创建适用于所有浏览器的JavaScript。它包含一个简单的宏系统,用于与现有JavaScript集成。Joy还对React和Preact等虚拟DOM框架提供了一流的支持。
Joy是GitHub上的开源软件,提供零成本类型的DOM和虚拟DOM包。它只在需要的时候提供最小的运行时,并尽可能避免未使用的代码。Joy拥护使用标准库和工具。
它是如何工作的
Joy编译器有5个步骤:解析、索引、绘图、翻译和汇编。
解析将Go代码转换为抽象语法树(AST)。这主要是使用Go团队提供的x/tools/loader库来完成的。
索引处理这些Go ast,使我们能够回答有关程序的深层次问题。
Graph使用索引创建依赖关系图。该图按拓扑顺序排序并进行修剪,结果产生一个包含程序中使用的函数、变量、结构和接口的节点列表。
Translate使用图中的节点和索引中的知识将Go AST翻译成JavaScript AST。
Assemble接受生成的JavaScript AST并生成JavaScript代码。
下面是一个简单的睡眠路径经过Joy编译器后的样子。
package main import ( "time" ) func main() { time.Sleep(1 * time.Second) }
现在看看它在JavaScript中的样子:
(function() { var pkg = {}; pkg["58-time-sleep"] = (function() { async function main () { await new Promise(function(resolve, reject) { setTimeout(resolve, 1 * 1000) }) }; return { main: main }; })(); return pkg["58-time-sleep"].main(); })()
作者介绍