Tsukimiya bot(@tsukimiya_bot)是一個 Telegram 機器人,可以 eval 月兔 和倉頡程式語言的程式碼。
使用
/eval
,/mbt
,/mb
,/moon
,/evalmbt
- eval Moonbit 程式碼。如果程式碼不在fn main
中,將會自動包裹。此情況下,如果尾語句不是 println,則會 println 最後一行表示式的值。/cj
,/cangjie
,/evalcj
- eval 倉頡程式語言程式碼。
實現
Moonbit
對 Moonbit 程式碼的 eval 實現比較抽象。Jinser 說想把 Moonbit 編譯器編譯到 JS 後 worker 部分的程式碼拿出來跑在 Cloudflare Workers 上。雖然這個大小的 JS 不付錢的話不太能放在邊緣上,但這啟發了我。
尋找一通,發現官網上 文件 裡面有很多帶了編輯器的例子可以在瀏覽器裡編譯 Moonbit 程式碼並生成 WASM 再執行,甚至還帶了語言伺服器。檢視了 Docusaurus 上文件的原始碼,發現是 @moonbit/moonpad 的包,封裝成了 Web 元件。我這邊也封裝成了 Astro 元件放在文章裡(裡面寫死了 lsp-server.js 的路徑,需要擦屁股),你可以猛戳下面的 Run 按鈕檢視效果。
依賴裡面的 core 仍然是閉源的,我們沒法獲得編譯器的原始碼。不過不要緊,跑在瀏覽器裡就好了。開一個 HTTP 伺服器然後 bot 部分用 Puppeteer 模擬點選。這樣,雖然最終沒有跑在邊緣上,但可以使用 Browser Rendering 跑在 Cloudflare Workers 上。當然,最終還是要付錢。
倉頡
倉頡則是直接使用了官網上 線上體驗 部分的 API。
原始碼
其他的不得說項,具體可看原始碼:tsukimiya-bot。
評論