emacs 这种统一调用函数解决某个事,叫什么特性

emacs 这种统一调用某个函数解决某个事的行为,

(或者说成:解决某个事对应某个函数的设计)

,叫什么特性


我自己瞎叫成 归一化。

有什么历史的总结出来叫什么吗?

叫命运石之门

:joy: 紫薯布丁

某期 EmacsTalk 嘉宾关于这种设计思想,总结成了一篇文章,还发表在阿里巴巴的技术博客上:

两种设计方法

造成上述差异的原因是背后两种不同的设计方法,分别称作自顶向下(Top Down)与自底向上(Bottom Up):

方法自顶向下自底向上描述将大任务逐级拆分到颗粒度合适——足够小、又能做些实际的事情——的小任务完善底层编程语言等——让底层基建不断逼近业务领域——来适应任务优点难度较低,目标明确,迭代快速功能完整,适应性强缺点与当前需求耦合过紧,应对变化能力稍弱难度较高,进展较慢

用Vim编辑属于自顶向下方法——将编辑任务持续拆分,最终拆解到面向行的编辑命令;就像Java日常开发,会逐级拆分,最终拆解到JDK的API。用Emacs编辑属于自底向上方法——先完善底层Emacs Lisp语言,逐步抽象出面向业务的领域特定语言,最终用DSL完成编辑任务;例如要编辑Markdown文档,就会提供诸如移动到下一个段落、下一个列表项、表格下一个单元等面向Markdown领域的特定编辑操作。

这两种设计方法的差异并不意味着只是换个顺序写代码,而是系统抽象过程的差异,最终体现在系统扩展性的差异上。我个人把系统的可扩展分成4个等级:

  • 硬编码:系统运行时,数据和行为都已写死,不能变化。
  • 可配置:系统运行时,数据可动态变化,但行为固定不变。
  • 可控制:系统运行时,数据可动态变化,并且由多种预定义的行为可供动态选择。
  • 可编程:系统运行时,数据可动态变化,同时行为可在运行过程中动态新增,即用户可重新系统行为。

自顶向下的极端是硬编码,会过早地把功能限制在当前的需求里,后来的需求只能尽量逼近初始模型;自底向上的极端是可编程,容易过渡设计,为未来不可能变化的场景提供灵活性,甚至会变成一门通用的编程语言。

两种设计方法没有绝对的对错,都有各自适用的场景,单一地采用任何一种方法都会有问题,需要根据实际情况在快速实现和系统扩展性之间做权衡。也正因为没有对错之分,所以编辑器的圣战永远也打不完。

6 个赞