HiZollo Script

最近搞了很多有關 HiZollo Script 的東西,來順便寫個文介紹和推廣它好了。

起源

HiZollo Script 這概念會被提出是因為 HiZollo 的 calc 指令。這個指令表面上是說可以幫你算數,但實際上他就是個被包裝後的類似 eval 的東西,可以直接執行 JavaScript 的程式。這件事非同小可,因為只要有某個腦袋夠好的用戶,想到了一個可以竊取 HiZollo 機密資料的程式,我們大概就完蛋了。

但考量到這個指令帶來的可能性,我們決定使用禁用詞的方式,把一些可能會危及到 HiZollo 的詞變成不可使用詞,只要在 calc 指令的參數中出現這些字,calc 就會立刻拒絕執行。

這個指令就用了這種方式一直到了 2022 年 2 月 22 日的更新(beta 0.11.2a),我們才把他淘汰掉,理由大致上就是我們意識到了因為 JavaScript 的「語言機制」,理論上我們沒有禁完的一天。

也因此,我們在想一些方法讓 calc 在完全安全的前提下,維持這麼多功能。

我的想法

我最初想到的方法就是設計一種程式語言,這種語言我們可以 100% 掌握它會發生什麼事,且能很容易的擴充,這就是 HiZollo Script 的原型。

由於這些 calc 的功能基本上都是一些會寫程式的進階使用者在用的,所以我決定直接發明一種語言讓人來學習,並定位成簡易、好上手的程式語言(然而是否真的是這樣我就不知道了)。Zollo 也覺得這樣還蠻酷的,我們就在約去年年底開始了這項計劃。

由於是我提出的且我手上比較多做這種東西的相關資訊,所以這項專案最後就是由我負責做。

calc 的未來

在這時還有另一個問題要解決:calc 要怎麼辦?移除掉?砍到剩四則運算的功能?顯然我們不能強迫所有人都去學 HiZollo Script,不是所有人都想有完整操控機器人的能力,只要堪用就好了。所以我們也不可能真的把 calc 移掉。

但如果 calc 只能玩四則運算,那相比於之前的 calc 在數字計算上的能力,那也太弱了,以前是可以算指對數、三角反三角那些東西的,現在就都不行了。所以這樣好像也不是很完美的解決辦法。

最後我們有想到一些其它類似 HiZollo Script 的辦法來解決,但那不是這篇文章的主題,就之後有空再提吧。

發展

HiZollo Script 其實有很大一部分和最最一開始設計的地方不一樣。這是很正常的事,但我在完成很大一部分功能後又大改語言特性,導致要重寫很多地方(???),最終變成了現在大家看到的樣子。基本上 HiZollo Script 是從最一開始殘缺、綁手綁腳的語言,慢慢變成像現在這樣比較完整一個語言的。

我一共換了三種語言來寫 HiZollo Script 的編繹器,本來是 C++,後來本來要用 JavaScript,最後我選了 TypeScript,還讓我入了 TypeScript 這個大坑。編繹器從最一開始的只是單純的尋找取代轉譯,變成了真的有在分析檢查語法,也開始慢慢的終於有了點小成果出來。

同時 HiZollo Script 的語言機制也被我調整了很多次,只能說很多東西都是邊寫邊設計的。

這專案也讓我發現了 repl.it 有多卡。

現況

HiZollo Script 所有最初的想法都已經實作完成了,且有有一些打算加入的新語言特性也在規劃當中,目前的編譯器有開源在 Github 上,也有發佈成 npm 的套件供各位使用。

我可以在哪使用 HiZollo Script

你目前可以在我們提供的測試區中使用,未來我們也會在 Junior HiZollo 上提供執行 HiZollo Script 的指令。

相關連結