为什么 vim 如此依赖编译时特性配置?
Why does vim rely so heavily on compile-time feature configuration?
我知道 vim 的主要目标之一是便携性和定制化。手册中关于事物在各种问题上以不同方式工作的大量评论并不让我感到惊讶。但是,我不明白为什么几乎每个功能都可以用编译标志禁用,它有什么用?通过某种配置在运行时禁用功能不是更容易吗?
据我所知(我尝试深入 vim 代码,但没有编写任何补丁),它使代码库变得更加复杂,而这正是 Neovim开发人员正试图删除。为什么 vim 开发人员采用这种方法?
有很多旗帜的力量(其中一些已经在评论中提到):
- 可移植性:要支持完全不同的(和奇异的,如 DOS 和 Amiga)操作系统,必须包含不同的 (GUI) 库,因此肯定需要通过
#ifdef
[=22 进行条件编译=]
- 在许多 Linux 发行版中,tiny 构建的 Vim 作为
vi
的默认实现;应该不具有任何扩展功能
- 它允许完全的灵活性:开发人员/打包人员可以自由混合和匹配(尽管我猜大多数人会坚持使用默认的小/大/大功能包)
因此,我的(非官方)猜测是随着 Vim 的成长和成熟,一个有用且必要的(见上文)功能越来越多地用于越来越多的功能。最初,这很好(一致性,配置的单一机制)。当问题开始出现时,追溯切换到(更好的?)方法(如运行时配置)为时已晚; (开发和测试)工作现在将是令人望而却步的。
我知道 vim 的主要目标之一是便携性和定制化。手册中关于事物在各种问题上以不同方式工作的大量评论并不让我感到惊讶。但是,我不明白为什么几乎每个功能都可以用编译标志禁用,它有什么用?通过某种配置在运行时禁用功能不是更容易吗?
据我所知(我尝试深入 vim 代码,但没有编写任何补丁),它使代码库变得更加复杂,而这正是 Neovim开发人员正试图删除。为什么 vim 开发人员采用这种方法?
有很多旗帜的力量(其中一些已经在评论中提到):
- 可移植性:要支持完全不同的(和奇异的,如 DOS 和 Amiga)操作系统,必须包含不同的 (GUI) 库,因此肯定需要通过
#ifdef
[=22 进行条件编译=] - 在许多 Linux 发行版中,tiny 构建的 Vim 作为
vi
的默认实现;应该不具有任何扩展功能 - 它允许完全的灵活性:开发人员/打包人员可以自由混合和匹配(尽管我猜大多数人会坚持使用默认的小/大/大功能包)
因此,我的(非官方)猜测是随着 Vim 的成长和成熟,一个有用且必要的(见上文)功能越来越多地用于越来越多的功能。最初,这很好(一致性,配置的单一机制)。当问题开始出现时,追溯切换到(更好的?)方法(如运行时配置)为时已晚; (开发和测试)工作现在将是令人望而却步的。