使用全新的Joy编译器将Go转换为JavaScript

发布于:2021-01-15 14:42:33

0

299

0

Go JavaScript 编译器

全新的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(); })()