知识卡片

用命名规范而非模块系统防止代码互相干扰

普通读书笔记卡 · 1813.d

内容

Emacs Lisp没有真正的模块系统,各个包靠约定俗成的命名前缀规范避免命名冲突,同一会话里所有包的函数对彼此完全可见、没有访问边界。这种零强制隔离按直觉该引发大量兼容性问题,但Emacs标准发行版里千余个文件间的相互调用实际运行得相当稳定——原因不在机制本身多可靠,而在于依赖它的是一个开发者高度重叠、愿意为不兼容修改互相协商的紧密社群,机制的宽松被社群的协作习惯补上了。

参考来源

- 位置:《架构之美》第11章《GNU Emacs:滋长的特性是其优势》11.2.3节《控制器:Emacs Lisp》(源文件:程序之美系列套装(6册)团队之美、项目管理之美、架构之美、数据之美、测试之美、安全之美/_epub-src/OEBPS/Text/part0238.xhtml) - 结论依据:原文明确"Emacs Lisp不是一个模块化系统。取而代之的是通过内建的命名规范来实现……避免相互之间的干扰",并指出"这样的做法并没有产生人们所预期的大量问题……这些开发人员形成了一个紧密的小组,会对那些不兼容的修改进行相互的协商"。 - 原始内容:Emacs Lisp不是一个模块化系统。取而代之的是通过内建的命名规范来实现在同一个Emacs会话中载入不相关的包时避免相互之间的干扰……奇怪的是,这样的做法并没有产生人们所预期的大量问题……这些开发人员形成了一个紧密的小组,会对那些不兼容的修改进行相互的协商。