iT邦幫忙

2025 iThome 鐵人賽

DAY 21
0

Conjure Piglet Client 是我第二次開發 Neovim 插件的作品,略有一些難度。

問題概述

"Laurence, 你對 Piglet 有興趣嗎?要不要來開發 Piglet?", Arne 問我。Piglet 是他最近公開發表的新語言,當然,又是一個 Lisp 。

"好哇,該從哪邊開始呢?",我回答了他。

"你有兩個選項:

  1. 學 Emacs ,因為我已經開發好了 Emacs plugin for piglet。
  2. 開發一個 Neovim plugin。"

我選了 2. ,於是這個專案就開始了。

解題架構

很快地讀了一下 Piglet 的文件與 Emacs Plugin 之後,我的初步規畫是這樣子:

  1. 先開發 Fennel 的程式碼來處理 Piglet Dev Protocol,即先設法做到讓 Neovim 與 Piglet REPL 通話。
  2. 再將步驟 1 的程式碼包裝成一個新的 Conjure client ,如此,Conjure 就可以支援 Piglet 的互動式開發。

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 編碼。

https://ithelp.ithome.com.tw/upload/images/20250921/20161869xhmFLiBPgb.png

綜合以上,至少有兩個地方我需要整合第三方的函式庫:

  1. WebSocket
  2. CBOR

小結

真的要講的話,這個專案跟上個專案 auto-conjure 專案還是有相似之處:都是移植 (porting) 。換言之,這種專案本質上的難度比較多是實作層次,而不是設計層次。


上一篇
專案研討—auto-conjure
系列文
在 Neovim 中探索 Fennel 與函數式編程21
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言