重点摘要
1. Emacs:一个强大且可扩展的文本编辑器,拥有忠实的用户群
Emacs 以类似正午的太阳比星星更耀眼的方式超越了所有其他编辑软件。它不仅仅是更大更亮;它让其他一切都消失了。
无与伦比的多功能性。 Emacs 不仅仅是一个文本编辑器;它是一个完整的计算环境。拥有超过 110 万行的 Emacs Lisp 代码,它提供了从基本文本编辑到调试程序、阅读电子邮件、浏览目录,甚至解决符号代数问题的功能。
独特的用户体验。 与传统编辑器不同,Emacs 设计为一次启动并持续运行。用户可以在单个会话中编辑多个文件,保持工作随时可用。界面围绕三个关键概念构建:
- 框架:Emacs 在图形用户界面中的窗口术语
- 窗口:框架的细分,用于显示内容
- 缓冲区:可编辑文本的容器,可能与文件相关联,也可能不相关联
可编辑的一切。 Emacs 最强大的功能之一是几乎所有内容,包括帮助信息、搜索结果和目录列表,都以可编辑的缓冲区形式呈现。这使用户能够灵活地操作和重用信息,使 Emacs 特别适合复杂的文本操作任务。
2. Emacs 架构:以 Lisp 为核心的模型-视图-控制器模式
Emacs 的架构遵循广泛使用的交互式应用程序的模型-视图-控制器模式。
架构分解。 Emacs 的架构可以分为三个主要组件:
- 模型:缓冲区,保存文本和相关元数据
- 视图:重显示引擎,负责更新屏幕
- 控制器:Emacs Lisp 代码,处理用户输入并操作模型
缓冲区作为模型。 Emacs 模型的核心是缓冲区,一个简单的平面字符串,换行符标记行结束。缓冲区支持各种操作:
- 插入和删除文本
- 提取部分作为字符串
- 搜索精确字符串或正则表达式的匹配
- 支持多种字符集
- 撤销日志以逆转更改
自动重显示。 Emacs 的视图组件,重显示引擎,自动更新显示,无需 Lisp 代码的明确指导。这简化了扩展开发,使程序员可以专注于操作模型,而不必担心显示更新。
3. Emacs Lisp:驱动 Emacs 可扩展性和定制化的引擎
Emacs Lisp 是交互式的。您可以将定义和表达式输入到 Emacs 缓冲区并立即评估它们。
强大的扩展语言。 Emacs Lisp 是 Emacs 可扩展性的核心。它提供了几个关键功能:
- 低官僚主义:可以轻松地将小的自定义添加到 .emacs 文件中
- 交互式开发:可以在不重启 Emacs 的情况下进行更改和评估
- 一等公民:用户编写的 Lisp 代码具有与内置代码相同的访问权限
- 完整的编程语言:适合编写大型复杂程序
- 安全性:有缺陷的 Lisp 代码不会导致 Emacs 崩溃,鼓励实验
- 简单的文档:函数可以包含文档字符串以提供即时帮助
缺点和权衡。 尽管功能强大,Emacs Lisp 也有一些限制:
- 没有模块系统:使用命名约定来避免包之间的冲突
- 全局可见性:包中的所有函数对其他包可见
- 没有对象系统:这可能使某些编程范式更具挑战性
4. 渐进特性主义:Emacs 设计中的优势而非劣势
Emacs 的渐进特性主义是其架构的直接结果。
特性增长周期。 Emacs 的架构鼓励特性的有机增长:
- 由于进入门槛低,新想法易于实现
- 个人自定义添加到 .emacs 文件中
- 流行的自定义发展成可共享的包
- 最佳包被纳入标准 Emacs 发行版
管理复杂性。 尽管不断增加特性,Emacs 设法避免变得难以管理:
- 用户界面复杂性通过允许用户逐步发现特性来缓解
- 通过将 Emacs 视为包的集合而非单一整体来保持可维护性
- Lisp 语言作为抽象边界,允许核心 C 代码在不破坏兼容性的情况下演变
社区驱动开发。 Emacs 特性的增长主要是草根过程,反映了用户的兴趣和需求。这确保了新特性在成为标准发行版的一部分之前是真正有用且经过充分测试的。
5. Emacs 与其他架构的比较:Eclipse 和 Firefox 作为对比
Eclipse 的架构如果不是开放的,那就什么都不是,因为插件提供了几乎所有重要功能。
Eclipse:强大但复杂。 Eclipse 提供了一个插件架构,提供了广泛的功能,但也有缺点:
- 插件开发不安全;错误可能导致整个系统崩溃
- 编写插件需要处理复杂的接口
- 即使是简单的扩展也需要大量样板代码
Firefox:中间立场。 Firefox 的架构与 Emacs 有一些相似之处:
- 使用 JavaScript,一种解释型动态语言,类似于 Emacs Lisp
- 提供自动显示管理
- 允许增量开发扩展
Emacs 的优势。 Emacs 的架构提供了独特的强大和简洁的组合:
- 安全的扩展执行环境
- 简单自定义的低门槛
- 能够扩展到复杂的全功能扩展
- 内置功能和用户创建功能的一致界面
6. 用户界面中的组合能力
使用一个命令的结果作为另一个命令的输入有多容易?界面的命令是否相互组合?还是结果一旦显示就到此为止?
Emacs 的可组合界面。 Emacs 擅长允许用户组合和重用命令输出:
- 所有内容都以可编辑缓冲区形式呈现
- 标准文本操作命令适用于所有类型的内容
- 一个命令的结果可以轻松地作为另一个命令的输入
组合能力的好处。 这种方法提供了几个优势:
- 增加用户与数据交互的灵活性
- 能够从简单的构建块创建复杂的工作流程
- 鼓励实验和发现使用系统的新方法
与其他系统的比较。 许多现代应用程序,如 Microsoft Visual Studio,限制了用户与命令输出交互的方式,减少了灵活性和创造性解决问题的潜力。
7. 评估扩展语言和插件设施
扩展语言是否是实现应用程序大多数新功能的首选方式?
评估可扩展性的关键问题:
- 插件可以使用哪些接口?
- 它们是否足够简单以允许快速开发?
- 开发人员是否可以在接近问题领域的高抽象层次上工作?
- 应用程序的数据如何保护免受有缺陷的插件代码的影响?
Emacs 的方法。 Emacs 在这些方面表现出色:
- Emacs Lisp 用于实现大多数新功能
- 扩展语言可以完全访问 Emacs 的内部功能
- Lisp 的高抽象层次允许快速开发
- Lisp 解释器提供了安全的执行环境
一等扩展的重要性。 当应用程序的扩展语言强大且集成良好时,它会鼓励用户创建功能的活跃生态系统。这可能导致应用程序的意外和创新用途,远远超出其原始创建者的设想。
最后更新日期:
评论
《美丽的架构》评价褒贬不一,平均评分为3.41/5。一些读者称赞其对软件架构原则的全面覆盖以及来自各种项目的真实案例。他们欣赏行业专家的见解和所涵盖主题的广度。然而,另一些人则批评该书各章节质量不一致,缺乏图表,有时信息过时。一些人认为内容过于冗长而缺乏深度,而另一些人则重视对架构决策和权衡的多样化视角。该书由独立的文章组成,这一结构被视为优点和缺点兼具。