用自己的編程語言實現(xiàn)了一個網(wǎng)站(增強版)
前言
前段時間在《??用自己的編程語言實現(xiàn)了一個網(wǎng)站???》用介紹了用 GScript 寫的一個簡單“網(wǎng)站”,雖然是打上引號的;頁面長這樣:
GScript-index.jpg
看起來確實非常的挫,其實之前一直也想做一個 GScript 的在線 playground ,于是國慶期間學(xué)了一點 皮毛 Vue 加上老弟的幫忙(他是前端開發(fā)),最終完成了下面這個網(wǎng)站:
https://gscript.crossoverjie.top/。
image.png
?打印源碼參考了:https://wa-lang.org/playground/
在這里可以在線運行 GScript 代碼,借助于前端的代碼編輯器插件甚至還能有一些語法提示。
不過有些提示與 GScript 的語法不兼容,畢竟編輯器的提示是基于 JavaScript 的語法。
image.png
內(nèi)置了幾個 demo,可以選擇運行試試。
同時也支持查看 AST 樹和 symbol 符號表。
雖然顯示上還有待優(yōu)化。
整個后端接口全都是用 GScript 原生代碼編寫的,所以這也算是 GScript 的一個實際應(yīng)用案例。
代碼示例
實際代碼量也并不多,將前端輸入的代碼寫入到一個臨時文件,再調(diào)用 OS 的 command api 在本地執(zhí)行 GScript 腳本命令,最后將標準輸出和錯誤返回即可。
版本更新
為了能實現(xiàn)上述的需求,所以本次也更新了 GScript 的版本,新增了一些內(nèi)置 API。
主要是新增了 playground 需要的一些 OS api、文件寫入、執(zhí)行系統(tǒng)命令、日期相關(guān)等。
同時將同一類的 API 合并到一個 class 中,方便后期維護與調(diào)用。
編譯錯誤
除此之外也新增了一些易用功能,比如現(xiàn)在提供了更友好的編譯錯誤信息:
運行時錯誤
運行時的異?,F(xiàn)在也有對應(yīng)提示:
只不過目前的顯示還不太友好,打印的堆棧還是 Go 的,之后會優(yōu)化為只顯示 GScript 的堆棧。
總結(jié)
有了在線的 playground 后使得對 GScript 感興趣的門檻更低了一些,歡迎大家試用。
經(jīng)過最近幾個版本的迭代,GScript 也逐步完善了,基本完成了第一版本的需求。
后續(xù)會繼續(xù)完善第二階段的,比如:
- namespace
- 包管理
- 并發(fā)
等內(nèi)容,每一項看起來都不是那么容易啊。
之前有不少人問我 GScript 是拿來解決什么問題的?當時我確實沒仔細想過;不過現(xiàn)在經(jīng)過幾個版本的開發(fā)有了一點想法:
是否可以將 GScript 作為一個腳本化的 Go 語言,畢竟 Go 是編譯類型的,每次修改發(fā)布都需要經(jīng)過編譯才能運行,但如果可以像腳本語言,比如 Python、Bash 修改后就可以直接運行,這在寫一些不是那么重的業(yè)務(wù)時非常有用。
同時借助于語法糖甚至可以優(yōu)化掉 Go 本身被人“吐槽”的地方,比如異常、append 函數(shù)、沒有運算符重載、三目運算符等。
部分吐槽 GScript 已經(jīng)支持。
同時因為得益于本身也是 Go 編寫的,所以 Go 的一些優(yōu)點也能繼承過來,比如輕量級的協(xié)程等。
Go 本身也有大量的第三方庫,后續(xù)甚至也能直接使用這些現(xiàn)成的庫。
以上只是一些美好的暢想,就像老板畫的大餅一樣,具體在實現(xiàn)過程中可能又有不一樣的想法。
playground 地址:https://gscript.crossoverjie.top/。
源碼地址:https://github.com/crossoverjie/gscript。