系列文章導讀: Vim Language (VimL) 是編輯器之神Vim的“靈魂”,它極致高效、簡潔,但也始終被“腳本語言”的枷鎖所束縛,難以用於構建超大型的軟件工程。ObjectSense文檔則展示了一條不同的進化路徑:如果VimL從一開始就擁抱現代工程思想,它會是什麼樣子?
本系列將分兩篇,從VimL的進化角度,客觀解讀ObjectSense如何試圖將其“內核”帶入一個全新的工程領域。
(上篇)從腳本到現代OOP
(下篇)從語言到跨平台生態
一、VimL的“天花板”
任何一個深度Vim用户,都對VimL懷有複雜的情感。
它的“神性”: 極致的性能、與編輯器無縫融合、僅用幾行代碼就能實現複雜的文本操作。
它的“侷限”: 當你想寫的不是一個“插件”,而是一個“大型應用”時,VimL的侷限性就暴露無遺:
“偽”面向對象: VimL 8 引入了 dict 函數,可以通過 self 關鍵字模擬OOP,但這本質上是“字典驅動”,而非真正的類(Class-based)結構。
工程化缺失: 它沒有原生的 Package(包)或 Import(導入)機制,導致大型項目依賴混亂,命名空間極易污染。
語言“孤島”: 它幾乎完全被困在Vim編輯器內部,無法作為一門獨立的語言去構建其他類型的應用(如服務、GUI等)。
VimL是一個頂級的“腳本小子”,卻不是一個合格的“系統架構師”。
二、ObjectSense的第一步:保留內核,重構“骨架”
面對VimL的侷限,ObjectSense的進化選擇不是推倒重來,而是“基因重組”。
根據其文檔,它首先保留了VimL的“優良基因”:“基於Vim language進行面向對象的封裝,該語言核心代碼僅在千行之內,高度精煉,簡潔。”
這意味着它繼承了VimL輕量、高效的運行時特性。但緊接着,它進行了第一次、也是最關鍵的一次“進化”——注入了完整的現代OOP骨架。
三、從“字典戲法”到“真正的類”
VimL的dict函數是一種“模擬”,而ObjectSense則提供了“原生”的工程化能力。這是從“腳本”邁向“工程語言”的第一步。
- 引入 Class 與 Inherits(繼承)
VimL需要你手動管理字典和函數引用來實現“對象”。 ObjectSense則提供了清晰的Class關鍵字,以及Inherits來實現多重繼承。
VimL (模擬)
ObjectSense (原生)
- 引入 Package 與 Import(包管理)
VimL的“工程化之痛”在於缺乏命名空間。所有插件的函數理論上都在一個“大通鋪”裏,只能靠命名規範(如unite#...)來避免衝突。
ObjectSense則引入了現代語言標配的 Package 和 Import 機制。
這徹底解決了VimL在大型項目中最大的痛點——命名空間污染和依賴管理。
通過Class, Inherits, Package和Import這幾項關鍵進化,ObjectSense在保留VimL簡潔內核的同時,完成了從“編輯器配置腳本”到“現代面嚮對象語言”的第一次飛躍。
但這僅僅是語言層面的進化。一門語言要“活下去”,還需要擺脱對單一宿主(Vim編輯器)的依賴,並建立自己的“生態工具鏈”。
(未完待續)
在(下篇)中,我們將探討ObjectSense如何通過“編譯框架”和“微語言”實現第二次飛躍——從一門“語言”進化為一個“跨平台生態”。