乐趣区

关于go:用自己的编程语言实现了一个网站增强版

前言

前段时间在《用本人的编程语言实现了一个网站》用介绍了用 GScript 写的一个简略“网站”,尽管是打上引号的;页面长这样:

看起来的确十分的挫,其实之前始终也想做一个 GScript 的在线 playground,于是国庆期间学了一点 皮毛 Vue 加上老弟的帮忙(他是前端开发),最终实现了上面这个网站:

https://gscript.crossoverjie.top/

❤打印源码参考了:https://wa-lang.org/playground/

在这里能够在线运行 GScript 代码,借助于前端的代码编辑器插件甚至还能有一些语法提醒。

不过有些提醒与 GScript 的语法不兼容,毕竟编辑器的提醒是基于 JavaScript 的语法。

内置了几个 demo,能够抉择运行试试。

同时也反对查看 AST 树和 symbol 符号表。

尽管显示上还有待优化。

整个后端接口全都是用 GScript 原生代码编写的,所以这也算是 GScript 的一个理论利用案例。

代码示例

理论代码量也并不多,将前端输出的代码写入到一个临时文件,再调用 OS 的 command api 在本地执行 GScript 脚本命令,最初将规范输入和谬误返回即可。

版本更新

为了能实现上述的需要,所以本次也更新了 GScript 的版本,新增了一些内置 API

次要是新增了 playground 须要的一些 OS api、文件写入、执行系统命令、日期相干等。

同时将同一类的 API 合并到一个 class 中,不便前期保护与调用。

编译谬误

除此之外也新增了一些易用性能,比方当初提供了更敌对的编译错误信息:

运行时谬误

运行时的异样当初也有对应提醒:

只不过目前的显示还不太敌对,打印的堆栈还是 Go 的,之后会优化为只显示 GScript 的堆栈。

总结

有了在线的 playground 后使得对 GScript 感兴趣的门槛更低了一些,欢送大家试用。


通过最近几个版本的迭代,GScript 也逐步完善了,根本实现了第一版本的需要。

后续会持续欠缺第二阶段的,比方:

  • namespace
  • 包治理
  • 并发

等内容,每一项看起来都不是那么容易啊。

之前有不少人问我 GScript 是拿来解决什么问题的?过后我的确没认真想过;不过当初通过几个版本的开发有了一点想法:

是否能够将 GScript 作为一个脚本化的 Go 语言,毕竟 Go 是编译类型的,每次批改公布都须要通过编译能力运行,但如果能够像脚本语言,比方 Python、Bash 批改后就能够间接运行,这在写一些不是那么重的业务时十分有用。

同时借助于语法糖甚至能够优化掉 Go 自身被人“吐槽”的中央,比方异样、append 函数、没有运算符重载、三目运算符等。

局部吐槽 GScript 曾经反对。

同时因为得益于自身也是 Go 编写的,所以 Go 的一些长处也能继承过去,比方轻量级的协程等。

Go 自身也有大量的第三方库,后续甚至也能间接应用这些现成的库。

以上只是一些美妙的畅想,就像老板画的大饼一样,具体在实现过程中可能又有不一样的想法,欢送提供倡议。

playground 地址:
https://gscript.crossoverjie.top/

源码地址:
https://github.com/crossoverjie/gscript

退出移动版