系列文章导读: 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的“工程化”飞跃(上):从脚本到现代OOP

三、从字典戏法真正的类

VimLdict函数是一种模拟,而ObjectSense则提供了原生的工程化能力。这是从脚本迈向工程语言的第一步。

1. 引入 Class Inherits(继承)

VimL需要你手动管理字典和函数引用来实现对象 ObjectSense则提供了清晰的Class关键字,以及Inherits来实现多重继承。

VimL (模拟)

ObjectSense (原生)

2. 引入 Package Import(包管理)

VimL工程化之痛在于缺乏命名空间。所有插件的函数理论上都在一个大通铺里,只能靠命名规范(如unite#…)来避免冲突。

ObjectSense则引入了现代语言标配的 Package Import 机制。

这彻底解决了VimL在大型项目中最大的痛点——命名空间污染依赖管理

通过Class, Inherits, PackageImport这几项关键进化,ObjectSense在保留VimL简洁内核的同时,完成了从编辑器配置脚本现代面向对象语言的第一次飞跃。

但这仅仅是语言层面的进化。一门语言要活下去,还需要摆脱对单一宿主(Vim编辑器)的依赖,并建立自己的生态工具链

(未完待续)

在(下篇)中,我们将探讨ObjectSense如何通过编译框架微语言实现第二次飞跃——从一门语言进化为一个跨平台生态