来源书籍

架构之美

系统架构类

- 本书是多位业界知名架构师(Jim Waldo、Michael Nygard、Perry & Wolf 等)合著的文集,每章围绕一个真实系统 (Xen 虚拟化、Tandem Guardian 容错系统、JPC 纯 Java x86 模拟器、Jikes RVM 元循环虚拟机、GNU Emacs、KDE 等) 展开架构决策的第一手复盘,重点讲"为什么这样设计""权衡取舍是什么",而非某个工具的具体操作步骤。 - 虽然部分案例系统本身(如 2008 年前后的 Xen、早期 Facebook Platform API)已经过时,但书中提炼的架构原理—— 模块化边界如何划定、可伸缩性设计的本质权衡、面向对象与函数式的模块性对比、"滋长的特性"如何影响系统演化—— 这些原理本身并不因具体技术栈的更迭而失效,和《人月神话》《设计模式》一样属于跨时代的架构方法论经典。 - 全书采用"具体案例 + 抽象原理提炼"的结构(如第1章、第13、14章直接讨论架构本质,其余章节以案例佐证), 与《团队之美》的文集结构和评级逻辑一致。 - 该评级已按用户指示直接采用推荐结论执行(用户已在此前授权后续同类决策自动按推荐执行,无需逐一确认)。

类别清单覆盖

5/7

已覆盖 5 补充生成 0 未覆盖 2

全书概览

架构之美

原书为《Beautiful Architecture》(O’Reilly,Diomidis Spinellis & Georgios Gousios 编),是《程序之美系列套装(6册)》中的第3册,多位知名架构师/工程师合著的文集。 EPUB 已解压至共享目录 notes/程序之美系列套装(6册)团队之美、项目管理之美、架构之美、数据之美、测试之美、安全之美/_epub-src/, 本书对应 spine 范围 Text/part0080.xhtmlText/part0282.xhtml(对应 toc.ncx 中 playOrder 306~430)。

类别:系统架构类

说明(2026-08-29 补记):本书原有卡片经核查为旧格式批量生成(缺”位置/结论依据/ 原始内容”三段式证据链,来自 commit ff8b785157”内容初始化”),已按 v6 标准丢弃重做; 下方评级结论、章节划分、Spine 文件映射均为已验证正确的既有工作成果,予以保留复用, 不重新推导;仅重置”章节进度追踪表”状态为 pending,逐章重新生成卡片正文。

评级结论:经典原理(高浓度 + 高稳定性)

理由: - 本书是多位业界知名架构师(Jim Waldo、Michael Nygard、Perry & Wolf 等)合著的文集,每章围绕一个真实系统 (Xen 虚拟化、Tandem Guardian 容错系统、JPC 纯 Java x86 模拟器、Jikes RVM 元循环虚拟机、GNU Emacs、KDE 等) 展开架构决策的第一手复盘,重点讲”为什么这样设计”“权衡取舍是什么”,而非某个工具的具体操作步骤。 - 虽然部分案例系统本身(如 2008 年前后的 Xen、早期 Facebook Platform API)已经过时,但书中提炼的架构原理—— 模块化边界如何划定、可伸缩性设计的本质权衡、面向对象与函数式的模块性对比、”滋长的特性”如何影响系统演化—— 这些原理本身并不因具体技术栈的更迭而失效,和《人月神话》《设计模式》一样属于跨时代的架构方法论经典。 - 全书采用”具体案例 + 抽象原理提炼”的结构(如第1章、第13、14章直接讨论架构本质,其余章节以案例佐证), 与《团队之美》的文集结构和评级逻辑一致。 - 该评级已按用户指示直接采用推荐结论执行(用户已在此前授权后续同类决策自动按推荐执行,无需逐一确认)。

章节进度追踪表

章节号 章节标题 精读/略读 状态 卡片数
前言部分 O’Reilly介绍/推荐序(一~四)/译者序/作译者简介/序/前言 略读 done 0
第一部分:论架构
第1章 架构概述(John Klein / David Weiss) 精读 done 5
第2章 两个系统的故事:现代软件神话 精读 done 7
第二部分:企业级应用架构
第3章 伸缩性架构设计(Jim Waldo) 精读 done 7
第4章 记忆留存(Michael Nygard) 精读 done 10
第5章 面向资源的架构:在Web中(Brian Sletten) 精读 done 7
第6章 数据增长:Facebook平台的架构 精读 done 8
第三部分:系统架构
第7章 Xen和虚拟化之美 精读 done 8
第8章 Guardian:一个容错操作系统环境 精读 done 9
第9章 JPC:一个纯Java的x86 PC模拟程序 精读 done 8
第10章 元循环虚拟机的力量:Jikes RVM 精读 done 9
第四部分:最终用户应用架构
第11章 GNU Emacs:滋长的特性是其优势 精读 done 9
第12章 当集市开始构建教堂(KDE) 精读 done 7
第五部分:语言与架构
第13章 软件架构:面向对象与面向函数 精读 done 11
第14章 重读经典(Panagiotis Louridas) 精读 done 10
漂亮地构建(William J.Mitchell) 略读 done 0

实践卡进度

序号 实践标题 实践方式 状态 关联章节 产出
1 深读Emacs真实源码验证缓冲区模型 实现深读 done 第11章 notes/架构之美/ideas/idea-001-深读Emacs真实源码验证缓冲区模型.md
2 审查cardbox中overview内容的存储决策 决策实践 done 第12章 notes/架构之美/ideas/idea-002-审查cardbox中overview内容的存储决策.md
3 用命令查询分离审查cardbox核心函数 决策实践 done 第13章 notes/架构之美/ideas/idea-003-用命令查询分离审查cardbox核心函数.md

类别清单核对(系统架构类)

维度 覆盖状态 关联卡片标题或未覆盖理由
服务拆分原则 已覆盖 ch04-009-主动应用Conway法则在团队边界处刻意划清软件接口(团队边界即服务/模块边界);ch02-002-双向依赖会让系统退化成不可拆解的整体
通信机制(同步/异步取舍) 已覆盖 ch07-005-异步通知比同步等待更能提升IO吞吐量;ch12-002-控制通道与数据通道分离防止大数据阻塞小消息
一致性与事务权衡 已覆盖 ch03-005-用事务包装任务把并发冲突转化为自动重试
可观测性设计(日志/监控/链路追踪) 未覆盖 定向检索全书”监控”“可观测”“链路追踪”“日志”关键词,仅第3章(part0121/0122)提到元服务对机器负载和存活状态的监控,但该内容已作为动态负载再分配机制被ch03-007覆盖,本书未把日志采集、监控体系、链路追踪作为独立架构议题展开
容错设计(熔断/降级/重试) 已覆盖 第8章Guardian整章(ch08-002心跳超时、ch08-003检查点、ch08-004松散连接、ch08-005请求编号幂等、ch08-008分裂大脑);ch04-005快重试与慢重试两级策略
扩展性瓶颈与应对 已覆盖 ch03-003地理分区与分片;ch03-007运行时动态分组优于开发期硬编码;第6章Facebook平台数据增长整章
部署与发布策略(灰度/回滚) 未覆盖 定向检索全书”灰度”“回滚”“部署”关键词,”部署”仅在少数章节中作为通用词出现(如安装、上线),全书未展开讨论灰度发布、回滚等具体工程实践,最接近的ch04-007自动化数据库迁移属于变更管理而非发布策略本身

Spine 文件映射(part 号 → 章节,章节内含多个小节 part 文件,仅列首尾)

  • part0080: 架构之美(书名页)
  • part0081: O’Reilly Media介绍
  • part0082: 推荐序一
  • part0083: 推荐序二
  • part0084: 推荐序三
  • part0085: 推荐序四
  • part0086: 译者序
  • part0087: 作译者简介
  • part0088: 序 Stephen J.Mellor
  • part0089: 前言
  • part0090: 第一部分标题页(论架构,非独立章节)
  • part0091~0104: 第1章 架构概述(含1.1简介 part0091、1.2创建软件架构 part0095、1.3架构结构 part0096、1.4好的架构 part0101、1.5美丽的架构 part0102、致谢 part0103、参考文献 part0104)
  • part0105~0113: 第2章 两个系统的故事(2.1混乱大都市 part0105、2.2设计之城 part0108、2.3说明什么问题 part0111、2.4轮到你了 part0112、参考文献 part0113)
  • part0114: 第二部分标题页(企业级应用架构)
  • part0115~0123: 第3章 伸缩性架构设计(3.1简介 part0115、3.2背景 part0116、3.3架构 part0119、3.4关于架构的思考 part0123)
  • part0126~0137: 第4章 记忆留存(4.1功能和约束 part0126、4.2工作流 part0127、4.3架构关注点 part0128、4.4用户反应 part0135、4.5结论 part0136、参考文献 part0137)
  • part0138~0144: 第5章 面向资源的架构(5.1简介 part0138 ~ 5.7结论 part0144)
  • part0145~0159: 第6章 数据增长:Facebook平台的架构(6.1简介 part0145 ~ 6.6总结 part0159)
  • part0160: 第三部分标题页(系统架构)
  • part0161~0169: 第7章 Xen和虚拟化之美(7.1简介 part0161 ~ 7.8延伸阅读 part0169)
  • part0170~0196: 第8章 Guardian(8.1 part0170 ~ 8.13延伸阅读 part0196)
  • part0197~0210: 第9章 JPC(9.1简介 part0197 ~ 9.11第二次做会更好 part0210)
  • part0211~0233: 第10章 元循环虚拟机的力量:Jikes RVM(10.1背景 part0211 ~ 参考文献 part0233)
  • part0234: 第四部分标题页(最终用户应用架构)
  • part0235~0241: 第11章 GNU Emacs(11.1使用中的Emacs part0235 ~ 11.4另外两个架构 part0241)
  • part0243~0249: 第12章 当集市开始构建教堂(12.1简介 part0243 ~ 12.4ThreadWeaver part0249)
  • part0254: 第五部分标题页(语言与架构)
  • part0255~0276: 第13章 软件架构:面向对象与面向函数(13.1概述 part0255 ~ 参考资料 part0276)
  • part0277~0281: 第14章 重读经典(14.1所有东西都是对象 part0277 ~ 参考资料 part0281)
  • part0282: 跋 漂亮地构建(William J.Mitchell)

章节与卡片

01 架构概述

  1. 架构师的首要关注点不是功能,而是品质属性 普通读书笔记卡

01 创建软件架构

  1. 架构师首要关注点是品质而非功能 普通读书笔记卡

01 架构概述

  1. 架构没有唯一正确答案,只有折中之后的"足够好" 普通读书笔记卡

01 美丽的架构

  1. 概念完整性是美丽架构的核心特征 普通读书笔记卡

01 架构概述

  1. 概念完整性——用一套规则处处一致地解决问题,是美丽架构的核心 普通读书笔记卡

01 架构结构

  1. 用多种独立结构分别回答不同的架构关注点 普通读书笔记卡

01 架构概述

  1. 模块的边界,应该划在"一项设计决定能单独改变"的地方 普通读书笔记卡

01 使用结构

  1. 使用结构必须是无环层次才能支持增量构建 普通读书笔记卡

01 架构概述

  1. 真正美丽的架构,要经得起时间考验、不越过"衰老地平线" 普通读书笔记卡

01 好的架构

  1. 架构评估要么建模量化要么靠结构化质询 普通读书笔记卡

02 两个系统的故事:现代软件神话

  1. 代码集从来不会"没有架构",只会有一个糟糕的架构 普通读书笔记卡

02 后果

  1. 内聚与耦合是评估模块设计质量的两把尺子 普通读书笔记卡

02 两个系统的故事:现代软件神话

  1. 不必要的耦合,最终会让系统丧失被单独测试的能力 普通读书笔记卡

02 后果

  1. 双向依赖会让系统退化成不可拆解的整体 普通读书笔记卡

02 两个系统的故事:现代软件神话

  1. 需求还不清晰时,不要急着设计"能做任何事"的整体架构 普通读书笔记卡

02 后果

  1. 架构腐烂常常源于组织问题而非技术问题 普通读书笔记卡

02 两个系统的故事:现代软件神话

  1. 敏捷开发不等于不做设计,YAGNI反对的是不必要的工作,不是设计本身 普通读书笔记卡

02 故事展开

  1. YAGNI不是不设计而是推迟不必要的设计决定 普通读书笔记卡

02 两个系统的故事:现代软件神话

  1. 架构腐烂的破坏力,最终会外溢到团队关系和公司政治层面 普通读书笔记卡

02 故事展开

  1. 单元测试反过来会倒逼出更好的模块设计 普通读书笔记卡
  2. Conway法则的反向应用是让团队组织方式追随想要的架构 普通读书笔记卡
  3. 健康的技术债务管理是标记后按计划偿还而非放任 普通读书笔记卡

03 伸缩性架构设计

  1. 把分布式和并发的复杂性藏进基础设施,让业务程序员当成写单机单线程程序 普通读书笔记卡

03 首要目标

  1. 把分布式复杂性隐藏起来需要严格限定的编程模型 普通读书笔记卡

03 伸缩性架构设计

  1. 拒绝把状态留在内存里,反而是实现伸缩性和容错能力的前提 普通读书笔记卡

03 延迟是敌人

  1. MMO的负载特征几乎与企业应用相反 普通读书笔记卡

03 伸缩性架构设计

  1. 用事务包装每个任务,比要求程序员自己判断加锁时机更可靠 普通读书笔记卡

03 延迟是敌人

  1. 地理分区与分片各自用不同代价换取伸缩性 普通读书笔记卡

03 伸缩性架构设计

  1. 基于运行时行为动态聚合,比设计阶段写死的静态分区更能适应真实负载 普通读书笔记卡

03 并行与延迟

  1. 把一切都持久化反而是实现任务可迁移的关键 普通读书笔记卡

03 伸缩性架构设计

  1. 对上层业务完全不可见的基础设施层,才能真正自由地持续演化 普通读书笔记卡

03 基本服务

  1. 用事务包装任务把并发冲突转化为自动重试 普通读书笔记卡

03 通信服务

  1. 抽象掉通信端点是实现透明负载均衡的前提 普通读书笔记卡

03 并行与延迟

  1. 运行时动态分组优于开发期硬编码的静态分区 普通读书笔记卡

04 记忆留存

  1. 把UI组件类型彻底隔离在表示层,领域逻辑只认"属性"不认具体控件 普通读书笔记卡

04 模块和加载程序

  1. manifest文件与加载程序把隐式依赖变成显式声明 普通读书笔记卡

04 记忆留存

  1. "创建后不可变 + 复制而非引用",两条简单规则解决了隐式链接的噩梦 普通读书笔记卡

04 模块和加载程序

  1. 最后负责时刻原则决定何时引入新架构组件 普通读书笔记卡

04 记忆留存

  1. 关键架构组件不必在项目最初就选定,可以留到"最后负责时刻"再引入 普通读书笔记卡

04 UI和UI模型

  1. UI模型层把界面框架限制在最外层 普通读书笔记卡

04 记忆留存

  1. 与其等团队摩擦暴露出软件边界,不如主动用接口划出团队协作的边界 普通读书笔记卡

04 UI和UI模型

  1. 应用程序外观阻止表示层直接遍历领域模型的关系图 普通读书笔记卡

04 记忆留存

  1. "快速失败、大声失败":把所有校验步骤堆在流程最前端,而不是等出错时才发现 普通读书笔记卡

04 可以互换的工作站

  1. 快重试与慢重试两级策略区分不同性质的故障 普通读书笔记卡

04 不可修改的数据和处处使用的GUID

  1. 不可修改加复制而非引用两条规则消除隐式联动的意外 普通读书笔记卡

04 数据库迁移

  1. 自动化数据库迁移把现场变更变成可重复执行的代码 普通读书笔记卡

04 渲染工厂

  1. 快速失败大声失败要求把验证前置到流程最开始 普通读书笔记卡
  2. 主动应用Conway法则在团队边界处刻意划清软件接口 普通读书笔记卡
  3. 渲染引擎主动拉取任务天然实现负载均衡 普通读书笔记卡

05 面向资源的架构:在Web中

  1. 把请求结构、调用行为和返回格式捆绑进同一份协议描述,会让后端无法独立演化 普通读书笔记卡

05 传统的Web服务

  1. SOAP/WSDL把请求结构与协议死死捆绑在一起 普通读书笔记卡

05 面向资源的架构:在Web中

  1. REST的本质是把"资源、动词、表示形式"三者分开,而不是用URL冒充函数调用 普通读书笔记卡

05 面向资源的架构

  1. 通过URL寻址名词而非调用动作是REST的核心区分 普通读书笔记卡

05 面向资源的架构:在Web中

  1. 同一个资源标识符,可以随场景协商出不同的返回格式,而不必为每种格式改名字 普通读书笔记卡

05 Web

  1. 无状态请求同时带来水平伸缩和结果缓存两个好处 普通读书笔记卡

05 面向资源的架构:在Web中

  1. 系统之间传递数据的"引用",比直接传递数据本身更安全,也更容易满足合规审计 普通读书笔记卡

05 面向资源的架构

  1. 内容协商让同一个资源地址能适配不同客户端的格式需求 普通读书笔记卡

05 面向资源的架构:在Web中

  1. "公司内部数据比公开网页更难找到",这个尴尬现象本身就是一种架构警示 普通读书笔记卡

05 面向资源的架构

  1. 传递数据引用而非数据本身更利于集中访问控制 普通读书笔记卡

05 Web

  1. 303状态码表达资源存在但不可被网络直接寻址 普通读书笔记卡

05 应用面向资源的架构

  1. PURL用一层间接名称化解好名字与可解析位置的张力 普通读书笔记卡

06 数据增长:Facebook平台的架构

  1. 用元数据描述一次接口,让序列化、文档、多语言绑定全部自动生成 普通读书笔记卡

06 简介

  1. Web应用的核心价值是数据而非算法或展示层 普通读书笔记卡

06 数据增长:Facebook平台的架构

  1. 批量调用能省掉往返开销,却处理不了"用上一个结果做下一次输入"的依赖关系 普通读书笔记卡

06 创建一个社会关系Web服务

  1. 把内部数据访问包装成Web服务是对外开放的第一步 普通读书笔记卡

06 数据增长:Facebook平台的架构

  1. 把几十个零散的RPC方法,重新包装成开发者熟悉的"表和字段" 普通读书笔记卡

06 数据:创建一个XML Web服务

  1. 用元数据驱动代码生成解决多语言多协议的一致性问题 普通读书笔记卡

06 数据增长:Facebook平台的架构

  1. 让敏感数据在受信任的环境里"可见但不可获取",而不是先给数据再事后约束用途 普通读书笔记卡

06 简单的Web服务认证握手

  1. 会话密钥让用户可撤销地把授权委托给第三方而不共享密码 普通读书笔记卡

06 数据增长:Facebook平台的架构

  1. 平台级架构可以一次只解决一个具体问题,逐层演进出来,而不是一开始就设计好全部 普通读书笔记卡

06 批量方法调用

  1. 批量调用解决不了结果之间存在依赖的场景 普通读书笔记卡

06 FQL

  1. FQL把专用API方法统一抽象成可组合的表和字段 普通读书笔记卡

06 数据增长:Facebook平台的架构

  1. 三种嵌入第三方内容的方案在安全与数据能力上此消彼长 普通读书笔记卡

06 一些Facebook核心数据

  1. 隐私可见性规则必须在数据源头强制执行而非依赖调用方遵守 普通读书笔记卡

07 Xen和虚拟化之美

  1. 把"互不信任"直接内置进架构本身,而不是依赖信任关系来保证安全 普通读书笔记卡

07 Xenoservers

  1. 把不信任构建进架构反而能默认提供安全性 普通读书笔记卡

07 Xen和虚拟化之美

  1. 放弃"完美透明兼容",换来数量级的性能提升——半虚拟化的核心取舍 普通读书笔记卡

07 Xenoservers

  1. 虚拟机比多用户分时系统多出灵活性和性能隔离两项能力 普通读书笔记卡

07 Xen和虚拟化之美

  1. 把拥有最高权限的那一层压到最薄,把复杂的策略决策下放到权限更低的地方 普通读书笔记卡

07 半虚拟化

  1. 半虚拟化用放弃完全兼容换取显著的性能提升 普通读书笔记卡

07 Xen和虚拟化之美

  1. 让发送方不必等回执就能连续发送,异步通知能大幅提升吞吐量 普通读书笔记卡

07 半虚拟化

  1. 前后端加环形缓冲的设备架构让驱动实现与硬件彻底解耦 普通读书笔记卡

07 Xen和虚拟化之美

  1. 开源发布本身就是一项架构决策,能省下大量重复造轮子的成本,还能换来外部持续的迭代反馈 普通读书笔记卡

07 Xen的变换形式

  1. 异步通知比同步等待更能提升I/O吞吐量 普通读书笔记卡
  2. 授权表机制让虚拟机间传数据时避免不必要的内存复制 普通读书笔记卡
  3. 把管理策略移出最高权限层是Xen架构的核心设计原则 普通读书笔记卡

07 改变的硬件,改变的Xen

  1. 硬件辅助虚拟化的进步让半虚拟化的两条路线走向融合 普通读书笔记卡

08 Guardian:一个容错操作系统环境

  1. 用消息总线代替共享内存连接多个处理器,避免共享资源本身变成单点故障 普通读书笔记卡

08 硬件

  1. 松耦合多处理器用独立总线取代共享内存来消灭单点故障 普通读书笔记卡

08 Guardian:一个容错操作系统环境

  1. 宁可让可疑的组件立即停止工作,也不要让它带着问题继续运行 普通读书笔记卡

08 诊断

  1. 心跳超时是判定对方组件已失效的通用手段 普通读书笔记卡

08 Guardian:一个容错操作系统环境

  1. "进程对"容错的关键不是简单重启备份,而是让它从主进程的断点恢复 普通读书笔记卡

08 回顾一下进程对

  1. 进程对靠检查点同步把容错从硬件下沉到进程级别 普通读书笔记卡

08 Guardian:一个容错操作系统环境

  1. 把所有进程间通信都统一到同一种机制上,换来了一致性,也永久背上了它的性能代价 普通读书笔记卡

08 同步

  1. 松散连接的进程对比完全锁步更能避免同一个bug同时击垮两份副本 普通读书笔记卡

08 Guardian:一个容错操作系统环境

  1. 一个简单的周期性心跳信号,足以支撑起整套故障检测机制 普通读书笔记卡

08 同步

  1. 请求编号让故障切换后的重复请求变成幂等操作 普通读书笔记卡

08 安全

  1. 权限提升检查依赖调用方自觉是一类反复出现的安全漏洞 普通读书笔记卡

08 性能

  1. 消息传输的固定开销会成为吞吐量的隐性天花板 普通读书笔记卡

08 分裂的大脑

  1. 分裂大脑现象揭示容错机制本身在极端故障下可能反噬系统 普通读书笔记卡

08 后继者

  1. 技术领先不等于产生行业影响力 普通读书笔记卡

09 JPC:一个纯Java的x86 PC模拟程序

  1. 用一个极简的玩具模型验证核心性能假设,再决定值不值得投入全量项目 普通读书笔记卡

09 简介

  1. 纯软件模拟比硬件虚拟化更彻底地与物理硬件解耦 普通读书笔记卡

09 JPC:一个纯Java的x86 PC模拟程序

  1. 叠加多个各自独立审计的安全层,比依赖单一的强安全层更难被攻破 普通读书笔记卡

09 概念验证

  1. 用简化原型先验证可行性再投入完整工程 普通读书笔记卡

09 JPC:一个纯Java的x86 PC模拟程序

  1. 只优化占据90%执行时间的那10%热点代码,不必优化全部 普通读书笔记卡

09 简介

  1. 三层独立安全边界叠加提供纵深防御 普通读书笔记卡

09 JPC:一个纯Java的x86 PC模拟程序

  1. 每个阶段都构建一个完整可运行的端到端原型,而不是孤立测试某个局部单元 普通读书笔记卡

09 把4GB放入4GB:这不起作用

  1. 按硬件页粒度组织内存兼顾节省空间与访问速度 普通读书笔记卡

09 JPC:一个纯Java的x86 PC模拟程序

  1. 不对代码产生情感依恋,才敢在关键时刻整体推翻重写 普通读书笔记卡

09 保护模式的危险

  1. 把权限级别切换简化成数组引用的翻转而非重建数据结构 普通读书笔记卡
  2. 异常应表达罕见但可恢复的情形而非用于常规错误 普通读书笔记卡

09 从事一项毫无成功希望的斗争

  1. 减少短生命周期对象分配是避开垃圾回收停顿的关键 普通读书笔记卡
  2. 把复杂指令拆成标准化的四阶段微操作以平衡译码与执行速度 普通读书笔记卡

10 元循环虚拟机的力量:Jikes RVM

  1. 用被实现的语言本身来写运行时(元循环),能消除两种语言交界处的风险 普通读书笔记卡

10 背景

  1. 元循环运行时消除了托管语言与实现语言之间的信任边界 普通读书笔记卡

10 元循环虚拟机的力量:Jikes RVM

  1. 即时编译不必在"快"和"优化得好"之间二选一,靠的是分层的选择性编译 普通读书笔记卡

10 基础的执行模型

  1. 选择性优化让运行时兼顾启动速度和峰值性能 普通读书笔记卡

10 元循环虚拟机的力量:Jikes RVM

  1. 先借用已有的运行时把新运行时编译出来,再让它接管自己——解决"自己实现自己"的悖论 普通读书笔记卡

10 静态编译器中的无限分析必然意味着更好的性能

  1. 在线剖析能做到静态离线分析做不到的针对性优化 普通读书笔记卡

10 元循环虚拟机的力量:Jikes RVM

  1. 自足执行会形成一个正循环:语言实现者被迫为自己的语言的性能持续创新 普通读书笔记卡

10 自适应优化系统

  1. 用滑雪板租赁式的成本收益模型决定要不要优化某个方法 普通读书笔记卡

10 元循环虚拟机的力量:Jikes RVM

  1. 把底层实现细节设计成可配置项,才能在不惊动系统其他部分的前提下单独评估一个设计选择 普通读书笔记卡

10 优化编译

  1. 静态单赋值形式靠一次写入的约束把局部优化能力扩展到全局 普通读书笔记卡

10 类加载器和反射

  1. 动态类加载并不排斥基于假设的激进优化只要能撤销 普通读书笔记卡

10 垃圾收集比显式内存管理更慢

  1. 垃圾回收与显式内存管理的性能优劣被过度简化了 普通读书笔记卡

10 Magic、annotation,使事情流畅地进行

  1. 用受控的"直接内存访问"后门支撑必须绕开类型安全的底层功能 普通读书笔记卡

10 线程模式

  1. 绿色线程用运行时自管理换取可扩展性但代价是脱离操作系统感知 普通读书笔记卡

11 GNU Emacs:滋长的特性是其优势

  1. 把一切内容都塞进同一种"缓冲区"里,任何命令的输出天然就能成为另一个命令的输入 普通读书笔记卡

11 使用中的Emacs

  1. 帧窗口缓冲区三层模型让一切内容都可编辑 普通读书笔记卡

11 GNU Emacs:滋长的特性是其优势

  1. 一个特性从"个人的临时命令"演进到"官方标准功能",要走过一条门槛极低的路径 普通读书笔记卡

11 Emacs的架构

  1. 控制器只管数据模型不碰显示重绘 普通读书笔记卡

11 GNU Emacs:滋长的特性是其优势

  1. 刻意把底层数据模型做到极简,却坦然接受表面命令集合变得庞大 普通读书笔记卡

11 模型:缓冲区

  1. 文本属性依附字符覆盖图独立标记区间 普通读书笔记卡

11 GNU Emacs:滋长的特性是其优势

  1. 一致的命名规范和非模态设计,驯服了一个原本会失控的庞大命令集合 普通读书笔记卡

11 视图:Emacs重绘引擎

  1. 自动重绘和等输入才刷新把显示逻辑从插件作者手中收走 普通读书笔记卡

11 GNU Emacs:滋长的特性是其优势

  1. 维护者的核心职责是从社区已经验证过的方案里挑选收编,而不是自己设计一切 普通读书笔记卡

11 控制器:Emacs Lisp

  1. 用命名规范而非模块系统防止代码互相干扰 普通读书笔记卡

11 滋长的特性

  1. 滋长的特性从个人命令演化成官方功能的四级路径 普通读书笔记卡

11 滋长的特性和用户界面复杂性

  1. 评价界面复杂度要分开看模型复杂度和命令复杂度 普通读书笔记卡

11 滋长的特性和可维护性

  1. 包的组合体依靠语言抽象边界维持可维护性 普通读书笔记卡

11 Eclipse

  1. 无处不在的扩展点与不安全的插件是同一设计的两面 普通读书笔记卡

12 当集市开始构建教堂

  1. 早期写死的规模假设,会在"没人敢动内核"的沉默里悄悄拖垮整个系统 普通读书笔记卡

12 KDE项目的历史和组织结构

  1. 组织架构与技术方向刻意脱钩延长项目寿命 普通读书笔记卡

12 当集市开始构建教堂

  1. 推动KDE重写PIM基础设施的真正原因,不是性能瓶颈,而是"新贡献者进不来" 普通读书笔记卡

12 Akonadi的架构

  1. 控制通道与数据通道分离防止大数据阻塞小消息 普通读书笔记卡

12 当集市开始构建教堂

  1. 用"协议/IPC接口"而不是"要链接的程序库"来共享基础设施,才能让不同语言、不同社区共同受益 普通读书笔记卡

12 Akonadi的架构

  1. 独立进程隔离子功能用序列化开销换可靠性和安全性 普通读书笔记卡

12 当集市开始构建教堂

  1. 拒绝复用一个现成方案时,要分清"技术上真的不合适"和"单纯不想用别人的东西" 普通读书笔记卡

12 Akonadi的架构

  1. 分层图与同心圆图表达不同的系统重心 普通读书笔记卡

12 当集市开始构建教堂

  1. 重大架构决策更适合放到高强度的面对面集会上,而不是拖在异步邮件列表里 普通读书笔记卡

12 Akonadi的架构

  1. 是否使用关系数据库要看数据是否结构化 普通读书笔记卡
  2. 序列化器插件把类型知识挪出核心存储层 普通读书笔记卡

12 ThreadWeaver简介:当其载入一个文件时有多复杂

  1. 声明式作业序列取代层级式回调解决GUI阻塞 普通读书笔记卡

13 软件架构:面向对象与面向函数

  1. 新增操作和新增类型,对函数式风格和面向对象风格来说,扩展难度是不对称的 普通读书笔记卡

13 概述

  1. 架构美的三条可检验标准 普通读书笔记卡

13 软件架构:面向对象与面向函数

  1. 继承真正的价值,是把公共契约收拢到最合适的抽象层级,而不只是省几行代码 普通读书笔记卡

13 函数式示例

  1. 原子成分加合成方式让新增计算和新增对象互不牵连 普通读书笔记卡

13 软件架构:面向对象与面向函数

  1. 把"操作本身"变成可以传递的对象,是两种编程范式相互借鉴、而非互相取代的例子 普通读书笔记卡

13 函数式方法的评价

  1. 部分复用一个模块必然撞上复制粘贴与整体引用的两难 普通读书笔记卡

13 软件架构:面向对象与面向函数

  1. 评价一个架构好不好,要用可靠性、可扩展性、复用性这几个具体标准,而不是"看起来美不美" 普通读书笔记卡

13 函数式方法的评价

  1. 模块黑盒程度越高外部可定制性越低 普通读书笔记卡

13 软件架构:面向对象与面向函数

  1. 在论证开始前主动列出自己论证的局限性,反而会让结论更可信 普通读书笔记卡

13 函数式的优势

  1. 操作作为一等公民是函数式留给后来语言的核心遗产 普通读书笔记卡
  2. 延迟计算与光标是处理无限结构的两种等价方式 普通读书笔记卡

13 状态调停

  1. 命令查询分离用编码约定换取引用透明 普通读书笔记卡

13 模块化策略

  1. 类把类型和模块强行合并成同一个东西 普通读书笔记卡

13 可扩展性:添加类型

  1. 动态绑定把类型分支判断从客户代码中彻底移除 普通读书笔记卡

13 可扩展性:添加操作

  1. 访问者模式用类爆炸换来不修改原有类型 普通读书笔记卡

13 基于代理的程序库使访问者模式变成多余的

  1. 把方法调用封装成头等对象消除访问者模式的类爆炸 普通读书笔记卡

14 重读经典

  1. 把一切都变成对象——连"类"和"正在执行的代码"本身都不例外 普通读书笔记卡

14 所有东西都是对象

  1. 一切皆对象让继承体系彻底统一但让基础运算多绕一层 普通读书笔记卡

14 重读经典

  1. 语言(或工具)呈现出来的样子,会诱使使用者以特定的方式去用它 普通读书笔记卡

14 所有东西都是对象

  1. 把代码包装成对象让控制流不再需要专门语法 普通读书笔记卡

14 重读经典

  1. "继承该不该用"争论了几十年,答案不是非黑即白,而是"用得好不好" 普通读书笔记卡

14 类型是隐式定义的

  1. 鸭子类型把判断依据从对象是什么换成对象能做什么 普通读书笔记卡

14 重读经典

  1. 强大的设计原则最实在的好处,是"要学的东西不多" 普通读书笔记卡

14 类型是隐式定义的

  1. 泛型是否真正基于能力判断决定它给出多大自由度 普通读书笔记卡

14 重读经典

  1. 经典之所以是经典,是因为每次重读都像第一次读一样有新发现 普通读书笔记卡

14 类型是隐式定义的

  1. 编译通过只证明语法合规不证明逻辑正确 普通读书笔记卡
  2. 运行时能力自省给鸭子类型补回一部分安全性 普通读书笔记卡

14 问题

  1. 方法在子类中无意义是继承关系建错的信号 普通读书笔记卡
  2. 统一根类的继承体系让打造极简代理类变得困难 普通读书笔记卡

14 砖块和灰浆建筑架构

  1. 美学影响力与实用好用是两条可以脱节的评价线 普通读书笔记卡
  2. 形式服从功能不是可以机械套用的绝对真理 普通读书笔记卡

相关主题

暂无公开主题。