Conjure Piglet Client 是我第二次開發 Neovim 插件的作品,略有一些難度。
"Laurence, 你對 Piglet 有興趣嗎?要不要來開發 Piglet?", Arne 問我。Piglet 是他最近公開發表的新語言,當然,又是一個 Lisp 。
"好哇,該從哪邊開始呢?",我回答了他。
"你有兩個選項:
- 學 Emacs ,因為我已經開發好了 Emacs plugin for piglet。
- 開發一個 Neovim plugin。"
我選了 2. ,於是這個專案就開始了。
很快地讀了一下 Piglet 的文件與 Emacs Plugin 之後,我的初步規畫是這樣子:
Neovim 插件 Conjure 它的設計,可以支援多種不同程式語言;而支援的方式很聰明,因為 Conjure 本身也設計成容許插件的設計。換言之,嚴格地來說,Conjure Piglet Client 它本其實是 Neovim 插件的插件。
Piglet Dev Protocol (PDP) 是 Piglet 的互動開發協定,工作流程是:編輯器開啟 WebSocket server,Piglet REPL 以 client 角色連線進來,並且雙方透過 CBOR(Concise Binary Object Representation,一種二進位資料編碼格式)交換訊息。
下圖是 Piglet Dev Protocol 的示意:編輯器與 REPL 透過 WebSocket 溝通,中間的資料封包用 CBOR 編碼。
綜合以上,至少有兩個地方我需要整合第三方的函式庫:
真的要講的話,這個專案跟上個專案 auto-conjure 專案還是有相似之處:都是移植 (porting) 。換言之,這種專案本質上的難度比較多是實作層次,而不是設計層次。