# 6. 从 Portal 看生命周期管理

内核恐慌 · 2014-12-14

<https://lib.pan.icu/a3ff6025-68c9-49b8-b690-249508973850>

本期《内核恐慌》从Portal游戏切入，探讨了生命周期管理、内存层级、虚拟内存和编程模型演进等计算机底层话题。吴涛和Rio通过Portal中的core dump引出磁芯存储器的历史，对比了手动内存管理与垃圾回收的优缺点，并讨论了非易失性内存（如忆阻器）可能彻底改变编程模型的前景。节目还提及Go语言1.4版本的精确垃圾回收和并发支持，以及Varnish缓存的内存映射技巧。整体展现了从硬件到软件的内存抽象如何简化开发者的工作，同时保留了极端场景下手动控制的必要性。

## Questions this episode answers

### 为什么《内核恐慌》第6期没有播放《Portal》的主题曲《Still Alive》？

主播吴涛解释，他们原本打算播放《Still Alive》的电子合成器版本，但经调查发现，原曲作者Jonathan Coulton已将版权给了游戏制作商Valve，而非如原先以为的以创作公用署名非商业协议发布，因此需要先询问Valve是否可以使用。在获得授权前，节目无法插入该曲目。

[33:12](https://lib.pan.icu/a3ff6025-68c9-49b8-b690-249508973850?t=1992000)

### 如果电脑内存和硬盘合二为一，编程模型会有什么变化？

吴涛和Rio讨论，若使用非易失性内存（如忆阻器实现），内存可断电保存数据，则无需区分易失与非易失存储，简化编程模型：开机即恢复之前状态，不再需要序列化与反序列化，内存数据可直接持久化；内存管理与文件加载的界限消失，开发者只需面对单一存储抽象，大幅降低开发复杂度。

[1:55:42](https://lib.pan.icu/a3ff6025-68c9-49b8-b690-249508973850?t=6942000)

### Go语言正式支持Android开发意味着什么？

Rio提到，Go 1.4正式加入Android支持，允许用Go编写OpenGL游戏；后续1.5版计划加入iOS支持。吴涛补充，这意味着可用一套Go代码编写共享的业务逻辑，同时编译到Web、Android和iOS，类似Google Inbox用Java跨平台的做法，为跨平台开发提供了统一语言栈的可能性。

[25:19](https://lib.pan.icu/a3ff6025-68c9-49b8-b690-249508973850?t=1519000)

## Key moments

- **[0:00] 开场**
- **[0:06] 听众反馈**
  - [1:24] 吴涛认为中文从象形文字向拼音文字过渡永远不会实现
  - [2:02] Rio认为拼音输入法实质上实现了汉字拉丁化
  - [4:41] Rio分享教父母用笔画输入法的经历，称只需记5个键就能打字
  - [8:01] 吴涛形容德语听起来像“机器人掉到下水道里面发出的声音”
  - [8:44] 吴涛解释德语名词分阴阳中性，冠词有der、die、das三种
  - [9:34] 吴涛指出德语中太阳是阴性（die Sonne）、月亮是阳性（der Mond），源自日耳曼神话
- **[25:19] Go新闻**
  - [25:19] Rio戏称Windows控制面板难用的根源是图标设计不够漂亮
  - [25:48] Go语言1.4版正式支持Android开发，可用Go编写OpenGL游戏
  - [27:25] Go 1.5计划加入官方iOS支持，预计半年后发布，实现一套代码跨平台
  - [29:17] Rio认为Go有望实现业务逻辑跨平台重用，但UI部分仍需平台原生代码
  - [29:58] Rio介绍Google Inbox用Java编写业务逻辑，通过GWT和J2ObjC实现跨平台
  - [31:16] 吴涛听闻Java编译为Objective-C后惊叹：“What kind of sorcery is this？”
- **[33:05] Portal讨论**
  - [33:48] 吴涛发现Portal主题曲“Still Alive”版权归Valve所有，需征得授权
  - [34:40] 内核恐慌从第6期起使用Portal主题曲“Still Alive”的电子合成器版作为片头曲
  - [36:03] Rio在玩Portal之前就听过主题曲“Still Alive”，觉得非常可爱
  - [38:04] 吴涛引用Portal歌词“We are out of beta, we are releasing on time”调侃软件开发跳票
  - [38:14] 吴涛自述每当项目延期时就在心里默唱Portal歌词自嘲
  - [39:50] Rio玩Portal一代时产生晕动症，但Portal二代却无此问题，自己不解原因
- **[1:10:17] 内存管理**
  - [1:11:11] Q: 当内存有限时，程序如何管理内存？
  - [1:11:33] 吴涛辟谣“640K内存足够”名言并非比尔·盖茨所说，但大众常归咎于他
  - [1:13:25] 吴涛解释早期操作系统为单任务，程序独占计算机，直到多任务出现
  - [1:15:37] 吴涛分享趣事：研究生同学不知Alt+Tab可切换任务，以为程序已关闭
  - [1:16:59] 吴涛回忆DOS时代游戏修改工具常驻内存，用热键冻结游戏修改金钱
  - [1:17:38] Rio解释Windows 95采用协作式多任务，程序需主动让出控制权，否则系统无响应
- **[1:35:54] 存储层级**
  - [1:36:07] 吴涛介绍内存层级：寄存器最快，依次为L1、L2缓存、主存、磁盘
  - [1:39:24] 吴涛推荐文档“Latency numbers every programmer should know”，展示各级存储访问延迟
  - [1:42:01] 吴涛和Rio引用类比：将纳秒乘以十亿，L1缓存读取得0.5秒，内存读取100秒
  - [1:43:31] Rio: 按同样类比，从加州到荷兰的数据往返相当于5年
  - [1:44:30] 吴涛解释异步I/O必要性：同步等待磁盘访问相当于4个月，程序大部分时间闲置
  - [1:47:34] 吴涛讨论三维集成电路（3D chip）设想的物理限制和成本问题
- **[1:48:23] 非易失内存**
  - [1:48:43] Rio提到冷启动攻击：用液氮冷冻内存条以读取数据，突破易失性
  - [1:50:25] 吴涛指出内存与磁盘的差异导致程序必须进行序列化和反序列化
  - [1:51:45] 吴涛畅想如果内存是非易失的，开机关机无需等待，编程模型将大幅简化
  - [1:55:42] 吴涛介绍忆阻器（memristor）作为第四种基本电路元件，可望实现非易失性内存
  - [1:56:29] 吴涛提出忆阻器若实用化，将统一内存与硬盘，彻底改变编程模型
  - [1:57:46] 吴涛担忧非易失性内存下系统崩溃后无法通过重启恢复正常状态
- **[2:06:32] 编程与GC**
  - [2:06:32] Rio认为垃圾回收（GC）进一步解放程序员，但可能降低代码质量
  - [2:08:26] Rio指出Go 1.4将运行时大部分代码用Go重写，实现了精确垃圾回收
  - [2:10:19] Rio举例金融交易系统因GC暂停可能导致损失，因此常用C++避免垃圾回收
  - [2:11:38] 吴涛引用C++之父Bjarne Stroustrup的话：联合攻击战斗机（JSF）和火星探测器均用C++编写
  - [2:13:08] Rio介绍内存映射（mmap）技术：将磁盘文件映射到内存地址，由操作系统管理数据加载
  - [2:14:23] Rio推荐Varnish缓存开发者文章“What's Wrong with 1975 Programming”，批评过时编程模型
- **[2:18:42] 总结**
  - [2:18:42] 吴涛介绍特德·姜（Ted Chiang）的科幻小说《软件体的生命周期》
  - [2:19:34] 吴涛简述《软件体的生命周期》情节：在虚拟世界中培育人工智能，最终用户失去兴趣

## Speakers

- **Rio** (host)
- **吴涛** (host)

## Topics

操作系统, 硬件与设备

## Mentioned

Google (company), Valve (company), 微软 (company), 王安电脑 (company), .NET (product), Android (product), Core Data (product), DOS (product), GWT (product), Go (product), Google Inbox (product), J2ObjC (product), Java (product), Node.js (product), Portal (product), Varnish Cache (product), Windows (product), Windows Phone (product), iOS (product)

## Transcript

### 开场

**Rio** [0:01]
大家好 ， 欢迎收听第 6 期的 《 内核恐慌 》， 我是 Rio。

**吴涛** [0:05]
我是吴涛 。

### 听众反馈

**Rio** [0:06]
呃 ，在今天节目开始之前呢 ， 我们先去做一下上期的反馈吧 。

**吴涛** [0:11]
好呀 。

**Rio** [0:12]
嗯 ， 吴涛你又念错字了 。

**吴涛** [0:15]
嗯哼 ， 呃 ， 对 ，anyway。 反正上次我念了一个 " 已识听众 "，在这里向大家鞠一躬 。 各位听众 ， 对不起 ， 我不应该吃你们 。

哈哈哈 。 呃 ， 那个字念 " 响 "， 就是左边一个 " 乡 " 村的乡 ， 右边一个食物的食 。 呃 ， 这个字念 " 已想听众 "， 就是 ， 呃 ， 已把什么东西供奉给听众吃 ，而不是 ——

**Rio** [0:41]
吃掉听众是吧 ？

**吴涛** [0:43]
对 。

**Rio** [0:43]
你是螳螂吗 ？

**吴涛** [0:44]
嗯 ， 哈哈哈 。 螳螂只有在交配的时候 。anyway， 哈哈 。

**Rio** [0:50]
呃 ，其实这个事情我觉得也可以理解吧 。 你说这个字如果你让我来念 ， 我估计也会看 。 你想 ， 那个左边那么小 ， 右边那么大 ， 应该念右边吧 ？

**吴涛** [1:02]
对啊 ，而且就算念字 ， 念半边嘛 。 嗯 。

**Rio** [1:08]
对 。其实中文有就是有这点不好啊 ， 就是经常有这种所谓的什么 ， 呃 ， 规律嘛 。 说如果你不认识这个字 ， 你可以看它的偏旁部首啊 ， 说一般是什么 ， 一个行旁 ， 一个申旁 ， 对吧 ？

**吴涛** [1:22]
嗯哼 。

**Rio** [1:22]
先 8， 给你一个 。

**吴涛** [1:24]
中文还是在 ， 我们现在身处在一个中文从象形文字向拼音文字的过渡过程中 。 当然这个过渡可能永远也不会实现了 ，因为毕竟现在汉字已经是一种文化瑰宝 ， 它是不可能 ， 永远不可能 ， 呃 ， 实现加明化了 。

**Rio** [1:43]
所以你默默地是支持这件事情的是吧 ？

**吴涛** [1:47]
呃 ，也没有吧 。 就 ，但拉丁化方案 ， 拉丁化 ， 汉字拉丁化那么激进的方案 ， 都

，也不是都没有实现 ， 就 ， 就让人， 让人觉得非常受不了了 。 那 ——

**Rio** [2:02]
不过现在我觉得拉丁化在逻辑上已经实现了呀 。 就这在事实上已经成立了 。

**吴涛** [2:09]
你说用拼音书法吗 ？

**Rio** [2:11]
对啊 。 就是经常会有那种 ， 呃 ， 就现在网络上一些用语不方便直接讲的时候 ， 都会在那个后面注一下这个拼音嘛 ， 然后大家读一下都知道那个是什么意思 ， 对吧 ？

**吴涛** [2:24]
呃 ， 对 ，而且 ， 对 ， 反正是越来越没有人写字了 ， 这是肯定的 。

**Rio** [2:30]
嗯 ， 对 ， 都在打字 。

**吴涛** [2:31]
当然我 ， 我还记在 07 年， 反正 iPhone 出现之前 ， 我还坚持用过 Android 架上面的笔画输入法 。 我觉得至少这样可以让我 ——

**Rio** [2:42]
是那个九宫格那个吗 ？

**吴涛** [2:45]
呃 ， 对 ， 九宫格的那个笔画输入法 。

**Rio** [2:47]
哎 ，其实我一直觉得那个那个还蛮好的 ， 叫什么 T9 吧 ，是不是 ？

**吴涛** [2:52]
呃 ， 好像是叫 T9。

**Rio** [2:53]
T9 是拼音吧 ？ 不是吗 ？

**吴涛** [2:55]
是吗 ？

**Rio** [2:55]
T9 是拼音吗 ？OK， 我怎么记得 ——

**吴涛** [2:58]
我不记得了 ， 我不确定 ，但我记得那个输入法只要 5 个键而已吧 ？

**Rio** [3:01]
呃 ， 就横竖撇拉 ， 横竖 ， 哎 ， 横竖撇拉 ， 点 ——

**吴涛** [3:05]
撇 ， 就是撇 ， 就是右上到左下， 然后横 ， 然后竖 ， 然后 ——

**Rio** [3:11]
我觉得那个那个输入法真的挺好的 。

**吴涛** [3:13]
对 ， 它解决了我很多的倒插笔问题 ， 比如我想 ——

**Rio** [3:16]
什么是倒插笔 ？

**吴涛** [3:18]
就是 ， 嗯 ， 一个汉字的笔顺和官方规定的不一样 ， 然后这样我就打不出来 。 比如说女人的 " 女 " 字吧 ， 好像 。

**Rio** [3:28]
对对对 。

**吴涛** [3:29]
然后我 ， 我十次有九次打不出来 。

**Rio** [3:31]
所以那个笔画怎么样 ？ 应该是撇折再撇 ， 然后最后一个横是吧 ？

**吴涛** [3:36]
我现在又不记得了 。 有可能是先写横 ， 对 。 反正 ， 对 。 然后还有那个所有带走之旁的字 ， 我全都先写 ——

**Rio** [3:44]
先写走之 ， 对吧 ？

**吴涛** [3:45]
对 。

**Rio** [3:45]
不 ， 这这合理啊 。 你先把那个周围的那个框画出来 ， 然后在那里面描那个小的吗 ？

**吴涛** [3:52]
嗯 ， 我也是这么觉得 。 但是 ，但是据说如果先写走之的话 ， 整个字很难看 。 就是因为那个走之它只是一个配件 ， 然后你 ， 你 ， 你先写它 ， 就很容易让接下来写的那个东西 ， 呃 ， 很难放在正确的位置 。

**Rio** [4:08]
但但但你知道有些时候小学 ， 小学生写作文的时候 ， 写字的时候 ，他不是写的一个那个小小的那个有框的那种本子上面吗 ？

然后如果你先写了中间 ， 那就旁边那个大坨的 ， 然后空间不够了怎么办 ？

**吴涛** [4:23]
唉 ， 所以从小就要练 ， 练这个架构 。

**Rio** [4:26]
不不过这个这个 ， 就是笔画输入法真的挺好的 。 就是我我有一个例子哈 ， 就我给我爸妈那个时候教他们用这个电脑输入字 ， 然后无比和拼音都尝试过 ， 都太 ， 对他们 ，他们那代人来说都太难了嘛 。

但是他们在手机 ， 那个就不是现在的手机 ， 那个时候的手机上， 就是还是键盘的时候 ， 用这个啊 ， 就是横竖撇拉这么一笔一笔地写 ，其实对他们来讲就跟那个 ， 呃 ， 教写字一样 。

就说你记着你先打横竖撇拉 ， 你就怎么写那个字 ， 你就照着那个按 ， 就只用记那 5 个键就可以了嘛 。

然后加上这个这个笔顺纠错的这种功能的话 ， 就大部分场合还是能把那个中文字写出来的 。

**吴涛** [5:07]
嗯 。

**Rio** [5:08]
OK， 下一条 ， 这什么玩意儿 ？

**吴涛** [5:11]
啊 ， 对 ， 上次 ， 对 ， 说到德语 ， 就是上次我念错了一个德语单词 ， 就是当我提到 ， 嗯 ，Fe-Schrift， 就是那个 ， 呃 ，在德国的车牌上面所使用的那种 ， 呃 ， 字体的时候 。

**Rio** [5:27]
车牌字体 ， 啊 ，OK。

**吴涛** [5:28]
对 ， 它的正确的名字叫做 Fechungserschreibenschrift。 呃 ， 然后我上次 ， 我上次念成了 Fechungserschwinderschrift。

**Rio** [5:40]
等一下， 我很好奇是谁 ， 谁听出来你念错了 ？

**吴涛** [5:42]
当然是我女朋友 。

**Rio** [5:44]
啊 ， 原来还有一个铁杆粉丝 。

**吴涛** [5:47]
那可不 ， 她已经开始给贵爵母捐钱了 。

**Rio** [5:51]
呃 ， 你是说 《IT 公论 》 吗 ？

**吴涛** [5:53]
对啊 。

**Rio** [5:54]
OK。

**吴涛** [5:55]
不是给 B 节目捐钱 。

**Rio** [5:57]
哎 ，不不过 ，不过 B 节目也有很多听众要求说来信 ， 啊 ， 纷纷来信说要给我们捐钱 ， 拿钱砸 ， 砸晕我们 ， 怎么办 ？

**吴涛** [6:05]
真的假的 ？ 我才不相信 。

**Rio** [6:07]
真的真的真的 ，不开玩笑 ，不开玩笑 。

**吴涛** [6:09]
哎 ， 那那我们应该怎样 ， 怎样让我们的这个捐款页面显得更加 geek 一点呢 ？

**Rio** [6:17]
你看我的这个捐款页面都做好了 ， 就等你大笔一挥同意 。

**吴涛** [6:23]
好吧 ， 我缺个麦克风 ，也许可以 。 各位给我凑点经费 ， 搞一个好点的麦克风 ， 这样大家可以听到 ， 听到我更加清透的嗓音 。

**Rio** [6:34]
对 ， 更加丰富 ， 更加有层次感的声音 。

**吴涛** [6:37]
有层次感的声音 。

**Rio** [6:39]
不过不过其实现在有很多人听不出来你是用的那个 Mac 的内置麦克风在录 。

**吴涛** [6:45]
啊 ，因为内置麦克风据说效果非常好 。

**Rio** [6:48]
对 ，但是离这个一个专用的麦还是有比较明显的差别哈 。

**吴涛** [6:54]
嗯 ， 对 ， 我在那个 Instagram 上看到你用的麦克风 ， 感觉好像蛮专业的 。

**Rio** [6:59]
我那个也是一个入门级的而已 。

**吴涛** [7:02]
啊哈 。

**Rio** [7:03]
嗯 。 我们可以给买 ， 给你 ， 给 ， 如果我们这个节目也开始收钱 ， 打引号 ， 哈哈 。 嗯 ， 我们拿到 Ted 的钱 ， 第一件事就是先给你买一套这个好的录音 ， 好的这个设备 。

**吴涛** [7:15]
耶 ，不过耶 。

**Rio** [7:19]
现在我们就看到底会不会有人给我们钱 ， 好不好 ？

**吴涛** [7:24]
哈哈哈 。 对 ， 呃 ， 然后这不是我唯一念错的德语词 ， 嗯 ， 我还念错了另外一个 ， 叫做 Deutsches Institut für Normen， 我把它念成了 Deutsches Institut für Normen， 就是我把 Institut 这个词的词性搞错了 。

**Rio** [7:41]
嗯 ， 你要先解释一下什么是词性 ，因为这个不是 ， 比如英语里面就没有这个概念 ， 所以很多人不知道是什么东西 。

**吴涛** [7:51]
呃 ， 好吧 ， 反正德语作为一种非常繁琐的语言 ， 听起来像 ， 呃 ， 某种机器人掉到下水道里面发出的声音的语言 。

它有非常多奇怪的地方 ， 比如说其中之一就是 ， 呃 ， 所有的名词要分成三类 ， 啊 ， 阴性 、 中性和阳性 。

如果你学过法语的话 ， 你知道阴性和阳性 ，但是就像拉丁语一样 ， 啊 ， 德语还有中性这个东西 。

呃 ， 阳性叫做阳性的第一个 ， 就是阳性的名词的 ， 呃 ， 单数的 ， 呃 ， 主格 ， 就有一个冠词叫做 der， 然后它相当于英语的 the， 然后阴性的名词的冠词是 die， 然后它也相当于英语的 the， 然后中性的名词的冠词是 das， 它也相当于英语的 the。

就是英语只有一个 the， 然后德语有 dedidas, dedidas, dedidas， 就是所有的 。

**Rio** [8:50]
这个这个可能听众朋友们在国内见的最多就是那个大众的广告哈 ，Das Auto。

**吴涛** [8:58]
Das Auto， 对 ，Das Auto。

**Rio** [9:00]
对 ， 然后就是 ， 就翻译成英语是 the car 的意思 。

**吴涛** [9:05]
The car，yes。 但但是 auto 这个东西是 ， 呃 ，automobile 的缩写 ， 所以它是中性的 。Somehow，someway， 对 。

**Rio** [9:16]
所以是 Das Auto。

**吴涛** [9:18]
Das Auto，Das Foto， 对 ，Auto 和 Photo，Photo 就是 photo，Photo 和 Auto 都是中性的 。

**Rio** [9:25]
但是也有很多不合理的地方 ， 比如说太阳吧 ， 它怎么可能会是阴性的呢 ？ 结果在德语里面它真的是阴性的 。

**吴涛** [9:34]
对 ， 太阳是阴性的 ， 月亮是阳性的 。 当然也有 ，也也是有原因的 ，因为在古日耳曼神话里面 ， 日太阳是个女神 。

**Rio** [9:45]
月亮是个男神 。

**吴涛** [9:47]
月亮是个男神 ， 就是跟那个希腊神话正好相反 。 对 ， 它是一种那个比较古老的神话的 ， 或者说宗教仪式的延存 ， 可以这么理解 。

**Rio** [10:00]
但是这跟现在比如说中国的 ， 就正常人的一个想法好像就不太一样 。

**吴涛** [10:08]
对 ， 中中中国阳这个东西就默认是 ， 就不是默认 ， 就阳这个东西就是太阳嘛 。 但 ——

**Rio** [10:14]
对啊 ， 阴就是月亮啊 ，因为字里面就有那个月亮 。

**吴涛** [10:18]
在英 ，在德语里面 maskulin 这个这个这个描述的正确翻译方法是雄性 ， 就是他们认为太阳是 ， 太阳是阴性的 ， 月亮是雄性的 ， 就太阳是雌性的 ， 月亮是雄性的 。Somehow 也 make，有点能做出一点意义来 ，但对 ，但还是比较奇怪的事 。

**Rio** [10:40]
对 ， 关键是我觉得德语这个分这个三性完全任何一点用处也没有啊 。 有没有什么实际的用处 ， 我自己自己也想不出来 。

当时学的时候就很痛苦 ， 所有的 ， 就像大家认为背英文单词要背 ， 就是名词的话你得记一个单复数 ， 对吧 ， 就完了 。

然后有些可能特别的什么 ， 呃 ， 单复同形啊 ， 或者是什么特殊的 ， 呃 ， 单复同形有什么 ， 呃 ，people 作为一个种族来讲 ， 对吧 ，有同形单复同形的 。

然后有些特殊的一个 ， 比如说我们常讲的数据 data， 它其实是一个复数 ，但是它的 ——

**吴涛** [11:13]
对 ， 大众 ， 对 ，在德语里面这个词仍旧在使用其拉丁语单数形式作为单数 。 就是你说一个数据的时候 ， 你必须说 andatum，而你不能说 ， 呃 ，data， 这种用法是错的 。

对 ，在英语里面已经变成 ——

**Rio** [11:29]
对 ， 现在英语里面已经就 data 已经变成一个不可数的了 ， 然后是就就没有复数形式 。 然后但如果你是考古的话 ， 你发现 ， 哎 ， 还有一个 datum，D-A-T-U-M， 这个单数的形式 。

但是现在就只要在现代的文献里面 ， 基本上是看不到这个说法了 。 当然还有一些更加诡异的 ， 呃 ， 就是单复数 ， 你完全看不出它们之间有什么区别的东西 。

**吴涛** [11:53]
对 ， 我记得前一阵子丰田有一辆日本车 ， 叫叫什么 ， 叫什么 ？

**Rio** [11:59]
Prius， 对 ， 这个就 ——

**吴涛** [12:00]
对 ，P。

**Rio** [12:01]
P-R-I-U-S， 然后它的复数形式叫做 prii。

**吴涛** [12:05]
Prii， 对 。

**Rio** [12:06]
是 P-R-I-I， 两个 I。

**吴涛** [12:09]
就专门说这是一个拉丁语词 ， 所以它的复数应该叫 I。What the hell。

**Rio** [12:13]
哈哈哈 ， 对 ， 就就英文里面就有这种很奇怪的事情 。 但是你你想想都还能够接受 ， 起码还能知道说这个是为了区别一个和多个 ，但虽然我不知道意义何在 。

嗯 ， 然后还有就是 ，但是德语里面的名词 ， 它还除了要分单复数之外， 它还要分三个性别 ， 然后这三个性别 totally make no sense。

**吴涛** [12:35]
对 ， 呃 ， 当然可能我觉得每种语言都有其复杂度吧 ， 比如说中文的复杂度就在它们它的写里面 ， 它的它的书写是非常复杂的 ， 语法简单得要死 ，但是书写非常非常复杂 。

**Rio** [12:47]
对 ，其实从从这个角度上中文还是蛮不错的 ， 就是不分单复数 ， 对吧 ？

**吴涛** [12:53]
对 ，不分性数格 ， 这是非常好的一点 。

**Rio** [12:56]
对对 。 啊 ， 唯一一个要分那个 ， 就是中文有一个不太爽的地方 ， 量词太多也没什么用 ， 好像 。

**吴涛** [13:02]
对 ， 对于外国人来说最大的困困扰之一就是量词了 。 你不像习语 ， 习语这些东西你不会也就罢了 ， 量词你不会的话 ， 就很容易会会说错话的 。

**Rio** [13:14]
对对 ，而且而且量词其实也没有太大的实际作用 ，在我看来 。

**吴涛** [13:20]
嗯 ， 对 ， 它除了对于一些没有固定形状的东西有一些一些意义的 ， 比如说英语里面也会说一瓶水啊 ， 一杯咖啡啊 ， 中文对啊 。

但是除此之外， 好像为什么一定要说一匹马呢 ？ 不能说一个马 。

**Rio** [13:37]
对对 ， 马一个 。 不过但是在有些方言里面 ， 就是在方言的口语里面 ， 量词已经被很多情况下被省略掉了 。

就是比如说最简单例子吧 ， 就我们俩人， 我们不说我们两个人， 对吧 ？ 我们俩人在这这里扯淡 。

呃 ， 还有那个谁 ， 哎 ， 对面过来俩狗 。 哈哈哈 。 对 ， 就就有时候还是可以省略的 。 然后我一直在想 ， 如果作为一个有有性格一点的这个尝试 ， 你可以以后都不说量词 ， 看看会有什么效果 。

老板 ， 给我俩俩苹果 。 啊 ， 这我没有中文 。

**吴涛** [14:11]
老板 ， 上俩面 。

**Rio** [14:14]
对 ， 上俩面 。 嗯 ， 这也这也不错 。 老板 ， 来五来五车 。 啊 ， 对 ， 这种这种事情就比较诡异了 。

但是可以试一下， 可以试一下 。 下一条反馈是 ——

**吴涛** [14:29]
也是我的 ， 就是 ， 呃 ， 我上次说到一 ， 呃 ， 伦敦的交通字体 ， 我我不确定是 transport 还是还是 ， 呃 ，underground 的字体里面 ，i 小写字母 i 的上面的那一点是个正方形的话 ， 我说旋转 90 度 ， 它是个菱形 ，但实际上正方形旋转 90 度还是个正方形 。

**Rio** [14:50]
你玩我们呢 。

**吴涛** [14:52]
哈哈哈 ， 俄罗斯方块 ， 俄罗斯方块里面正方形怎么旋转都是这样 。

**Rio** [14:59]
没有用 。 哎 ， 你说它写那个写那个正方形旋转的那个函数 ， 会该不会直接就 return？

**吴涛** [15:07]
No op， 对 。

**Rio** [15:08]
对啊 ， 应该是 ， 我觉得没有意义嘛 。

**吴涛** [15:11]
对 ， 嗯 ， 呃 ， 然后还有一条是梁海纠正我的 ， 说小写的小写字母 g 的双层版本和新加字母应该是没有什么关系的 。

就是我当时想到它应该可能跟那个希腊字母有一个叫什么 epsilon 之类的 ， 就看起来非常奇怪的一个字母有点关联 。

我觉得 g 可能是从那个字母来的 ，但实际上完全不是 。 嗯 ， 对 。

**Rio** [15:37]
作为什么 Type is Beautiful 成员 ， 你是不是要去蹲墙角反思个一段三五天之类的 ？

**吴涛** [15:44]
这种事情也不是第一次发生了 。 我上次在知乎上斩钉截铁的说瑞士高速公路的字牌 ， 呃 ， 瑞士高速公路的字牌的标 ， 呃 ， 标号牌的字体就是 Frutiga。

然后有人跳出来说贵网站上面 ， 呃 ， 说过它是 Frutiga 的一种改型 。

**Rio** [16:05]
简直就是自打脸 。

**吴涛** [16:06]
没错 ， 还好那篇文章 ， 哎 ， 那篇文章不是我译的吧 ？ 应该不是我译的 。 如果是我译的话 ， 我就可以去死了 。

**Rio** [16:12]
哈哈哈 ， 好吧 ， 我们原谅你了 。

**吴涛** [16:15]
谢谢原谅 。

**Rio** [16:16]
嗯 ， 我原谅你了 ， 听众原谅你 ， 我不知道 。

**吴涛** [16:19]
啊 ， 还原谅不原谅 ， 哈哈哈 。sorry。 呃 ， 对 ， 然后就是 Input 字体 ， 呃 ， 我上一次去看它的时候 ， 发现它有了一个

花括号的替换版本 ， 就是有一个普通的花括号出现了 。 如果你对花括号也不不爽的话 ， 可以去用用这个普通花括号的版本 。

**Rio** [16:42]
嗯 ， 所谓普通就是没有那么扭曲的一个花括号哈 。 就是 Input 那个 ， 它会有很多这种 ， 呃 ， 就它有一个定制化的界面 ， 你可以选择那些你你喜欢的字 ， 你变种的组合嘛 。

这样就是反正我总有一个适合你的 ， 然后碰巧你就是喜欢那个直上直下的大括号的东西 。

**吴涛** [17:03]
没错 。

**Rio** [17:04]
哎 ，其实之前那个花括号我觉得挺好的 。

**吴涛** [17:06]
嗯 ， 哈哈哈 ， 好吧 。

**Rio** [17:08]
还是要强调这一点 。

**吴涛** [17:10]
耶 。

**Rio** [17:11]
嗯 ， 啊 ， 下一条反馈是我说错了一个东西啊 ， 就是我们上次讲到有这个 Econsolidator 啊 ，Calibra， 还有 Cambri， 对吧 ？Cambria 都会带着的 ， 就是微软的 C 系字体 。

当时我说它好像是随这个 Office 发布的 ，但其实它是随 Office， 呃 ， 随这个 Vista 发布的 。 然后之所以我讲错这个 ，是因为我用这套字体 ， 就是完全是因为在 ， 呃 ， 装了 Mac Office 之后， 在我的 Mac 上面才找到的 。

然后因为 Vista 我真的是没有用过 。

**吴涛** [17:45]
哎 ， 遮遮掩掩就直接说我是果粉吗 ？ 不知道是很正常 。

**Rio** [17:48]
不 ， 这个 Vista 真的很糟糕嘛 。

**吴涛** [17:51]
哎呀 。

**Rio** [17:52]
它确实出来的时候 ， 对 ，不是我的 ， 这个是公认的嘛 ， 这个是公认的 。 所以所以这个这个错我觉得是情有可原的 ， 你们一定要原谅我 。

对不起 ， 梁海先生 ，也是梁 ，也是梁海纠错的 。

**吴涛** [18:04]
嗯 ， 就 ， 嗯 ， 然后其实有一位 ， 呃 ， 听众在 ， 呃 ，他是叫孙玉东 ， 对 ，他来邮件说的 ， 呃 ， 上次我们提到就是微软给学生有一个特殊的计划 ， 叫做 DreamSpark。

然后 DreamSpark 呢 ， 就可以干嘛呢 ？ 就是你比如说你学校参加了这个项目之后， 你可以从你学校拿到一个账号 ， 然后你用这个账号可以在微软的官方网站免费的下载到大部分的微软的产品 。

然后里面它提供那个叫做叫什么 Visual Studio， 它是提供的是 Pro 版本 。

**Rio** [18:43]
哎呦 。

**吴涛** [18:44]
哎 。

**Rio** [18:45]
不过 ， 嗯 ， 之前我们讲那个那个叫什么来着 ？ 叫 Community Editions 吧 。

**吴涛** [18:51]
对 ，Community，CE， 它是 。

**Rio** [18:53]
CE 是一直是免费的 ， 就对公众都是免费的 。

**吴涛** [18:56]
对 ， 将会 ，而且将应该将会一直免费下去 。 就像那个之前很多的 ， 呃 ， 比如说那个 JetBrains 的 IDE， 呃 ，IntelliJ 也是有 Community Edition，也是永远免费的 。

**Rio** [19:09]
嗯哼 ，不过不过说到这个 ， 我想起你一个事 ， 就是好像这个有一个商业上的专门的说法嘛 ， 这种就是把一个产品分那么多种类版本 ， 一个什么叫做 Product Matrix 是不是 ？

**吴涛** [19:21]
对 。

**Rio** [19:22]
我也不太清楚 ， 反正就是就微软很喜欢搞这种事情 。 大家不知道现在还有 ， 现在可能还好一点 ， 之前 Vista 刚出来的时候 ， 大家不知道还有没有印象 ， 好像有 ， 好像是有十几个版本吧 ， 我记得 。

**吴涛** [19:33]
不止微软吧 ， 我觉得很多通用的产品都有这个特点 。Eclipse 不也是吗 ？ 你去 Eclipse 的那个下载页面 ， 我靠 ， 一大堆版本 ， 什么 JavaE 版本 ， 呃 ，C++ 版本 。

**Rio** [19:45]
对对对 。

**吴涛** [19:46]
这个版本那个版本 ， 就就不明白了 。 就难道不能提供一个就是基础版本 ， 然后 whatever， 让用户自己去装 ， 该装的插件或者怎么样 。

**Rio** [19:56]
对 ， 就我能想到的有这个所谓 Product Matrix 这种这种结构 ， 就是把一个产品 ， 就同一个产品 ， 然后根据什么不同的场景或者不同功能细分的很多的这种产品给我的感觉 ， 整个或者这种公司给我的感觉都是很差的 。

因为其实从本质上你都知道 ， 它就是在所谓的追 ， 哎 ， 等一下， 那个东西叫什么来着 ？ 那个叫做利润最大化 ， 好像也不对 。

**吴涛** [20:24]
就等于是你不愿意 ， 就是我所有这些功能加在一起开这个价 ， 你出不起 ， 那我就砍掉一些 ， 然后把那个你能买的那个价格介绍给你 。

但这就有点像卖车嘛 ， 就是任何就是就是我很小的时候总是会有很奇怪说 ， 这为什么车的广告上面都不写定价呢 ？

**Rio** [20:50]
哈哈哈 ， 它会写 ， 它会写一个多少多少起嘛 。

**吴涛** [20:53]
对 ，但那个起是完完全全的裸车价 ， 真真真正的你要你要去配那个 configurator， 然后才知道每一个每加一个 option 要加多少钱 。

而那个 configurator 的那个 list， 你可以花两天的时间跟那个销售代理在那边讨论这个事情 。 如果你真的想要定制一辆属于自己的车的话 ， 当然这在这种情况在中国可能不是很普遍 ，但在欧洲很多人会愿意花两天时间 ， 呃 ， 至少是一下午吧 ， 跟那个销售代表去讨论这辆车它要哪些 option， 然后然后定 ， 然后两个月之后这辆车才可以送到他手里 。

但是每一个 option 都是他亲自 check 过的 ， 就这才是就是 Metrix Product Metrix at its worst。

**Rio** [21:43]
对 ， 就就反正就给人感觉就非常不好 ，而且就整个是没有 ， 就平白无故的增加了这个选择的这个难度 。

本来就选选择困难症已经够严重了 ， 对吧 ？ 它还给你搞得那么麻烦 ， 让你真是想撞墙死 。 不过现在这什么 Windows 8， 还有之后可能对它跳过去久了 ，是吧 ？

随着 Windows 10， 就 8 已经好很多了 ，8 只分了一个 ， 就是 8 和这个 8 Pro 专业版 。

**吴涛** [22:08]
对 。

**Rio** [22:09]
啊 ， 好像以前 Vista 还有什么 ， 我想想有什么 Home Basic、Home Premium、 嗯哼 、Professional，有个什么 Ultimate， 还有 Enterprise。

**吴涛** [22:21]
对 ， 还有一个 Home Home Premium 之类的一个词 ， 一个一个版本 。

**Rio** [22:26]
还有个什么 Starter Edition。

**吴涛** [22:29]
嗯 。

**Rio** [22:29]
还有 ， 然后所有的都要乘以 2，因为它分那个 ， 呃 ，32 位和 64 位不同的东西 。

**吴涛** [22:35]
不只不止乘以 2， 还要乘以所有的语言 。

**Rio** [22:38]
啊 ， 对对对对对 。

**吴涛** [22:39]
我觉得这是非常二的一件事情 ， 就是你就不止 Windows 如此 ， 就什么 BlackBerry 或者是安卓的我不知道 ，但很多操作系统都一样 。

**Rio** [22:48]
它微软那个分语言是因为它是跟去定价有关系嘛 ，其实跟这个 Product Matrix 本质上也是一个意思 ， 就是你你不 ， 哎 ， 看一下， 我说中国这边比较穷 ， 我们把这个价格定低一点 ， 德国那些人比较有钱 ， 我们把那个价格定高一点 。

但是但是如果那产品是一样的 ， 如果我可以随时像这个什么 iPhone 一样切换语言 ， 那我还搞屁啊 ， 那我大家直接买中国版去德国用不就好了 ， 对吧 ？

所以它就搞成这个所有的语言是不可以 ， 呃 ， 随意替换的 。 但也可以有有这种工具 ， 叫个叫什么 MU， 呃 ， 叫什么 。

**吴涛** [23:23]
现在已经可以下载语言包了吧 ？ 我记得 。

**Rio** [23:25]
不 ， 呃 ， 语言包从 Vista 时代还是 Win7 时代就已经有 ，XP 都已经有语言包 ，但是那个语言包是首先是一个要额外付费买的 ， 就要等于就要补齐那个那个就是定价的差异嘛 ， 就一般来说是这样子 。

然后你还得麻烦去安装 ， 然后其实是你装完这个语言包之后， 它其实也不并不等于一个原生的那个语言的系统 。

我我自己装过 ， 所以这个是深有体会的 。

**吴涛** [23:51]
啊 。

**Rio** [23:52]
所以 you know， 所以你看见这种 ， 呃 ， 语言是不可切换的 ， 然后有各种 Edition 的 ， 你就知道 ， 嗯 ，something is wrong。

**吴涛** [24:02]
Yeah。

**Rio** [24:03]
啊 ，anyway， 吐槽一下微软 。

**吴涛** [24:05]
Yeah。

**Rio** [24:05]
然后现在它已经好多了 ， 就是刚才讲嘛 ， 那个 8 已经好像我印象中只有 8 和这个 8 的 Pro， 呃 ， 这两个区别 ，但它有那个针对 Surface 好像一个什么版本那个再说 。

然后语言我不知道现在怎么什么一个什么情况 。

**吴涛** [24:19]
我至少从刚刚我为了玩那个文明超越地球装了一个 ， 呃 ， 装了一个 8.1， 还是德语版的 ， 我也没有去试 ， 反正就用 。

**Rio** [24:28]
它在控制面板里面有一个这个可以选语言 ，但是我记得是要语言安装包的 ，但是安装包怎么来就是一个问题了 。

**吴涛** [24:35]
嗯哼 。 啊 ，Windows 8， 我去装了 Windows 8 之后重去重温了一下控制面板 ， 我觉得我靠怎么会有这么多东西 。

**Rio** [24:46]
其实它也不算多了 ， 它只是就是呈现的不好 。其实你仔细看一下， 像 Mac 的那个叫做什么 System Preferences 里面 ， 它的选项也蛮多的 。

**吴涛** [24:55]
我记得那个 Windows 8 就是从 Windows Vista 时代开始 ， 你它也试图把那个功能组合 ， 就是那个分成几个大组 ， 然后你可以一个一个点进去 ， 可是找起来太麻烦了 。

**Rio** [25:09]
对 ，而且它的那个图形化的程度不够嘛 ，在那里就你还是要读很多字 ， 感觉就觉得有种很臃肿庞大的感觉 。

**吴涛** [25:18]
对 。

**Rio** [25:19]
其实简单来说就一条 ， 就图标做的不够漂亮 。 哈哈哈 。 好了 ，不不吐槽这个了哈 。 呃 ，在这个啊 ， 再插播一条小新闻啊 ， 作为一个什么购语言的粉丝 ， 今天那个购语言发布了 1.4 的这个版本 ， 然后为什么突然要讲这件事情呢 ，是因为在这个版本里面它正式加入了安卓的支持 ， 就所以就是你可以现在开始用这个购语言写游戏了 ， 就用 OpenGL 写游戏 。

### Go新闻

**Rio** [25:48]
但如果你现在还要写那种普通的那种 APP， 就是需要有这个标准化的界面 ， 可能还要用一下 Java 的这个东西去去去做一下 。

但如果你只是写游戏的话 ， 完全可以是只用购语言来 build， 就大家如果有兴趣可以去尝试一下 。

**吴涛** [26:02]
对 ， 我记得这个是今年 4 月份还是什么时候就已经还是 6 月份就已经出来的 ， 放出来的风风吧 。

**Rio** [26:14]
对对 ，他们在 1.3 的时候 ， 就半年前他已经在在讲这个会有这个事情了 ， 就其实 1.3 Beta 的时候就已经有这个功能 ， 只是没有正式呃发布而已 。

**吴涛** [26:24]
嗯 ， 我觉得实际上的其实可能还要更早一点 ，因为我记得在 ， 嗯 ， 我不确定啊 ，但好像是在有一次那个 Google Developer， 呃 ， 大会上面 ， 我听到有人在问说开发 Android 可以用别的语言吗 ？

当时的得到的答复是目前没有计划 ，但 。

**Rio** [26:48]
嗯 ， 它不是可以用那个 NDK 用 ， 然后 C 或者 C++ 写吗 ？

**吴涛** [26:52]
呃 ， 那个时候还没有吧 ， 我不我过去太久了 ，2012 年可能是 。

**Rio** [26:58]
OK， 那是今年的今年的那个那个 Google I/O 的时候说的 。

**吴涛** [27:02]
OK。

**Rio** [27:03]
对 ， 呃 ， 所以就如果你是一个痛恨和我们一样痛恨 Java 的真相 ， 然后又想写安卓的游戏 ， 啊 ， 现在你可以有一个官方支持的正式的 ， 呃 ， 替代选择了 。

当然 ， 嗯 ， 什么 ， 就现在肯定是属于刚开发布的一个不太稳定的阶段哈 ， 就是我就就是前方坑多 ， 自己小心 。

**吴涛** [27:25]
嗯 。

**Rio** [27:25]
嗯 ， 另外一个比较值得我挺高兴的事情是 ，他们决定在下一个版本 ， 就是 Go 1.5 的时候 ，也就是大概半年之后发布的时候 ，他们会加入正式的 iOS 的支持 。

**吴涛** [27:39]
可是这个是什么意 ， 它的具体的意思是什么呢 ？ 就是我可以通过用写用 Go 来编出一个 iOS 的原生程序吗 ？

**Rio** [27:49]
呃 。

**吴涛** [27:50]
这个 。

**Rio** [27:51]
就它它应该可以用那个叫什么 ， 呃 ， 可以编译成一个 C 的就是原生代码 ， 就基于这个就是那个叫什么 ARM 平台的嘛 ， 的 C 的代码可以直接在这边跑 。

但至于说你怎么去封装成一个 APP， 可能后面还有一些要用到 Xcode 的东西 。 但是 。

**吴涛** [28:07]
对 ， 它怎么才能去调用 Coco 的这对 API 呢 ？ 就 Coco Touch 的这个 API， 它会它怎么才能就是切开苹果这一层厚厚的壁垒去调用这个 API。

**Rio** [28:20]
对 ， 这这可能可能会跟这个安卓的情况比较类似啊 ， 就是可能说是比如说你可以写游戏只用 OpenGL 写 ，因为 Open 你写游戏的话可以不用那些 Coco 那些 Coco 的东西嘛 。

**吴涛** [28:30]
就只用 Metal 那个 。

**Rio** [28:31]
呃 ，Metal 我都不知道它能不能具体怎么样 ，但显然是肯定 ， 如果它支持肯定是先支持 OpenGL 跟安卓一样嘛 ， 我觉得 。

啊 ， 就那种你不需要调用很多系统级别的东西 ， 就纯粹做一个就自己在那跑的一个应用 ，但主要就是游戏了 ， 那可能 。

**吴涛** [28:47]
然后它给你放在一个 container 里面 ， 然后那个 container 是你先定义好的 ，有可能 Coco 的话就是就是走这个路线嘛 。

**Rio** [28:53]
对 ，但如果你要说你要做一个带什么就是写一个 APP， 普通的一个 APP， 然后需要用那 Coco 的那些东西的 ，不是 Coco 那个叫什么 。

**吴涛** [29:02]
Swift Objective-C。

**Rio** [29:05]
就是那个那个 runtime，不是那个 runtime， 就那些库叫什么 ，不叫 Coco。

**吴涛** [29:08]
UIKit。

**Rio** [29:09]
UIKit， 对 。 然后， 呃 ， 你可能还是要写用那个 Objective-C 或者用 Swift 写 ， 然后在 Xcode 里面编译 。 对 ， 大概情况是这样子 。

**吴涛** [29:17]
OK。

**Rio** [29:17]
啊 ， 然后就会说 ， 啊 ， 这个情况就比较有意思啊 ， 就说这个事情我们不知道将来会怎么样 ，但是起码 ， 啊 ， 如果它在半年后真的做了这个 ， 就现在已经是他们内部已经放出话来要做这个事情 ，但是就等下半年发布嘛 。

嗯 ， 就说 Google 会有这么一个语言能够同时间跨平台嘛 ， 就是 Coco 的话它可以编译到普通的桌面和 ， 呃 ， 安卓 ， 包括以后的 iOS， 可以用一套语言写一套逻辑 。

**吴涛** [29:45]
而且服务服务器端也可以用它写 ， 我觉得这是最妙的一点 。

**Rio** [29:48]
对对对 ， 这这个其实之前在那个 Google， 呃 ， 那个 Google Inbox 你知道吗 ？ 就是它之前写的那个邮件的客户端 ，他们其实在一定程度上已经做这件事情 ，但不过它是用 Java 的 ， 就是所有的那个就业务逻辑是用这个 Java 来写 ， 然后通过两个技术吧 ， 然后一个叫做 ， 呃 ，GWT， 把 Java 编译成网页版 ， 然后在那个 ， 呃 ，Chrome 里面跑 。

呃 ， 然后另外一个是真的真的是这样 。

**吴涛** [30:15]
GWT 它 Google 还在用吗 ？ 我不确定 。

**Rio** [30:18]
嗯哼嗯哼嗯哼 ，他们很多这个 。

**吴涛** [30:20]
Are you sure？

**Rio** [30:20]
Gmail 好像 Gmail 的后台也是也是这么弄出来的吧 ， 我记得 。

**吴涛** [30:25]
OMFG， 我以为啊 。

**Rio** [30:27]
这个不奇怪啊 ，Google 这么大一个 Java Shop 有什么好奇怪的 ？

**吴涛** [30:32]
我不 ， 可是 GWT 不是已经早就变成一个 community 维护的 framework 了吗 ？ 这个 Google 不是自己在主推 AngularJS 之类的东西吗 ？

**Rio** [30:41]
不 ， 那个是就我理解下 AngularJS 那些是他们做纯粹做网页的前端的时候用那个没有问题 ，但如果你稍微涉及到这种跨平台的东西的话 ，他们的就是所谓的这个 canonical version 还是 Java 版本的 。

比如说 Gmail 是这样子 ， 然后那个像 Inbox 也是这样子 。 然后呢 ，他们 Inbox 不是也有 iOS 版吗 ？ 然后 iOS 版的就是业务逻辑那部分 ，他们是用一个叫做

J2ObjC 还是叫什么玩意儿 ， 就是把 Java 编译成 ， 呃 ，Objective-C 代码的方法 。

**吴涛** [31:16]
What kind of sorcery is this？

**Rio** [31:18]
但是他们这个也有它的道理嘛 ， 就是你要维护同一个产品的业务逻辑 ， 要保证跨平台 。 如果你每个平台单独写到写一套的话 ， 那肯定就等于是像什么 bug 啊 ， 还有那时候开发量就全部每个就有多少个平台你就要乘以多少个数嘛 。

它这样的话就只用解决一个问题 ， 就一一套代码库 ， 然后之后就可以靠这个编译器 ， 就是这种跨平台的编译器来解决这个问题 。

**吴涛** [31:44]
在理想情况下是这样 。

**Rio** [31:45]
对对 ，但是但是它的那个 UI 那部分 ， 比如说像安卓的 UI， 它是用这个原生的那个那个 Java 来写的 。 嗯 ， 然后在 iOS 它是用 Objective-C 来来封装的 。

嗯 ， 然后， 呃 ，但是只只说只说业务 ， 就是跟那种平台的关系不是很紧密的业务逻辑那部分 ，他们是用一个 Java， 然后通过这种编译的方法来实现 。

**吴涛** [32:06]
OK。

**Rio** [32:06]
啊 ， 那么同样的道理就是说如果以后 Go 的话也可以差不多可以 ，也许可以做类似的事情 。

**吴涛** [32:12]
嗯 。

**Rio** [32:13]
No， 哈哈哈 。 啊 ，但这个事情也跟上上一期我们讲的那个 ， 啊 ， 微软的计划有点相关嘛 ， 就它是要要声称是用那个 .NET 支持 ， 呃 ， 安卓和 iOS 的跨平台的开发 ，但其实我知道它的用心也很也很清楚啊 ， 就是顺顺带夹点私货 ， 那你们都反正都一套代码了 ， 那不如顺便编一个 Windows Phone 的版本 。

哈哈哈 ，以此解决那个什么 Windows Phone 上面那个应用数不足 ， 然后这个开发者又不愿意开发的这么一个尴尬局面吧 。

**吴涛** [32:45]
对 ， 它算是一个鸡生蛋蛋生鸡的问题嘛 ， 就恶性循环 ，但 。

**Rio** [32:50]
啊 ， 说你你们不想给我生蛋 ， 那我送你个鸡包生所有蛋 。

**吴涛** [32:55]
对 ， 你顺手顺手帮我克隆一个蛋好了 。

**Rio** [32:58]
对 ， 对 ， 它就是打了那个小算盘我觉得 。 嗯 ， 好 ， 那个就插播的广告到这里啊 。

**吴涛** [33:05]
OK。

### Portal讨论

**Rio** [33:05]
那你现在你的正题是什么 ？

**吴涛** [33:09]
呃 ， 我先放音乐吧 。

**Rio** [33:11]
好 。

**吴涛** [33:12]
But there's no。 呃 ， 我实在是太细心了 。

Sarcasm self test complete。

**吴涛** [33:17]
嗯 ， 我们本来打算在这里插入电子游戏 Portal 的主题曲 Still Alive 的一个电子合成器版本 ，但是经过事后的一番研究发现 ， 这首歌的授权其实并不是像我原先以为的那样 ， 呃 ，以创作公用署名非商业协议发布 。

呃 ， 原作者 Jonathan Coulton 其实已经将这首歌的版权给了 Portal 游戏的制作商 Valve， 呃 ， 所以我们需要先询问一下 Valve 是否可以将它用在我们的节目里 。

而目前的现状是 ， 我跟 Rio 在接下来的内容里面会反复提到 Portal 以及这首歌 。 呃 ， 如果你不听一下的话可能会有点奇怪 。

嗯 ，anyway， 和大家说一声抱歉喽 。

I don't blame you.

**吴涛** [34:10]
北美山地时间 2006 年 1 月 2 日下午 3 点 04 分 05 秒 ， 您正在收听的是 IPN Podcast 网络旗下的 《 内核恐慌 》。

呃 ， 我们号称硬核 ，但是也没有什么干货 ， 想听的人听 ，不想听的人就不要听 。 好拽的一句话 ，有点怪 。

呃 ， 对 ， 然后就像大家刚才听到的这样 ， 我们从这一期开始有我们的主题曲了 。 耶

， 对 ， 然后， 呃 ， 缘起其实就是看 《IT 公论 》 有主题曲 ， 我挺眼红的 ， 我也想要一个 ，但是 ，但是一直拖到 ， 呃 ， 我们已经做了 5 期了 ，10 个礼拜了过去了才 ， 嗯 ， 终于找到了这么一个也不算非常合意 ，但是觉得还不错的主题曲吧 。

当然 ， 呃 ， 如果你知道它是什么来头 ， 那你已经知道它是什么来头 。 如果你不知道的话 ， 它是 ， 嗯 ， 一个游戏 ， 就是如果各位有听前三两期的 《IT 公论 》 的话 ， 会注意到 Rio 和刘一都在节目之中谈到了 Portal 这个游戏 ， 然后刚才大家听到的这段旋律就是 Portal， 呃 ， 一代里面的主题曲吧 ， 应该算 。

因为 ， 呃 ， 虽然整个完整的 ， 呃 ， 曲音乐是展示它是有歌了 ， 它是在 ， 呃 ， 游戏最终打穿之后才播出的 ，但是其实你一开始游戏那个 ， 呃 ，spoiler 的 spoiler alert， 就是一开始你在游戏里面捡起的那个收音机里面放的就是这首曲子 。

**Rio** [35:54]
然后在你打爆击的时候 ， 最后出字幕的时候也是放的这个 ， 就放的是这个完整版 。

**吴涛** [36:00]
对 ， 整首歌会被正式的唱一遍 。

**Rio** [36:03]
其实其实我第一次听这个歌还我还没有玩这个 Portal 这个游戏啊 ，但是 ， 哎呦 ， 一个什么机缘巧合我就听了那个歌 ， 我觉得哇 ， 好好可爱 。

**吴涛** [36:13]
真的吗 ？ 你在没有玩这个游戏的时候就听过这首歌 ？

**Rio** [36:16]
嗯哼嗯哼 。

**吴涛** [36:17]
OK，有意思 。

**Rio** [36:18]
对 ， 然后我就它有歌词嘛 ， 然后它有那个那个那个有一个动画效果 ， 然后你去看那个感觉真的超好 。

**吴涛** [36:27]
对 ， 所以反正总之就像我推荐 Rio， 就就为什么 Rio 会花一天 ， 就是花了一周加一周时间玩了 Portal 1， 然后又花了一天一整天时间打穿 Portal 2 呢 ， 就是因为我向他吐血强力推荐 ， 我逼着他去玩的 。

因为 Rio 其实有 ， 呃 ， 就是玩第一人称射击游戏会会会上吐下不泄 ，在我的这个强迫之下他还是去玩了一遍 ， 然后玩的对 ， 我推荐他玩的契机也就是希望能够选用这首曲子来作为游戏的主 ， 呃 ， 游戏主题曲 ， 作为节目的主题曲 ， 然后希望能够希望他能够理解这个游戏的 ， 或者说这个这个这首音乐的有意思的地方在哪 。

**Rio** [37:12]
嗯 ，但其实我要说的就是在我玩这个游戏之前 ， 我光看那个歌就已经觉得蛮有意思了 ，但就是说只是对里面的有些歌词的部分理解不是那么深刻 ，不知道为什么他要说那件事 ， 那你玩完游戏之后你就啊 ， 原来是这个意思 。

**吴涛** [37:27]
对 ， 比如说这对整个歌词里面的每一句其实都可以在游戏里面找到线索 。

**Rio** [37:32]
对 。

**吴涛** [37:33]
呃 ， 另外这个对 ， 另外这个歌曲也本身有点很有那个 ， 嗯 ，因为它本身就是一个 Geek 写出来的 ， 这首歌的这个作者是一个是在 Geek 界非常有名的一个人 ，他叫做 Jonathan Coulton，他写了很多 ， 呃 ， 说不上脍炙人口 ，但是非常 Geek 的歌 ， 比如说这首歌的歌词里面有一句是 ， 呃 We are out of beta, we are releasing on time 哈哈哈 ， 很有意思 。

对 ， 呃 ，有时候我们在我在公司发现这个 deadline 又一次被推迟的时候 ， 我就会在心里默默唱这首歌 。

哈哈哈 We are out of beta, we are releasing on time 哈哈哈 ， 对 ，在游戏界其实这是非常非常严重的一个问题 ， 就是游戏作为一种特殊的软件 ，其玩家对于跳票的容忍能力是非常非常差的 。

嗯 ， 除非你是暴雪或者是 ， 哈哈哈 ， 呃 ， 或者是 Valve 这种大公司 ， 否则你一般很难去

应对面对玩家的愤怒啊 。 对 ，而且而且 gamer 其实是非常容易愤易怒的一个人群 ， 就像之前的这个 Gamergate 里面爆连暴露出来一个一个一个一个现状一样 ， 就是这是一群 ， 这是大一群 ， 嗯 ， 打了鸡血的人。

对 ， 荷尔蒙无处挥发 ， 然后又不知道怎么跟女生交流的这样一群人， 就他们的情商是非常低的 ， 所以他们基本上宣扬泄愤的唯一方法就是骂你 ， 然后游戏公司是被被最容易被骂的狗血喷头 ， 喷狗血喷头的一方 ， 所以不能按时交付软件其实对于他们来说是非常严重的一件事 。

**Rio** [39:28]
所以其实从这从这一点说来 ， 像我这种 CG 玩家还是蛮能等的 。

**吴涛** [39:34]
呃 ， 对 ，其实咱们都算是休闲型玩家吧 ， 就骨灰级玩家等星期二已经等了 ，不知道就已经不知道把暴雪默默骂了多少遍了 。

对 ， 所以所以你玩 Portal 有什么观感 ？

**Rio** [39:50]
呃 ， 我先先解决那个问题 ， 我不我不知道为什么我玩 Portal 1 我只能玩就可能不超过半小时啦 ， 这样啊 ，不然就会那个头晕想吐 ，但是我玩 Portal 2 好像没有这个原因 ，但我想不明白为什么 。

**吴涛** [40:02]
Portal 2 的引擎和 Portal 1 不一样吧 ？

**Rio** [40:05]
我敢 ，但是我直观的看那个画面的时候没有看出太大的区别 。

**吴涛** [40:11]
画 Portal 2 的画面的精细程度要比 1 好很多呀 。

**Rio** [40:14]
是是因为你说它精度不够 ， 所以觉得想头晕想吐 。

**吴涛** [40:18]
也有可能是 somehow 一代的帧率不够高 。

**Rio** [40:21]
不可能啊 ， 一代的游戏 2007 年的 Portal 游戏现在的机器跑的肯定没问题 。 嗯 ，而且我玩游戏它推荐给我的那个设置都还是蛮高的 ， 这个特效的那个量的 ， 机器应该不是问题 。

就这个事情是一个听规 ， 我玩所有的射击游戏都会就第一人称视角的这种算是射击游戏吧 ， 啊 ， 都是这个问题 。

以前玩那个就是 Counter Strike CS 的时候也是就可能大概 20 分钟半小时就哎 ，不行了 ，不行了 ， 得必须得走 ，不然就是那个要要想吐 。

**吴涛** [40:52]
你就是传说中猪一样的队友 。

**Rio** [40:54]
哈哈哈 ， 对 ， 所以所以你看我我忍着这个头晕想吐这种风险去把这个 Portal 给打完了 ， 你看都是你真的是 。

**吴涛** [41:04]
太够意思了 。 嗯 ， 会不会是因为一代和二代里面的人的相机视野不一样 ？

**Rio** [41:12]
我还真没我还真没看出来 ， 我比较过一下 ，但是没有什么特别明显的区别啊 。

**吴涛** [41:17]
OK。

**Rio** [41:18]
反正这个事情挺让挺就很让我奇怪 ，也可能是说 ， 呃 ， 我玩一的时候就是已经训练过一下了 ， 然后玩的时候觉得哎 ， 跟之前已经折腾过那么久了 ， 这次是不是就好一点 。

**吴涛** [41:30]
嗯 ，也有可能是二代的场景相比相对于一代来说更空旷一点 ， 就可能有有那种纵深感 ， 你就不太容易 。

**Rio** [41:38]
对 ， 它会大 ， 看起来大一些 。 嗯 ， 嗯 ，有可能吧 。

**吴涛** [41:43]
然后你说你用一天时间打穿了 Portal 2， 我觉得还挺惊讶的 ， 就是就我因为 Portal 2 我可能玩过两次三次 。

**Rio** [41:52]
对 。

**吴涛** [41:53]
但我从来没有说一一天在玩这个游戏 。

**Rio** [41:57]
Portal 2 它的那个场景是比 1 要大概是 4 倍左右吧 ， 我估计就是从我的玩的体验来看 ， 就是整个你打穿的长度 ，因为 Portal 1 的就只有那 19 个 Test Chamber 嘛 。

**吴涛** [42:10]
呃 ，其实 Portal 2 不止 4 倍 ，因为 Portal 2 还有一个协作模式 ， 你可能 。

**Rio** [42:15]
啊 ， 那个是无限的对吧 ？

**吴涛** [42:17]
对 ， 就也那个其实也是我我不是很记得了 ，但是我相信它默认带的那些 ， 呃 ，Chamber 也是有限的 ， 就是如果你有兴趣的话 ，以后咱们可以试一下， 就是它可以支持两个好友 。

**Rio** [42:32]
OK。

**吴涛** [42:32]
对 ， 一个就是它就是在 Portal 2 最后结束的时候又有剧透 ， 就是你会被你会看到两个机器人， 一个一个是橙脸 ， 一个是蓝脸吧 。

**Rio** [42:42]
嗯哼 。

**吴涛** [42:42]
然后你你可以和自己的同伴各自操作一个 ， 然后每两个机器人各自拿着一把 Portal Gun。

**Rio** [42:49]
嗯哼 。

**吴涛** [42:50]
然后等于你可以在同一时间里面有 4 个 Portal， 然后其中两两两是互通的 ， 然后就可以打出更多组合来 ， 就你必须在队友的配合之下才可以解开一些谜题是吧 ？

**Rio** [43:03]
啊 ， 那那个也是有剧情的吗 ？

**吴涛** [43:05]
那个没有剧 ， 那个好像就只是一个联机模式而已 ， 好像是只只是一个协作模式而已 。

**Rio** [43:12]
OK， 就所以我就说就单看打单 。

**吴涛** [43:15]
单看主线剧情的话 ， 对 ， 对 ， 对 ， 大概 Portal 2 可能对剧情是蛮蛮长 ， 当时我我记得我是跑完了那个那个叫什么 ， 嗯 ， 就是从那个地下爬出来 ，不是不是从地下爬出来 ， 啊 ， 对 ， 从地下爬出来见到那个最开始又要剧透了 ， 怎么办 ？

没关系 ， 就是你找回那个土豆之之后， 我觉得那个可能爬出来就完了嘛 ，因为之前已经有这个 Test Chamber 有打过 ， 然后之后有一个正式的剧情 ， 你觉得已经蛮长 ， 最后想不到竟然还有一遍 Test Chamber，有可能又一个新一轮的嘛 ， 就觉得还蛮奇怪的 。

嗯嗯 ，因为 Test Chamber 本身也是它游戏最大的魅力 。

**Rio** [43:57]
啊 ， 对对对 ，但是我我没想到就是最开始有一个 Test Chamber， 然后中间有剧情完了还有一 Test Chamber。 嗯哼 ， 就完全没有 ， 就是这个是我初步我遇到的一个地方 ， 然后， 呃 ， 就是会觉得有点打到后面觉得哇 ， 怎么没完没了 ， 还没有完 。

哈哈哈 ， 呃 ，但是剧情很剧情很有意思 ， 剧情很有趣 ， 然后也不会觉得很无聊这样 。

**吴涛** [44:20]
OK， 所以你有想明白一代和二代 ， 就你你知道一代和二代的主角是同一个人吧 ？

**Rio** [44:28]
我知道 ， 就是他从那个最开始介绍的那个时间的线看出来 ， 就是在又又看出来嘛 。

**吴涛** [44:34]
对 ， 那你有意识你有想过为什么主角又回去重新做实验了吗 ？

**Rio** [44:40]
啊 ， 这个我倒没有想过 ， 为什么 ？

**吴涛** [44:42]
就是一代和二代的剧情其实是连着的 ， 就是一代的结尾 ， 你呃 ， 把 GLaDOS 打爆打爆之后到了地面上， 然后看起来在一个看起来像停车场的地方 ， 你被你会就是当然最 Portal 1， 呃 ， 刚刚出刚刚出来的时候 ， 最终的结局就是你看你重见天日， 然后就完了 。

**Rio** [45:05]
啊 ， 那个是假的 ， 对吧 ？ 那个那个也是那个也是后来我看你有一个网上的这个别人做的视频 ， 就也是他从这是个真人版的真人版的一个录录电影啊 ， 小电影 。

**吴涛** [45:18]
嗯哼 。

**Rio** [45:18]
你就说他好像是冲出去之后发现那周围的那些景物看起来是真的 ，但其实跑到边上看都是屏幕 ， 对吧 ？

**吴涛** [45:25]
哦 ，不是 ， 就是真就是在 Portal 2 出现之后，Portal 1 有了一个 update，有一个 patch， 然后这个 patch 把结局改了 ， 就是你重见天日之后， 呃 ， 自己受伤了 ， 然后你你第一人称视角会感觉到自己正在被一个机器人正在被一个什么东西往回拖 ， 然后一个机器人的声音说 ， 呃 ， 请你保持一个 party submission position， 就是要参加 party 的这么一个姿势 ， 然后他把你慢慢往回拖 ， 然后那个整个整个的画面才按下去

。 然后一代和二代之间的剧情其实会其实可以通过一个一部一部漫画解释 ， 就是呃 ，Valve 专门呃 ， 发了一本漫画叫做呃 ，Portal The Lab Rat， 然后在对在这里面解释了整个整件事情来龙去脉 ， 就是嗯 ， 如果你玩过 Portal 的话 ， 你可能会好奇就是为什么里面的人都死了 ，他们是怎么死的 。

嗯 ， 然后 Lab Rat 这个漫画其实就解释了这一点 ， 就是嗯 。

**Rio** [46:31]
但但是这个在呃 ， 叫什么 ，在那个 Portal 2 进场的时候 ， 就最开始那一些的不对 ，不就在 Portal 2 最后那部分的 Test Chamber， 你每次出来不就是一个电梯吗 ？

然后他电梯墙墙面上不是有一个有一堆破碎的这个屏幕吗 ？ 能够看出一点一点端倪吧 ？ 机器人什么就是突然发飙了 ， 然后把那些人都干掉了 。其实在 Labtory Science， 呃 ， 就在 Apache Science Labtory 里面 ， 嗯 ， 人们研究出来的就是真正的人工智能 。

呃 ，GLaDOS 这个名字的缩写就是整个片中的女人工智能的呃 ， 名字叫 GLaDOS， 它的它的缩写就是 General Lifeform and Disk Operating System 就是 DOS，DOS 这个部分就是 DOS， 然后前面是 General Lifeform， 就是它是一种嗯 ， 真正有智力的人工智能 。

但是人们发现一个问题 ， 就是在漫画里面有讲说嗯 ， 每一个人工智能嗯 ， 被打开之后， 就是把它 turn on 之后， 大约在 1/16 picosecond 之后， 嗯哼 ， 这个人工智能就会试图把人把开 ， 就会开始试图杀人。

哈哈哈 ， 对 ， 然后他们的解决方法就是拼命往这个人工智能上面加所谓的 core， 呃 ，personality core。 嗯哼 ， 就是有一个 personality core 是所谓的 moral core， 就是让让这个人工智能有道德意识 ， 对 ， 让他意识到道德杀人是不对的 。

嗯 ， 然后他这个装上 core 之后， 呃 ， 人工智能意识到呃 ， 杀人是不对的 ， 所以他就换了一个方法杀人。

他在呃 ，有一个呃 ，event 叫做 bring your cat to work 就是带你的猫来上班的这个 event 上面 ， 嗯 ， 把神经毒气接入到通风系统 ， 然后把所有的人都杀了 ， 除了一个人， 就是呃 ， 就是不不 ， 主角是一个 Test Object， 然后他不是工作人员 ， 就是 GLaDOS 杀了所有的工作人员 ， 然后但是工作人员有一个人活下来 ， 这个人叫做嗯 ， 叫什么忘了 ，但是就是 Lab Rat 就是以他的视角来解释整个 Portal 的 event， 就

是呃 ，GLaDOS 杀了所有的工作人员之后， 开始呃 ， 试图想要找到这个工作人员 ， 然后他继续做实验 。 嗯 ，因为 Apache Science 在后期已经找不到合适的实验对象 ， 就是如果你有仔细玩这个 ， 仔细听 Portal 2 里面的那些对白的话 ， 你会发现 Portal 2 一开始是受美国军方的支持 。

呃 ，Portal Portal 2，Portal 2 里面的 Apache Science 的历史很有意思啊 ，Apache Science 一开始是给美国军方提供呃 ，shower curtain 的 ， 就是浴帘的一个公司 ， 然后他他们的他的总裁嗯 ， 发现浴帘大事大获成功之后， 开始呃 ， 急速转向开始研究这种叫做呃 ， 可以就是超空间打开传送门装置 ， 开始研发这种装置 ， 然后一开始的时候美国 。

脑洞有点大 。

**吴涛** [49:53]
对 ， 你会发现美国政府给他提供了优秀的军事人才来呃 ， 就是应该是经过挑选的士兵来提供他做实验 。

嗯哼 ， 到后来他不得不花钱来雇人做实验 ， 到最后他连雇人都雇不到了 ， 只能请这强迫自己的雇员去做实验 。OK， 然后呃 ， 到 GLaDOS 的时候 ， 这个传统还是延延续了下来 ， 就是 GLaDOS 想要找到那个唯一仅存的雇员去做实验 ， 然后这个雇员嗯 ，在机缘巧合说 ，他故意把那个女主角的名字推到了整个实验名单的第一位 。

嗯哼 ， 女主角本来是第 1,600 多个候选人， 然后他一下子变成了第一个人， 然后就被唤醒去做了实验 。

**Rio** [50:40]
啊 ，OK， 这样原来 。 然后 。

**吴涛** [50:43]
还得看那个漫画 。 对 ， 你在这个游戏里面所所看到的墙壁上的所有的涂鸦也都是这个人画的 ，因为他患了精神分裂症 。

嗯哼 ， 然后他在他精神不正常的时候 ，他认为自己随身带的那一个 ， 就是上面画了心形图案的那个呃 ，Cube 是会跟他对话的 ，是他的唯一的 companion， 对 。

**Rio** [51:09]
但是这个这个这个这个情节在后面的对白中有经常被拿来恶搞 。

**吴涛** [51:15]
呃 ， 就是比如说在游戏界或者在西方欧美游戏界最常最最为人所知的一个 jargon 就是 the cake is a lie 然后正确的回应是 and the cube must die for it 哈哈哈 ， 对 ， 就是在呃 ，Portal 1 代里面应该是第 17 关 ， 我记得就 Test Chamber 17， 你用一个上面画了心形的 cube 去挡了很多 ， 你用它替你挡了很多子弹 ，因为你不你不拿它挡的话你就死了 。

然后等到这个关卡的最结尾 ，GLaDOS 强迫你把这个 cube 扔到一个熔炉里去 ， 然后你发现自己无论如何都只能把这个 cube 扔进熔炉里面 ， 然后才能过这个 Test Chamber。

然后当你把那个 cube 扔进去之后，GLaDOS 对你说 ， 呃 ， 你把它扔进去的速度比其他 90% 的人都快 。 哈哈哈

，是挺黑的 。

**Rio** [52:16]
嗯 ， 对 ， 里面的对白我觉得是这个是游戏最有魅力的地方 。

**吴涛** [52:21]
对 ， 它通过一种非常就是怎么说 dehumanization 的方式来让你觉得自己是一个 Test Object， 这个人工智能根本不在乎你是谁 。

你你在其他游戏里面你是主角 ，但在这个里面你是一个任人摆布的这么一个角色 。

**Rio** [52:39]
而且而且就里面的那种对白的那种 ， 就是跟那个 AI 给你对话的那种那种语气啊 ，不知道怎么回事 ， 我老是想起你 ， 想起你说话的感觉 。

**吴涛** [52:49]
我觉得真的假的 。

**Rio** [52:50]
超级好 ， 超级 match。

**吴涛** [52:54]
你是说 GLaDOS 还是说后面的那个 Whitley？

**Rio** [52:56]
呃 ，GLaDOS 就就已经是这样 。

**吴涛** [52:59]
What？

**Rio** [53:00]
就就觉得很很有意思啊 ， 就你不觉得吗 ？

**吴涛** [53:03]
呃 it's a compliment 哈哈哈 。

**Rio** [53:08]
我其实我觉得那个那个那个那个调调以后我们也可以经常拿来用一下， 就我觉得适合我们这个节目 。

**吴涛** [53:14]
I don't blame you no hard feelings 哈哈哈 ， 对 ，Torrent 和 GLaDOS 其实是同一个人配音的 。

**Rio** [53:23]
啊 ， 怪不得 。 等下 Torrent 有 Torrent 有有台词吗 ？ 就三句话 。

**吴涛** [53:28]
有啊 ， 就是 where are you 哈哈哈 。

**Rio** [53:31]
啊哈哈 ， 对 。

**吴涛** [53:34]
No hard feelings 哈哈哈 。

**Rio** [53:38]
他他好像唱歌也是他吧 ？

**吴涛** [53:40]
对 ， 唱歌当然是他了 。

**Rio** [53:41]
对 ， 那个声音超好听 ， 我觉得 。 嗯嗯哼 ， 对 ， 当然呃 ， 对 ， 回到我们的内核恐慌 ， 掉进这个有一一旦变身成 gamer 就变不回来了 。

嗯呃 ， 回到内核恐慌 ， 对 ， 为什么我们要选择这一个 ， 或者说我为什么要选择 Portal 的主题曲来做嗯内核恐慌主题曲呢 ？

我呃 ， 就是因为我觉得嗯 Portal 的这个剧情设定啊 ， 就是 artificial intelligence went mad 哈哈 ， 跟呃 Kernel panic 多少有点关联 。

对 ， 就就比如说这个内核恐呃 Portal 里面 ， 你也会听到比如说那个系统报错说啊 core core corruption at 100% 哈哈 ， 就和内核恐慌多少有点 ，而且你在游戏里面是是 literally 把那个呃 ， 把 GLaDOS 身上的 core 一个一个摘下来 ， 然后然后 dump 到那个熔炉里面去 。

对 ， 真正的 core dump。

**吴涛** [54:44]
对 ， 真正的 core dump。

**Rio** [54:46]
哈哈 ， 呃 ，其实这要解释啊 ， 这里的 core 和那个 core 还此 core 非彼 core。

**吴涛** [54:52]
对 ， 嗯 ， 哎 ， 为什么为什么 core dump 要叫 core dump 呢 ？core 是来自于哪 ？Kernel 就 Kernel 就已经有呃两位听众把我们的节目叫做叫成硬核恐慌 。

对 ，hardcore panic。 哈哈哈 ， 好 panic。hardcore panic。

**Rio** [55:13]
有有有 soft panic。 因因为因为我们的那个节目介绍里面有提到这两个词嘛 ， 然后一一想起来可能就一下就不明白这个组合的顺序了 ，也也挺也挺就和不和 ， 就这个错误还挺常见的其实 。

**吴涛** [55:29]
嗯 ， 对 ， 如果呃 ， 如果有这个不那么 hardcore 的听众需要呃在听我们节目的话呢 ， 大概还是解释一下吧 ， 就是 hardcore 这个词其实是来自最早应该是来自于音乐界吧 ， 就是 hardcore 是指比较呃 ， 直接粗暴疯狂程度更程度更强烈的东西 ， 就是音乐 ， 那比如 hardcore rock 或者是 hardcore metal， 就是非常强调那个呃 ， 这种由这种音乐形式的纯粹性和激烈性的 。

然后这个词渐渐嗯 ， 延伸到了就是它最开始是音乐的呃流派 ， 就 genre 的一种 ，但是这个词渐渐呃 ， 延伸到了日常用语里面 ， 就是形容某种事情非常的强烈 ， 或者是比酷更加激烈程度更高的一种一种状态 ， 就叫 hardcore。

比如说你可以说我是一个 hardcore 的果粉 ， 或者是我是个 hardcore 的 Java programmer。 嗯哼 ， 呃 ， 然后这个词还还被还被呃逆向衍生出了 softcore。

嗯哼 ， 这种这种衍生词就好像 Hamburger 被派生出什么 cheeseburger 一样 。 哈哈哈 ， 挺有意思的 。 对 ， 呃 ，但是 hardcore 跟呃 Kernel 是完全没有关系的两件事情 。

对 ，Kernel 在计算机方面里面一边一般指操作系统里面直接和硬件相关的那部分 ， 或者说呃 ， 直接管理嗯 ， 你平时作为一个用户所用到的程序的程序 。

嗯哼 ， 对 ，不知道这样解释清楚了没有 ，但总之 。

**Rio** [57:22]
但我觉得可能这里混淆的是那个 ，因为 hardcore 里面也有 core 这个概念嘛 ， 然后我们马上要说这个 core core dump， 然后又会有个 core，但其实这个 core 跟那个 core 是没有关系的 。

**吴涛** [57:33]
对 ，core dump 是嗯

，是程序出错之后的一种行为 ， 就是呃 ， 尤其是在 Unix 下面 ，有些程序如果它出错了的话 ， 它会把自己在内存之中的执行状态呃 ， 存储在硬盘上面 ， 然后或者是以某种方式呈现给你 ， 让你可以哦 ， 这个你是指程序员了 ， 让程序员可以去呃 ， 研究这件事情的案发现场 。

对 ， 然后这个这个这个行为叫做 core dump。 可是为什么要叫 core dump 呢 ？ 因为这个 core 来自于早期的一种叫做磁芯存储器的东西 。

**Rio** [58:17]
就是内存的祖宗 ， 现代内存的祖宗 。

**吴涛** [58:21]
对 ， 什么是磁芯存储器呢 ？ 就是简单来说就是把导线绕在磁圈上面 。

**Rio** [58:28]
磁铁 。

**吴涛** [58:29]
对 ， 就是一个磁的环 ， 然后你在上面绕导线 ， 然后 somehow someway 它就可以存储有磁和无磁两种状态 。

**Rio** [58:37]
对 ， 就可以就这个呃 ， 就可以表示 0 和 1 了嘛 。

**吴涛** [58:41]
对 ， 早期的内存就是这样做出来的 。 我记得我还读过一篇考古文章说 ， 我国早期五六十年代呃 ， 自行研自行研制计算机的时候 ， 还计算机科学家们的日常生活日常工作之一就是绕磁芯 ， 就是把导线在在在磁铁上面绕 ， 然后做出一个做出一块内存来 。

对 ，而且这个对这个内存有多大呢 ？ 就是你绕一个磁芯 ， 你可以你把导线在磁芯上缠一圈 ， 你可以绕出一个 bit 来 ， 然后可以想象一下你要绕出 16K 需要绕多少 。

**Rio** [59:17]
它一个磁芯大概就跟一个就是一枚戒指的那个大小差不多 。

**吴涛** [59:21]
对 ， 然后你要把这么小的东西绕上几千个 ， 然后你才有了几 K 的 。

**Rio** [59:27]
8K 的内存 。

**吴涛** [59:28]
8K 的内存可以用 。

**Rio** [59:29]
对 ， 就所以所以其实啊 ， 这个实呃 ， 大家可以去听找一下这个 ， 我们待会给给个链接在这个 notes 里面哈 ， 你可以去找一下相关的图片来看 ， 反正这个视觉上就让你想起在编辫子的感觉 。

**吴涛** [59:42]
对 ，其实还是相当正常的 ， 就是你你要仔细想象一下当初那么大的一个东西 ， 现在缩在可能你肉眼看不见的一个一个一个尺寸里面 。

对 ，而且是仅仅过去了五六十年而已 ， 技术进步 。 对 ，但是这个 core 这个词 ， 就是 Magnetic magnetic core 里面的这个 core， 一直延续到今天 ， 就是有时候还是会说 core dump。

那么这个 core 最开始的来源就是就是源自于此 。

**Rio** [1:00:12]
就所以所以其实 core dump 就是内存镜像导出来而已嘛 。

**吴涛** [1:00:16]
对 ， 差不多这个意思 。 没错 ， 然后提到 Magnetic core 不能不提到一个奇人， 就是一个一个华人叫王安 。他是呃 。

**Rio** [1:00:26]
王安不是李安 。

**吴涛** [1:00:27]
对 ， 王安不是李安 ， 现在的王安是现在李安试图输出软文化 ，但那个时候的王安是一个传奇人物 。他是民国一九一几年应该是出生在中出生在中国吧 ， 应该是中国出生的 。他是中国出生的 ， 对 ， 然后他去美国啊 ，somehow someway 成了一个计算机科学家 。

对 ，他对于呃 ， 我们刚才说的呃 ， 磁芯这种东西做出了巨大的贡献 ，他可能有呃 ， 三四十项专利和磁芯相关 。

嗯哼 ， 然后 1956 年的时候 ，IBM 公司用 50 万美元从他手里买了专利 。1956 年的 50 万美元是个什么概念 ？

**Rio** [1:01:11]
大概相当于多少 ， 得算一下 。

**吴涛** [1:01:13]
对 ， 算上通货膨胀的话是一个天文数字 。

**Rio** [1:01:17]
上亿了吧 ， 估计 。

**吴涛** [1:01:18]
对 ， 然后他当时创建了王安电脑 ，在美国出的出的这个呃 ， 出的设备叫做自处理器 ，其实就是个打字机 。

嗯哼 ，但是你可以先预览自己要打的东西 ， 然后再把它打出来 。在别的别人家都还用一个就是有点像计算机一样的显示器 ， 就是单行 ， 然后只能显示单个字母的显示器的时候 ，他已经出了一个带这个应急摄像人应急摄像 CRT 的这么一个版本 。

所以他那个时候是非常非常了不起的一个人。

**Rio** [1:01:56]
哎 ， 那个王氏电脑就是王安嘛 。

**吴涛** [1:01:59]
对啊 ， 就是王嘛 ， 那个蓝蓝底白色的一个王 ， 就是就是王安的王安创立的公司 。

**Rio** [1:02:05]
嗯 ， 这个可能这个在国内有有流行过吗 ？ 好像在 90 年代初的时候好像有见过吧 。

**吴涛** [1:02:11]
那个时候好像是有一个自处理器的 ，但是那个自处理器是王安电脑出的吗 ？

**Rio** [1:02:18]
我我不太 ，但我记得在国内好像我 somehow 在哪里有印象说发现到国内也是有一段时间有进口过这个东西 。

**吴涛** [1:02:28]
那个时候应该是 ， 然后 OK， 那个时候应该是四通吧 ， 四通比较 。

**Rio** [1:02:33]
啊 ， 那个是国产的嘛 ，但是王氏没有进 ， 就有产品进到中国吗 ？ 好像有 。 嗯 ， 这个我不是很确定的 ，有点有点久了 。

**吴涛** [1:02:42]
对 ， 总之大概六七十年代的时候 ， 王安电脑是非常非常了不起的一个公司 ，而且当时他基本上是以一己之力对挑 IBM。

**Rio** [1:02:53]
哈哈 ， 然后后来挂掉了是吧 ？

**吴涛** [1:02:55]
对 ， 很遗憾他没有赶上 personal computer 的大潮 ， 就是他比较他比较居 ，他比较刚愎自用吧 。 呃 ，他觉得个人计算机和就是微型计算机和 Mayfram 相比 ， 简直就是玩笑一样的东西 ， 为什么要花费精力在这种东西上面 ？

但是等到他回过神来的时候已经太晚了 。 对 ， 然后整个帝国就这么垮掉了 。

**Rio** [1:03:21]
还是什么见识见什么不够有远见 。

**吴涛** [1:03:25]
对 ， 如果他能够 。 对 ， 我们就不要继续开脑洞了 。 总之王安这么一个奇人还是感兴趣的话 ，有考古兴趣的话可以去了解一下 。

对 ， 然后选 Portal 另外一个理由也就是他跟他是一个他的主角是个女性嘛 ， 我觉得这一点还挺 。 哈哈哈 ， 对 ， 值得为此 ，因为我也不知道 ， 就在以女性为主角的游戏真的不多啊 ， 你可能除了那些女性向的有就专门做给女生玩的游戏之外， 专门找一个女性来做主角的真的绝无仅有 。《 古墓丽影 》。

嗯哼 ， 对 ，而且 《 古墓丽影 》 是一个非常就是物化了的 ，在最开始的时候 ，《 古墓丽影 》 是一个非常就做出来给男人看的一个一个一个一个一个模型 。

当然最新一代 《 古墓丽影 》 完大不相同了 ，但是 《 古墓丽影 》 最开始的时候就是一个一个细腰长腿大胸的妹子 ， 手里面拿着两把枪 ， 然后出现在 。

**Rio** [1:04:24]
啊 ， 一直在你面前扭啊扭 。

**吴涛** [1:04:26]
对 ， 这出现在大众软件的封面上面 ， 然后让你基本上就是只有男人会去会去看的这个游戏 。

**Rio** [1:04:32]
不是后来有人出了那个裸体版吗 ？

**吴涛** [1:04:35]
对啊 ， 黑历史 。 我们是怎么能接受那个时代 640×480 分辨率下面的裸体呢 ？

**Rio** [1:04:44]
啊 ， 对啊 ， 上次我们还我还跟 Laura 吐槽过 ，他那个就那个时候的 3D 特效嘛 ， 那个会出来的那个肌肉都是一坨一坨一坨有棱角的嘛 。

对 ， 然后你会看到他的那个胸是一个三角 ， 一个一个圆锥体 。

**吴涛** [1:04:59]
哪是圆锥 ， 是一个是一个四角四角锥嘛 。

**Rio** [1:05:04]
反正就是很奇怪的一个一个一个画质 ，但现在就大不相同 。 不不过 Portal 里面的是看不见 ，有一种场合你可以看见 。

**吴涛** [1:05:15]
对 ， 你你在自己身后开个 Portal， 然后 。

**Rio** [1:05:17]
对 ， 你在自己屁股后面开个 Portal， 或者转角的时候能够看见一个侧脸 ，但你肯定是看不见全身的 。

**吴涛** [1:05:22]
就可以端详自己 。 对 ， 然后这个女性也被刻画的非常非常非常 ， 就像整个游戏的这个这个主线 ， 就是非常的呃 alienated， 就是非常不像一个人。

**Rio** [1:05:40]
对 ，他从头到尾都没有一句话 ， 对吧 ？

**吴涛** [1:05:43]
对 ， 这个倒是这这 Portal 的 Portal 其实它是处在那个 Half-Life 的世界里面 ，Half-Life 的就是半条命 。 嗯哼 ， 或者说半衰期 ， 正确翻译方而半衰期的这个 。

嗯哼 ， 主角呃 Gordon Freeman 也是自始至终没有说过一句话的 ， 就是 Valve 有把主角做成这种沉默的主角的传统 。

当然他们可能自己也在取笑这一点 ， 就是在 Portal 2 的有一个地方 ，他会让你说按 A 来来说 I'm OK， 然后你按 A 发现你自己跳出来了 ， 然后然后与和屏幕上的指示完全相反 ， 然后那个人工智能会取笑你说哦啊 ， 你很会跳 ， 我看到了 ， 好吧 ， 好吧 ， 我不会再想试图让你说话 。

哈哈 ， 对 ， 从来没有说过任何说任何事情 。

**Rio** [1:06:37]
嗯 ，而且他跟游戏里面也没有什么特别的交互哈 ， 反正交互都是拿那个那个 Portal 枪去吸起来 。

**吴涛** [1:06:46]
对 ， 反正就还蛮奇怪的 。 嗯 ，但是我觉得这个游戏最大的卖最大的可圈可点之处还是 Glados， 就是可能人在所有的游戏里面最让人印象深刻的 AI 有两个 。

对 ， 这最让人印象深刻的 AI 有两个 ， 一个是而且两个碰巧都是女性 ， 一个是 Halo 里面的 Cortana。 嗯哼 ， 或者是微软 ， 如果你不玩 Halo 的话 ， 微软最新出的那个 Cortana 就是来自于这个游戏里面的 Cortana。

对 ，但那个 Cortana 是有是有是有是有形状的 ，而且就是有形体的 ， 就是你可以看到一个东西 ，但是这个东西只是他呃把自己把自己就你可以理解为他是他的交互界面吧 。

嗯哼 ，但至少是个有形体的东西 。 嗯呃 ，而且这个形体也是被逐渐物化的 ， 就是第一代 Cortana 看起来没有什么性别特征 ， 你只能依稀看出来是个女的 ，但是在最近的最近一部 Halo 里面 ，Cortana 也是被塑造成了一个精细的大胸长腿的那么一个东西 。

**Rio** [1:07:53]
对 ， 还是什么性别歧视还是挺严重的 。

**吴涛** [1:07:57]
没错 ， 然后呃 ，但是 Glados 就完全不一样了 ，Glados 是一个就是一个机器 ，他只不过有一个女女人的声音而已 ，但是他的 personality 是啊 。

**Rio** [1:08:07]
中性的吧 ？

**吴涛** [1:08:08]
不 ，他的 personality 是就是他的性格 ，他最开始其实是由那个 Apture Science 的老板手下的一个叫做叫 Caroline 的的助手 ，他把他的性格特征注进入到了注入到了 Glados 里面 ， 然后 Portal 2 里面我记得有一地方 ，他主动把这一段呃回忆给删掉了 ， 就是他他抛弃了作为那个曾经的人的回忆 。

嗯哼 ， 对 。 啊 ， 哎呀 ， 关于 Portal 好像说的有点多了 ，但是总之我我对这个游戏有非常深的感情在里面 ， 所以也决定呃把它作为我们节目的主题曲 ， 然后呃我们已经看过了这个曲子的作者把它以嗯呃创作公众授权发布了出来 ， 就是呃这首曲子的作者叫做 Jonathan Coulton， 然后他的协议他的授权是 CC by 呃 NC， 就是你必须用在在用到这首歌的时候必须提

到这个歌是谁写的 ， 然后你不能把它用作商用 。 嗯哼 ， 嗯 ， 我们应该不会把它用作商用 。

**Rio** [1:09:27]
但我们这个又不拿它卖来卖也无所谓 。

**吴涛** [1:09:30]
对 ， 我们没有卖我们的节目啊 ， 然后我们也在可以预见的将来不会有不会通过做 Podcast 有什么足够多的收入 。

所以对啊 。

**Rio** [1:09:42]
不 ， 你只要不是用它来牟利都可以了 ， 就是你做个什么小插曲 ，而且就算用了用了是短时间 30 秒的 ，也有那个就哪怕是版权作品你也是可以也是法律 。

**吴涛** [1:09:51]
Fair use 是吗 ？

**Rio** [1:09:52]
对 ，fair use 可以 。

**吴涛** [1:09:55]
Anyway， 总之在 license 方面应该是没有什么问题 ， 我们还是考虑到这一点 。

**Rio** [1:09:59]
OK， 所以从这一期开始 ， 我们就有一个这个主题曲了 ， 大家就不用一一开场就觉得哎什么谁 。

**吴涛** [1:10:07]
对 ，what，不会定期听到我的 what。

**Rio** [1:10:12]
对 ， 哈哈哈 ， 好 ， 我们终于开始讲这一期的正题了 。

### 内存管理

**吴涛** [1:10:17]
对 ，其实我们本来是想把这个正题慢慢过渡过来的 ， 就是刚才提到了 Core Dump， 提到了呃人工智能 ， 然后我们想要讲的其实就是那种 generally 的一个比较 general 的 form， 就是生命周期管理吧 。

嗯哼 ， 对 ， 比如说你说 Portal 为什么要运为什么要让他为什么要反复提到呃 science， 或者说为什么要反复提到 test，其实我觉得他多少有一点就是在在嘲弄 ， 或者说在呃套用软件工程里面不停的做测试这样一个这样一个场景 。

**Rio** [1:11:02]
QA 的 ， 对 ，quality assurance， 没没没没事就在那里测 。

**吴涛** [1:11:08]
对 ， 嗯 ， 然后你可以理解为他的测试是为了验证武器 ， 或者是为了验证这个 Portal gun 能 ， 或者说验证用户在用 Portal gun 的时候能够想到什么事情 ， 或者是做出什么样的行为来 。

嗯哼 ，以此推进科学的发展 ， 或者说推进 Portal gun 的完善 。 嗯哼 ， 对 ，但然后这个其实就是生命周期管理的一部分 ，但是我们可能不会 ， 我们暂且先不从这么大的角度来说吧 ， 就只是先从嗯比较小的切入点来着眼 。

嗯哼 ， 对 ， 比如说嗯 Portal 是个游戏 ， 对吧 ？

**Rio** [1:11:52]
对 。

**吴涛** [1:11:52]
那但凡游戏都需要跑 ，但凡游戏就和所有程序一样 ， 都需要跑在计算机上， 然后跑在计算机上的时候 ， 具体当我们说一个游戏有一个程序在运行的时候 ， 我们所指的到底是什么状态呢 ？

嗯哼 ，其实就是啊 ， 我们可以说一个程序在运行的时候 ， 它活在内存里面 ， 可以这么说吗 ？

**Rio** [1:12:17]
可以吧 ， 我觉得 。

**吴涛** [1:12:18]
当一个程序活在内存里面的时候 ， 我们就说它正在被运行 ， 就是一个程序和一个进程的具体差异是什么 ？

那程序一个进程就是说一个活着的程序 ， 那么程序活着的具体意义是什么 ？ 就是它在内存里面并且正在被执行 ， 或者它正在没有被执行 ，但它活在内存里面 。

嗯哼 ， 对吧 ？

**Rio** [1:12:40]
OK， 所以要面临的一个最就日常我们面临的最常见的一个问题是什么 ？ 就是内存的空间有限嘛 。

**吴涛** [1:12:49]
对啊 ， 就是内存不够怎么办呀 ？

**Rio** [1:12:51]
对啊 ， 怎么办 ？ 就这个现在可能还好一点啊 ， 早期的时候特别明显 ， 就现在内存动辄就是什么 4 个 G、8 个 G， 我电脑是 16 个 G 的那种 。

对啊 ， 那早期可能大概就多少 ？512 兆 、128 兆的时候 。

**吴涛** [1:13:05]
经常被错误的呃 attribute 到 Bear Gus 身上的名言是什么 ？ 呃任何电脑 640K 的内存就足够了是吧 ？

**Rio** [1:13:17]
其实不是他说的 ， 对吧 ？ 他没有说 。

**吴涛** [1:13:19]
其实不是他说的 ，而且而且到底是谁说的 ， 好像也没有人找出来 。

**Rio** [1:13:23]
嗯 ， 反正就是反正他就被黑了嘛 。

**吴涛** [1:13:27]
对 ， 反正大家都喜欢黑他 ， 跟他脱不了关系了 。 嗯 ， 嗯 ， 为什么 640K 的内存就够用 ？

**Rio** [1:13:37]
他那个那个时候吧 ， 九九几年吧 ，90 年代初 ， 那确实啊 ， 你想想那个时候多少一个磁盘 ，不叫磁盘 ， 软盘吧 ， 才多少 ？

才 720K 标准的 ， 后来再翻翻成 141.44 兆嘛 ， 就是 。

**吴涛** [1:13:51]
那年高所谓高密高密高 。

**Rio** [1:13:54]
High density。

**吴涛** [1:13:55]
对 ，1.44 兆 。

**Rio** [1:13:56]
然后你有一个就你想象一下那个时候就你就想象今天一样 ， 你的那你的比如说你的那个笔记本的硬盘是一个 T 的大小 ， 然后你有一个 T 的内存 ， 你当然觉得足够了 。

嗯 ， 对 ，但是现在后来发现哎 ，不对啊 ， 好像不是这样的 。

**吴涛** [1:14:13]
对 ， 就是随着一个程序所需要完成的任务的复杂逐渐变得复杂 ， 它嗯它所需要的内存也就是几何级数的速度增长 ， 所以呃内存不够怎么办 ？

就变成了一个非常切实的问题 。

**Rio** [1:14:31]
嗯哼 ， 所以在一个新啊 ， 这个要考古的话 ， 从那个时候最开始最开始的操作系统是一个就是什么单线单进程的东西啊 。

**吴涛** [1:14:41]
对 ， 最开始的操作系统其实不是个操作系统 ， 它它或者说它没有任何特殊之处 ， 它只不过就是开机这个程序被自动运行 ， 然后你可以用这个自动用这个程序去找到你想要运行的那个程序 ， 然后运行那个程序 。在这个过程之中， 你最开始运行的那个程序就就退出去了 ， 就不再存在电脑里面了 ， 然后你接下来运行的这个程序 ， 它独占整个电脑

， 它就是它认为我是活在这个电脑上的唯一程序 。 嗯哼 ，而且其实即到即便到今天 ， 这一点多多少少还是成立的 ， 就是每一个程序都多少认为自己拥有整台计算机 。

**Rio** [1:15:20]
嗯 ，其实这是是一个假设 。

**吴涛** [1:15:22]
对 ，其实只不过是操作系统或者是呃 CPU 给它制造出来的一个幻境 ， 让它活在自己的世界里 。其实对 ，在物理意义上 ，在实体意义上讲 ， 它正在和别人共同享用同一块内存 。

**Rio** [1:15:37]
对啊 ， 这个可能早期用过 DOS 的用户还有这个印象啊 ， 你开开了 DOS， 开个命令行进了一个程序 ， 然后你要干点别的事 ， 你还得从那退出来 ， 先保存 ， 然后退出再启动另外一个程序 ， 然后做完那个事 ， 保存退出再再回到之前 。

然后后来是在是 Windows 32 吧 ， 还是 95 的时候出现了这个所谓多任务的这个概念吗 ？

**吴涛** [1:16:01]
Windows 32 有多任务吗 ？

**Rio** [1:16:02]
我不太清楚哎 ， 等一下 ，其实我好像没有用过 Windows 3。

**吴涛** [1:16:08]
Windows 3.3.2 是专门为中国市场做的 ，其实就 Windows 3.2 其实是一个汉化版 ， 就 Windows 3.1 的汉化版 。

**Rio** [1:16:15]
OK， 对 ， 对 ， 所以嗯 。

**吴涛** [1:16:18]
那 3.1 有多任务我们好像没有吧 ？ 我不我不并不确切的记得自己曾经在 Windows 3.1 的时代按过 Alt+Tab， 这个 Alt+Tab 这个组合 。

**Rio** [1:16:29]
切换任务是吧 ？

**吴涛** [1:16:30]
对 ， 应该是没有吧 。

**Rio** [1:16:33]
嗯 ，但但至少这个很确定是 Windows 95 肯定是一个多任务的系统 。

**吴涛** [1:16:37]
对 ，Windows 95 对 ， 我还记得我最晚是在研究生时代还教过一个神 ， 呃用 Alt+Tab 可以切换到其他程序里面去 ，他大为惊讶 ， 你知道吗 ？

哈哈哈 ，他说原来原来 。

**Rio** [1:16:52]
还可以这么玩 。

**吴涛** [1:16:53]
原来我切换到就是原来这样按一下， 原来就是我刚才在做的事情还在继续被做啊 ， 就哈哈哈 。

**Rio** [1:17:03]
但但其实这里也是看你看 ， 就除了这个程序的认知上有一个过渡 ， 就是我们作为用户的认知上其实也是需要一个过渡的 。

本来想一个机器只能干一件事情 ， 对吧 ？ 然后突然哎 ， 能够同时干几件事情 ， 还是蛮奇怪的一个一个认知上的变化 。

**吴涛** [1:17:20]
对 ，但但回到游戏上面 ， 就是其实在 DOS 时代已经有很多游戏可以 ， 比如说或者说游戏给你观感 ， 就是你可以一边放音乐 ， 一就是有至少游戏的背景音乐在播放 ， 然后你啊还可以操纵里面的人在在走路 ， 然后呃好像也没有那么的让人。

**Rio** [1:17:42]
但是但起码就说才在这个就是就是对这个东西的认识上 ，他还是说他在玩这个游戏 ，他不能在玩这个游戏的时候同时去啊就处理一个什么文字啊 ， 编辑一个文本之类的 。

**吴涛** [1:17:54]
对 ， 虽然那个时代也有什么常驻内存的工具 ， 比如说有些游戏游戏修改工具会会自己缩在内存一角 ， 然后让你去漏了一个 。

**Rio** [1:18:04]
然后按一个什么快捷键 。

**吴涛** [1:18:06]
然后按一个热键 ， 整个游戏就就就就就冻冻结在那里了 ， 然后这个时候你可以用这个小工具来修改内存 ， 然后等你改好了之后再重新继续游戏 ，其实就是一个 debugger 嘛 。

**Rio** [1:18:18]
对对对 。

**吴涛** [1:18:19]
对 ， 然后你重新继续游戏 ， 发现哎 ， 自己忽然有了几万块钱 。

**Rio** [1:18:23]
哈哈哈 ，有了什么啊 ， 金蟾蜍 。

**吴涛** [1:18:27]
对 ， 哎呦 ， 这些游戏那个时候如此熟悉 ， 怎么现在好像不 ， 这些工具那个时候那么那么耳熟能详 ， 现在好像一个都想不起来了 ， 我只只想起一个 ， 只只能想起个 PC tools， 哎呀 ， 我也想不起来了 。

**Rio** [1:18:43]
Anyway， 回回头再去考古吧 。

**吴涛** [1:18:45]
好呀 。

**Rio** [1:18:46]
嗯 ， 然后就 Windows， 就起码我们能够确切的知道是 Windows 95 开始搭载一个这个什么多任务的系统 ，不过它那个多任务和我们现在多任务还是在在机制上还是有很大不一样的 。

它是一个所谓的呃叫做 。

**吴涛** [1:19:00]
非常认识 。

**Rio** [1:19:01]
协作式多任务吧 。

**吴涛** [1:19:02]
对 ， 就是简单来说就是你是一个程序 ， 我是一个程序 ， 然后我们两个必须比较有默契 ， 一定要说你方长吧 ， 我登场 ， 然后呃我先用用到我觉得可以不用的时候 ， 我要主动放弃对机器的控制权 ， 交给要交给交给别人。

**Rio** [1:19:21]
对 ， 呃这个就有点跟其实做个类比的话 ， 跟现在哪个事情比较像 ， 像现在跟那个做 。

**吴涛** [1:19:29]
我觉得像唱 K 一样吧 ， 就你你 。

**Rio** [1:19:32]
哈哈哈 ，My Bar。

**吴涛** [1:19:34]
对 ， 你你要你要做 My Bar 的话 ，My Bar 这种东西招人讨厌 ， 就是因为没有一个更强大的那个一个一个裁判机制 ， 站在那说你唱够了 ， 你把 Mic 给我 ， 我把它给别人。

嗯哼 ， 对 ， 当时 Windows 95 就有点像一群一群一群呃程序在唱 K。 对啊 ， 你你唱一会 ， 我唱一会 ， 我们要轮流换 ， 对吧 ？

但如果有一个人霸着 My Bar 不放的话 ， 那有可能就用户就说哎呀 ， 怎么又没有响应了 。

**Rio** [1:20:03]
系统资源独占了他就 。

**吴涛** [1:20:05]
对啊 ， 怎么这么卡呀 ， 重启一下吧 ， 然后对 ， 大家都没歌唱 。

**Rio** [1:20:10]
对 ， 呃协作式多任务其实在现在我们日常的这个编程的过程中， 还有一个比较相关的一个东西啊 ， 就是比如说在那个 Node 里面 ， 你要因为 Node 是一个单进程的东西嘛 ， 然后你要做一些稍微复杂一点的 ， 或者是需要等待的操作 ， 比如说你要做 IO 的时候 ， 你得用一个所谓的这个回调嘛 ，callback。其实那个时候就是一个所谓的这个协作式多任务的一个体现 ， 就说哎

， 我现在能我之前能做的那些什么加点存储的计算都做完了 ， 现在我要做一个可能我不能马上执行的东西 ，因为要等那个 IO 返回嘛 ， 啊 ， 我先把这个所谓这个控制权让出来 ， 然后我先给你一个回调函数 ， 等这个东就告诉告诉这个调度器说 ， 等这个呃我要的这个 IO 结果回来之后， 你再接再唤醒我接着执行这个回调程序 ， 那现在开始我

就把这个控制权让出去了 。 这个就是一个协作多任务的一个体现 。

**吴涛** [1:21:00]
对 。

**Rio** [1:21:01]
嗯 ， 然后在 Windows 95 的时代 ， 就所有的程序你要进行这个系统资源的共享的话 ， 你真是要做类似的事情 。

**吴涛** [1:21:10]
但是那个时候其实当我们说到 Windows 95 的时候 ， 内存已经不是什么太大问题了 。在 Windows 95 之前的很长一段时间里面 ， 怎样优化使用有限的内存简直是每一个程序员的必修课 。

**Rio** [1:21:26]
我觉得 Windows 95 的时代也是 ， 就起码到到现在都是啊 ， 我觉得 。

**吴涛** [1:21:30]
现在其实还是有很多 ， 就是有些程序员可以一辈子不碰 ， 或者是在你的从业过程之中， 可能呃你可以一两年不去碰任何和内存管理有关的话题啊 。

**Rio** [1:21:44]
哎 ， 比如 。

**吴涛** [1:21:45]
但那那个时候是做不到的 。

**Rio** [1:21:47]
对 ， 就现在的话 ， 你只要用一个所谓的 management language， 就是管理过的语言 ， 比如说 C#，不用那个什么指针 ， 那个叫不安全指针叫什么 。

**吴涛** [1:21:58]
啊 ， 对 ，unsafe。

**Rio** [1:21:59]
Unsafe pointer， 对吧 ？ 然后你说你是用这个 Java，Java 用 JVM 上面跑 ， 或者像什么刚才讲 Node 啊 ， 还有像很多这种脚本语言 ，Python 都是 ， 就你都不需要去手工的直接去管理分配内存 ， 这些都是啊 ， 这个这个系统或者这个运行时帮你解决了 ， 然后甚至像你都是你呃这不用手工管理 ， 包括你不用去申请 ， 你不用去分配 ， 然后你也不用去担心这个这个叫什么啊 ， 返

回的不叫返回释放的问题 。

**吴涛** [1:22:27]
对 。

**Rio** [1:22:27]
但是如果你像在啊 ， 还是有用 C 类的语言 ， 比如说像你用 C++， 或者是现在大家还在写的 RBMC， 你还是要在很多程度上是要手工管理内存的 。

所以现在有人会 。

**吴涛** [1:22:39]
你必须去考虑这件事情 ， 至少你必须 ， 就算你不去亲亲自去做这件事情 ， 至少去考虑这件事情 。

**Rio** [1:22:44]
对 ， 哎 ，Swift 还是需要手动管理内存吗 ？

**吴涛** [1:22:47]
Swift 不需要 。

**Rio** [1:22:48]
OK， 它是一个就是 management language。

**吴涛** [1:22:51]
它是有 GC。

**Rio** [1:22:52]
所以在手工管理内存的时候需要做一些什么事情 ？

**吴涛** [1:22:56]
就是我记得那个时代看过一些手动管理内存的书 ， 会提到比如说这个你一个程序 ， 比如说你只有呃一兆内存可用 ， 嗯 ， 然后你需要调用一堆函数 ， 呃这些所有这些函数加在一起可能有两兆 。

嗯哼 ， 呃那怎么办呢 ？ 呃你可以把你可以你这个时候就需要你精心去规划函数的分布 ， 你要把一些函数打包包在一个正好是比如说 500K 的这么一个呃就是动态所谓动态库里面吧 ， 然后你运行 ， 比如说你在写一个游戏 ， 然后这个游戏里面跑这个关卡的时候 ， 关卡啊 ， 这个我说对了 ， 哈哈 ， 跑这个关卡的时候你又需要用到这些函数 ， 那你就在这个

时候把这 512K 的呃库调入内存 ， 然后去调用这些函数 ， 然后等到你打完这个关卡之后， 这些函数不需要了 ， 然后你再把另外一个函数另外一个库调进来 ， 然后就就等于你手工要去在你的程序里面实现一个内存管理器 ， 嗯哼 ， 实现一个动态加载器 ， 嗯哼 ， 诸如此类的 ， 诸如此类的细节 。

那个时候我觉得我靠这些都是黑魔法 ， 实在是现在可能也多少觉得有点黑魔法 ，因为我其实个人来讲从来没有做过任何内存优化方面的东西 ， 就就我就已经长大了 ， 就已经 。

**Rio** [1:24:23]
就已经直接进入 GC 时代 。

**吴涛** [1:24:24]
就已经幸运的进进入了这个呃 garbage collection 无处不在的时代 。

**Rio** [1:24:28]
对对 。

**吴涛** [1:24:28]
而我相信现在有很多程序员可能从入门到尤尤其是如果你不是学呃计算机科班出身的话 ， 你可能完全有机会 ， 就是完全没有接触过什么是内存管理 。

**Rio** [1:24:43]
比如说我就是啊 ， 我我我本科读的不是这个 CS 吗 ？ 就是其实我等我接触这些东西的时候 ， 那些都只存停留在课本上的概念啊 ， 就是我知道怎么一回事 ， 原理怎么 ，但是我自己其实没有亲身去操作过那个那个东西啊 。

**吴涛** [1:24:58]
这是变相的秀年轻吧 。

**Rio** [1:25:01]
不 ， 这个是这是变相秀这个事情底气不足 ，不能多说 。

**吴涛** [1:25:06]
呃 ， 好吧 ， 那咱俩其实都比较底气不足 ，因为 。

**Rio** [1:25:09]
混蛋 ， 你是科班出身 ， 怎么能够说你底气不足 ？

**吴涛** [1:25:13]
哈哈 ， 可我也没有写过一个一个 ， 好吧 ， 我还是做过一点 ，但正儿八经的在工作或者在在在实践之中， 利用内存管理的知识解决一个实际的问题 ， 可能绝无仅有吧 。

**Rio** [1:25:27]
但你之前写这个 iOS 的时候不需要用这个吗 ？ 不需要手工管理内存吗 ？

**吴涛** [1:25:31]
嗯 ，iOS 的所谓管理内存 ， 你只是需要操心不要泄露内存而已 ， 根本不需要你动手使用 。

**Rio** [1:25:39]
对 ， 就 iOS 已经是一个非常非常先进的这个 ， 或者说呃 object C Coco 这个运行时已经是非常非常先进的一套东西了 。

嗯哼 ， 你不需要去考虑自己的呃 object 在内存里面是怎么样对齐的 ， 或者是啊 ， 怎样就很多 C 时代 。

**吴涛** [1:26:02]
什么 ？

**Rio** [1:26:02]
跟这个 struct align 那种东西是吧 ？

**吴涛** [1:26:06]
对 ， 这些东西什么 padding 啊 ， 什么什么 ， 乃至啊 ，C 里面还有一种黑魔法是使用 union 类型来节省存储空间 。

**Rio** [1:26:17]
这个我记得之前以前学 C 看老谭的书的时候 ， 还记得还要还还挺对 ， 这块还挺觉得挺新奇的 。

**吴涛** [1:26:24]
对 ， 那个时候真的是为了省一两个 byte， 可以绞尽脑汁想好走 。

**Rio** [1:26:29]
哈哈哈 ， 那个什么真正的 premature optimization。

**吴涛** [1:26:34]
这个已经不是我也不知道 ， 可那个那个时代你如果不能精细的去使用内存的话 ， 那就没有什么多的内存可以给你用了 。

**Rio** [1:26:45]
那个时候平常就会直接 OOM 了 。

**吴涛** [1:26:48]
对啊 ，也没有虚拟内存这种东西 ， 对吧 ？ 嗯 ，也没有 ，也没有一个运行时或者是没有操作系统来替你去去操心这些事情 ， 你只能一切动手 ， 一切一切都自己动手 。

**Rio** [1:27:00]
对 ，其实现在的话 ， 很多做这个嵌入式开发的朋友 ，他还是要做很多这种刚才我们讲的那种工作啊 ， 就是要考虑 ，因为嵌入式这种嵌入式这种的跑的那个硬件的水平都非常按今天的标准来看都是非常糟糕的 。

**吴涛** [1:27:14]
对 。

**Rio** [1:27:14]
上次我在看说那个什么 ， 现在不是要流行一个什么互呃 Internet of Things 吗 ？ 物联网的这个时代 ，有很多那种所谓传感器啊 ， 各种小芯片什么的 ， 我上次看 ARM 出了一个什么一个很常用的一个芯片 ， 只有 2KB 的内存 。

**吴涛** [1:27:29]
呃 what？

**Rio** [1:27:31]
就是那种很小的一个传感器的一种那种那种跑的芯片 ， 只有 2KB 的内存 ， 我想哇 ， 这怎么用 ？

**吴涛** [1:27:38]
哈哈哈 ，而且 2KB 不仅要装那个 ，不仅要装数据 ， 还要装程序本身哦 。

**Rio** [1:27:45]
不 ，他那个程序是放在 ROM 里面的 ， 就是啊 ，2KB 只是用来运行 。

**吴涛** [1:27:49]
对 ， 只是运行用 ，但是你想想 2KB 哦 。

**Rio** [1:27:53]
嗯 ，但我觉得可能嵌入式开发还还有一个呃有一个不那么让它更复杂的东西 ， 就是它很少会涉及到从一个更大的存储器上调用数据到内存里面的这样一个动作 。

**吴涛** [1:28:09]
啊 ， 它是直接是 。

**Rio** [1:28:11]
对 ， 你一开始在你在写的时候就知道整个 CPU 的这个 ， 或者整个 ROM 的呃整个存储器的分布会是怎么样的 ， 你有多少东西可以用 ， 然后里面可能有一个小小的 boot loader， 然后其他所有的空间都是你的 ， 然后你只要往里面 。

**吴涛** [1:28:26]
对对 ，而且它而且它是一个绝对的单任务的系统 ， 就没有人和你抢占抢抢资源什么的 。

**Rio** [1:28:33]
对 。

**吴涛** [1:28:34]
就整个芯整个芯片都是你的 。

**Rio** [1:28:37]
对 ， 规划方面的问头呃头疼的问题可能还少一些 ，但是早期的计算 ， 早期的 PCC 编程真的是相当复杂的 。

**吴涛** [1:28:47]
这个时候应该说那句话叫这个芯片我已经为你预留了 。

**Rio** [1:28:52]
哈哈哈 ， 这个芯片我已经给你承包了 。

**吴涛** [1:28:55]
哈哈哈 ，anyway 啊 ，但是呃到我们现在的一些主流的一些开发的话 ，其实这块就是如你所说 ，其实是没有什么概念了 ， 甚至说连这个内存本身的这个物理的尺寸都已经被抽象掉了 ， 就是因为有这个虚拟内存这个东西 。

**Rio** [1:29:14]
对 。

**吴涛** [1:29:15]
啊 ， 操作系统给程序展现的是一个所谓一个连续的庞大的这个内存 ， 那个那个内存的地址空间 ，但是其实操作系统的在内存实际分配的时候 ，并不是说真的有无限大的一块内存给一个程序使用的 ， 对吧 ？

**Rio** [1:29:32]
对 ， 这个我觉得这个这个问题可以从程序员的角度 ， 就是从一个操作系统使用者的角度来看 ， 就是它简化了编程模型 ， 就是如如果没有虚拟内存的话 ， 你将不得不面对我的程序应该放在哪这个问题 。

**吴涛** [1:29:49]
对 。

**Rio** [1:29:50]
就是我在我的程序在运行时呃处于内存的什么地方 ， 难道是一件要我自己来操心的事情吗 ？

**吴涛** [1:30:00]
对 。

**Rio** [1:30:00]
对 ， 如果没有虚拟内存的话 ， 你将不得不面临这个问题 ， 就像早期呃的就重新回到了单机程序的这么一个一个一个状态里面 。

**吴涛** [1:30:12]
嗯哼 。

**Rio** [1:30:13]
就我要和其他的程序共存吗 ？ 因为就像我刚才说的这个修改内存的小工具一样 ， 它显然是要考虑自己要把自己放在什么地方的 ， 然后它必须跟另外一个程序共同享用实体内存 ，但是虚拟内存的出现就解决这个问题 。

就是简单来说 ， 一个程序如果它是 32 位的 ， 那它会认为自己有将近 4G 的呃内存空间 。

**吴涛** [1:30:38]
嗯哼 。

**Rio** [1:30:39]
呃就是从呃 0x0000 00008 8 个 0 吧 。

**吴涛** [1:30:45]
它是只有 2GB 吧 ？ 没有 32 位的就不能到 4GB 的空间 。

**Rio** [1:30:50]
哇 ，32 位不是 4GB。

**吴涛** [1:30:52]
但但是好像我记得是在就操作系统会预留到预留到一部分 ， 好像 。

**Rio** [1:30:58]
对对对 ， 操作系统应该会占用到操作系统会占用一部分地址空间 。

**吴涛** [1:31:02]
对 ，但肯定是不到 4G 的能够实际使用的这个地址空间 。

**Rio** [1:31:06]
对 。

**吴涛** [1:31:07]
因为它不是从 00 开始嘛 ， 所以肯定是到不到那个 4G 的 。

**Rio** [1:31:10]
对 ， 嗯 ， 就大概有 3GB 的空间是可以用的吧 ？

**吴涛** [1:31:15]
对对对 。

**Rio** [1:31:16]
然后呃嗯 ， 我记得 Windows 上面的呃默认空间好像有只有两只有 2GB 左右 ， 就是因为那个时候我记得 Windows 启动有一个 Windows 有一个启动参数 ， 就是就是你还记得 boot.ni 这个东西吗 ？

我不知道 。

**吴涛** [1:31:39]
好古老 。

**Rio** [1:31:40]
又暴露年龄了 ， 就是在 boot.ni 里面 ， 你可以给 Windows 的启动加上一个 /3g 这个这个选项 。

**吴涛** [1:31:47]
OK。

**Rio** [1:31:48]
而且这是 XP 都有的一个参数 ， 就是你加了这个参数之后， 呃操作系统的那个虚拟地址空间会会才会减少到 1G， 应该是 ， 然后在这种情况下， 程序才有将近 3G 的空间可以用 。

**吴涛** [1:32:07]
对 ， 就哪怕是现在 ， 如果我没记错的话 ， 现在的就是这个比较现代 ， 我没用过 Windows 8 了哈 ， 就之前的那个 Windows 的机器 ， 如果它是 32 位的版本的话 ， 你插上超过 4G 的内存 ， 它实际可以使用的也只有 3GB 嘛 。

**Rio** [1:32:22]
对 。

**吴涛** [1:32:22]
我记得好像是这样子 ， 对 。

啊 ，不过后来有个什么扩展 ，有个什么用 48 位的地址来来扩展一下， 然后也可以用到很多就超过 4GB 的内存 ，但这个这个跟今天这个话题没什么关系 。

**Rio** [1:32:39]
对 。

**吴涛** [1:32:40]
嗯 。

**Rio** [1:32:41]
对 ， 就是可以这么说吧 ， 就是呃 386 这个系列的 ， 就是我们今天所使用的 32 位 ， 或者说我们曾经在过去很长一段时间里面所使用的 32 位的这个 CPU， 就是其实和最古老的 8086 呃系列是基本可以说是一直兼容的 ，但是为了保持这种兼容性 ，也不得不付出很多代价 。

**吴涛** [1:33:08]
嗯哼 。

**Rio** [1:33:08]
其中之一就是在比如说后面的寻址模式上面啊 ， 或者是呃很多其他地方都有不得不做出了很多妥协 ， 然后刚才所说的这个寻址其实也是这个妥协的呃一种一种一种形式吧 。

然后嗯 ， 英特尔在推出 64 位处理器的时候 ， 想要曾经想要一劳永逸的解决这个问题 ，但是呃 。

**吴涛** [1:33:36]
那个叫做安啊 ， 叫什么安藤是吧 ？

**Rio** [1:33:39]
对 ， 安藤处理器想要解决这个问题 ，但是为此要付出一个就是打破这个向后兼容性的这么一个代价 ， 所以它最终可耻的失败 。

**吴涛** [1:33:53]
对 。

**Rio** [1:33:54]
假如听众不还不还不太清楚这件事情的话 ， 就是我们现在用的所谓 64 位处理器 ，其实并不是真正意义上的 64 位 ， 它只是呃由 AMD 来做出了一个

伪 64 位系统 。

**吴涛** [1:34:10]
对 ， 它是一个兼容模式 。

**Rio** [1:34:12]
对 ， 它扩展了我们之前使用的 32 位的 CPU， 然后让嗯它可以处理 ， 就是怎么说呢 ， 呃简单来说就是 AMD 64 位的 CPU 可以运行 32 位操作的应用程序 ，但是安藤的也是一个纯粹的 64 位的处理器 ，其实是不行的 。

**吴涛** [1:34:34]
对 ， 这会导致它就有一个什么鸡和蛋的问题 ， 说哎 ， 你有这个 64 位的机器了 ， 可是我没有 64 位的程序要跑啊 ， 那我要你那个 64 位机器来干什么 ？

于是它的那个那个产品线就挂掉了 。

**Rio** [1:34:48]
对 ， 这就是为什么各位还在用 Windows 的朋友们 ， 呃你们的 Program Files 下面会有两个呃文件夹 ， 一个叫做 Program Files， 一个叫做 Program Files x64 还是 x32？

**吴涛** [1:35:01]
x86 吧 。

**Rio** [1:35:03]
啊 ，x86， 对 。

**吴涛** [1:35:04]
对 。

**Rio** [1:35:05]
IA32 x86。

**吴涛** [1:35:07]
对 ， 嗯 ， 就是这样子的 。

**Rio** [1:35:09]
对 ，其中一份 ，其中一个里面装着 32 位的呃程序应用程序 ， 另外一个装着纯 64 位的应用程序 。

**吴涛** [1:35:18]
等一下， 这个在 32 位版的 Windows 上面也有这个区别吗 ？ 我不太清楚啊 。

**Rio** [1:35:22]
在 32 位版的 Windows 上面不会有呃 Program Files， 啊不 ，不会有 Program Files x64，因为呃 x86。

**吴涛** [1:35:33]
对 ， 就只有一个 Program Files。

**Rio** [1:35:34]
因为它默认就只有 x86。

**吴涛** [1:35:36]
对对对 ， 就只有那个 Program Files。

**Rio** [1:35:37]
嗯 ， 对 。

**吴涛** [1:35:39]
呃刚才讲到这个虚拟内存的一个最主要的用途 ， 就是让编程的模型简化嘛 ， 就是不用去考虑说你的这个东西在哪 ， 然后这个剩下的这个调度的问题是交给内核来来操作系统来做的嘛 。

**Rio** [1:35:54]
对 。

### 存储层级

**吴涛** [1:35:54]
啊 ， 这里就有一个概念叫做 Memory Hierarchy， 就是内存的存储器的等级 。

**Rio** [1:36:02]
嗯哼 。

**吴涛** [1:36:03]
叫叫等级 ， 就叫等级吧 ，hierarchy。

**Rio** [1:36:05]
嗯 ， 内存层级 。

**吴涛** [1:36:07]
对 ， 就其实我们知道在呃这个计算机里面 ， 内存其实也不是一个非常高级别的 ，也不叫高级 ， 就怎么说最快的一个存储设备吧 ， 最快的存储设备其实是在 CPU 里面叫做寄存器的东西 ，Register， 然后它访问大概是多少一个速度 ，在现代的一个

CPU 上， 访问寄存器应该就是等等 ， 这个有点有点迷糊了 。

**Rio** [1:36:37]
0.5 ns 还是 ？

**吴涛** [1:36:39]
那个是 L1。

**Rio** [1:36:41]
啊 ， 访问寄存器的速度 。

**吴涛** [1:36:43]
对对 ， 访问寄存器的速度是多少的一个量级 ？

**Rio** [1:36:45]
访问寄存器需要时间吗 ？

**吴涛** [1:36:47]
呃 ，但肯定是在物理上是需要时间的嘛 ， 它要等那个电路反应 ，但是是一个非常非常快速的时间 。

**Rio** [1:36:56]
对 。

**吴涛** [1:36:56]
对 ， 这个 。

**Rio** [1:36:57]
可能只需要几个

几个时钟 ， 几个几个 cycle。

**吴涛** [1:37:02]
不用 cycle 吧 ， 一个 cycle 就能读到应该 。

**Rio** [1:37:04]
一个 cycle 就可以读一个 register 吗 ？

**吴涛** [1:37:06]
这个我不是很确定 。

**Rio** [1:37:08]
啊 ， 需要去回去做功课了 。 我们暴露出了两个人底气不足的状况 ， 就是没有做足功课啊 。

**吴涛** [1:37:18]
毕竟不是毕竟是已经很多年了是吧 ？

**Rio** [1:37:21]
我们没有想到 ， 我们没有想到会讲这么底层 。

**吴涛** [1:37:23]
OK， 没有 ， 这个就随便顺便提一下吧 。 然后然后在 CPU 内部还有一个叫做 L1， 就是 Layer 1 吧 ，Level 1。

**Rio** [1:37:33]
Level 1 cache。

**吴涛** [1:37:33]
Level 1 cache 的这么一个就是所谓一级缓存这么一个概念 ， 一级缓存在现代意义上我们是有一个比相对好的度量的 ， 就是大概是 0.5 ns。

**Rio** [1:37:45]
对 ，nanosecond，nano 一一纳秒是 。

**吴涛** [1:37:49]
对 。

**Rio** [1:37:49]
多少 ？

**吴涛** [1:37:51]
10 的就一秒等于 10 的 9 次方个纳秒 ， 然后你访问一个呃一级缓存的话是半个纳秒的时间 。

**Rio** [1:38:00]
对 。

**吴涛** [1:38:00]
嗯 ， 然后当然如果有一级缓存 ， 那么自然而然也会有所谓的这个二级缓存 ， 二级缓存在现代 CPU 上通常也是在这个 CPU 芯片上的 ，但只是离那个所谓的计算的那一步步那个元器件的距离要远一点 ， 然后它的容量也会稍微大一点 ， 一级缓存通常也就是一两啊几多少多少 K 吧 ，32 K、64 K 的 。

**Rio** [1:38:28]
若干 K。

**吴涛** [1:38:29]
对 ， 然后 L2 要大大一点 ， 大一大大一点点 。

**Rio** [1:38:34]
就 。

**吴涛** [1:38:34]
而且 L2 K 呃 L2 缓存的大小往往决定了 CPU 的售价 。 其实 L1 也是啊 ，L1 就越大的 L1 的价格一般越贵嘛 ， 这个是肯定是相关的 ，因为确实啊做那个的成本很高 ， 哈哈啊 ，但是 L1 的话也通常也是 KB 级别吧 ， 就有时候大一点的服务器的处理器回到一一两兆应该是没有问题的 ， 就每个 core 的 L2 的缓存 ， 嗯 ，但是它的读取的时间就会要高一个数量级的 ，

然后比如说它会在可能几个纳秒的左右 ， 比如这里我们有一个数据号是给的 ， 这里是给的是 7 个啊 ， 这个这个文档名称我这个文档我会放在那个呃 Notes 里面 ， 这文档也非常重要 ， 如果你是一个程序员的话 ， 这个文档的名称叫做 Latency numbers every program should know。

啊 ， 你是这个 program， 你就所以你 should know， 哈哈 ， 嗯 ， 就 L2 的读取时间大概就是几个纳秒左右 ， 当然还有一些处理器会有像什么所谓 3G 缓存啊 ， 啊没有见过 4G 缓存的东西了好像 。

**Rio** [1:39:37]
没有 4G 缓存 。

**吴涛** [1:39:39]
就到内存了 。

**Rio** [1:39:40]
对 ，4G 缓存本应该就已经是很难说啊 ， 应该可能也有啊 。

**吴涛** [1:39:45]
我没有见过实用的系统上有 4G 缓存 。

**Rio** [1:39:48]
OK，CPU 一般最多也就是 3， 就缓存这个东西一般是会和 CPU 坐在一起的 。

**吴涛** [1:39:54]
对对 。

**Rio** [1:39:55]
但是等你 。

**吴涛** [1:39:56]
呃还不太一样 ，3G 缓存有很多是在主板上面的 。

**Rio** [1:40:01]
What？

**吴涛** [1:40:02]
你你还记得吗 ？ 这个早年就是 90 年代末的时候 ，有 L1、L2 是在板上的 ， 那是在一个芯片上面 ，但是 3G 缓存有很多这种廉价的 ， 那不叫廉价的 ， 主板算吧 ， 就是那种平就平民向的主板还是 。

**Rio** [1:40:16]
会有它坐在主板上面 。

**吴涛** [1:40:17]
对 ， 然后这样的话它就可以买一个比较便宜的那个 CPU，不带 3G 缓存 。

**Rio** [1:40:22]
嗯哼 。

**吴涛** [1:40:23]
对 ，anyway， 就是这这个是一个这是一个工业上的区别 ， 这逻辑上是没有任何区别 ， 就是 。

**Rio** [1:40:29]
对 。

**吴涛** [1:40:29]
呃就总体来说 ， 缓存越快 ， 就是这个存储器越快 ， 它的容量越小 ， 比如寄存器就只有几个 Word， 对吧 ？

在一个现代的 CPU 里面就 100 多个寄存器吧 ，不得了了 。 呃然后就是但是速度非常快 ，但是就这个最价格最贵 ， 然后一级缓存就几十 K， 价格次之 ， 速度也次之 ， 然后就以此类推 ， 差不多都是 。

**Rio** [1:40:55]
对 。

**吴涛** [1:40:56]
呃每跨越一个这个缓存的级别 ， 它就有至少是有一个数量级的那个容量和这个访问速度的变化 ， 就是 。

**Rio** [1:41:07]
对 。

**吴涛** [1:41:08]
啊 ， 大概是大概是这个意思 ，但是现在就一般来说啊 ， 就编程的话 ， 我们是看不到说呃一级缓存和二级缓存的这个实体的 ， 这个是编 。

**Rio** [1:41:18]
对 ，因为你也没有办法去具体的写一个程序 ， 说这个程序只用到一级缓存 ， 这是不可能的 。

**吴涛** [1:41:24]
因为这个是在叫什么 ， 这个是操作系统硬件 ，不 ， 这个是计算机硬件帮你去调度解决的问题 ，但是你哈会编可以做到去选择性的使用啊 ， 就什么寄存器那东西 ， 那个是另外一说 。

**Rio** [1:41:39]
对 。

**吴涛** [1:41:39]
嗯啊 ，但是其实就是说对于一个普通程序员来讲 ， 暴露给你的始终就只是一个内存地址这么一个概念 ， 然后当然我们说内存它是一关机就没了嘛 ， 所以你还是要把东西放在一个可以持久化的存储 ， 比如说磁盘或者现在是 SSD 上面去 ，但是你刚才吴涛也讲了 ， 你要把这些东西 load 进内存里面才可以用 ， 才有一个地址可以执行 。

**Rio** [1:42:01]
对 ，在这个页面上很方便的 ， 它把这个它在下面有一个有一个非常形象的类比 ， 对 ， 它把所有的呃时间都乘了呃一个一个 billion。

**吴涛** [1:42:16]
十亿倍 。

**Rio** [1:42:16]
十亿倍 ， 对 ， 那么呃以 nanosecond 乘上十亿就变成了呃一秒 。

**吴涛** [1:42:23]
对 。

**Rio** [1:42:24]
对 ， 那么 L1 缓存的存储时间大概是半秒钟 。

**吴涛** [1:42:30]
就是心跳一下 。

**Rio** [1:42:31]
心跳一下， 然后二级缓存的存储时间大概是 7 秒钟 ， 就是你打一个长长的哈欠 ， 大概二级缓存就到了 。

**吴涛** [1:42:40]
7 秒钟 。

**Rio** [1:42:40]
如果你生活在计算机世界里的话 。

**吴涛** [1:42:42]
可以 。

**Rio** [1:42:43]
对 。

**吴涛** [1:42:44]
啊 ， 访问内存的时间其实就是我们通常觉得内存访问挺快的 ，因为比磁盘快多少 ，但其实你跟像寄存器啊 ，L1 一级缓存 、 二级缓存比起来还是非常非常慢的一个一个东西啊 。

这里就就刚才那个比方 ， 这里访问内存的话 ， 大概在现代的计算机上大概是 100 秒的时候 ， 就是如果乘上十亿的话 ，100 秒就是一两分钟左右 ， 对 。

**Rio** [1:43:07]
嗯 ， 这段时间已经够你刷脸了 。

**吴涛** [1:43:10]
刷脸了 ， 对 。 啊 ， 这个这个类比还挺有意思的 ， 大家可以去看一下， 如果还有包括像你说你发一个数据包会怎么样 ， 就是他在这里给了一个例子 ，是从加州发一个数据包到荷兰 ， 然后再返回来 ， 就是一个 round trip， 大概是是 5 年的时间 ，不可想象 ， 网络是很慢的 。

**Rio** [1:43:31]
没错 。 对 ， 所以在很大很很多时候里面 ， 呃很多场景里面 ， 就是一个程序百无聊赖的在那边死等等。

**吴涛** [1:43:42]
等 IO 嘛 。

**Rio** [1:43:43]
等 ， 对 ， 等对方发送一个数据包回来 。

**吴涛** [1:43:47]
对 ， 就这里其实我们也可以看到了啊 ， 刚才那个是说等网络是很慢的 ，但是我们看一下等的一个磁盘 ， 就是访问一个这个这个啊磁盘上的文件 ， 就是读一个文件进来 ， 如果它还没有在内存里面的话 ，是大概是 16 周左右 ，16 周就是 4 个月吧 ， 差不多 。

**Rio** [1:44:05]
对 ， 足够你学完一门课了 。

**吴涛** [1:44:08]
对 ， 所以所以你看我们现在做很多做这个什么异步的 ， 就是现在编程很多你要做一些就是所谓 I 就是 IO heavy 的一些应用 ， 像 Node 啊这种东西 ， 你都要走异步的方法嘛 ， 就是因为你可以看到 ， 如果你每一次 IO 都要等同步的话 ， 你的程序就没法 。

**Rio** [1:44:30]
就是大部分时间都是在闲置的 。

**吴涛** [1:44:35]
啊 ， 那所以啊 ， 所以有这个 memory 这个这个内存的层级哈 ， 就是要如果我们直接把这么多层级暴露给开发者的话 ， 那显然这个软件工程就不用玩了 ， 天天在那里 debug 内存错 ， 那个内存的问题都已经够你玩上一阵子了 。

所以我们把这东西通过像一些啊 ， 首先比如说硬件上层面上呃直接隐藏掉一级二级缓存 ， 然后通过这个虚拟内存这个概念隐藏掉呃磁盘和内存之间的区别 ， 这样的话可以把这个编程模型大幅度简化 ， 让我们这种平庸之辈也能够开开心心的写上程序 。

**Rio** [1:45:16]
或者应该应该是应该反过来说 ， 应该是这种进化之所以存在 ，是因为试图让平庸之辈写出来的程序也可以在也可以比较体面的跑在电脑上， 否则真的是慢的不得了 。

**吴涛** [1:45:29]
啊 ， 或者说是直接就 crash 掉 。

**Rio** [1:45:32]
对 。

**吴涛** [1:45:32]
嗯啊 ，不过这里就其实还是牵涉到有一个概念啊 ， 就是为什么我们要分这么多内存的层级 ，其实也就是因为穷嘛 。

**Rio** [1:45:44]
对啊 ，因为内存的造价实在是太高了 。

**吴涛** [1:45:47]
就是你如果大家都做成 ， 首先物理上做不到 ，因为你要做成寄存器的话 ， 你得所有东西都在那个芯片里面 ， 对吧 ？

但是得靠近那个什么计算元器件 ， 那可能那个物理空间是有限的嘛 ， 你不可能做到 。 第二个就是说 ， 就如果能做到 ， 比如说我们都用把一级缓存做成 500 兆 ，而且还能做成一个 G， 哎呀 ，也可以 ，但是这个成本就不是天文数字了 ，不可以想象 。

**Rio** [1:46:14]
可能比尔盖茨也只能买两台而已 。

**吴涛** [1:46:18]
买得起半台都不错了 ， 哈哈 。 呃 ，但是呃就说内存层级搞这么复杂 ，也是为了向现实的一个妥协嘛 ， 就是在我们怎么把这个东西做尽量便宜 ， 那么越慢的东西越便宜 ， 对吧 ？

所以那就那就慢一点了 ， 那就要通过这种分层级的方式来隐藏掉我们实际上用一个很便宜很慢的一个设备 。

**Rio** [1:46:42]
对啊 ， 然后把剩余的好钢都就是花钱在刀上 。

**吴涛** [1:46:47]
不 ， 刀尖上 。其实我刚才刚才想了一下， 假设一个晶圆 ， 一个圆形的晶圆完全用来做缓存 ， 大概要多少钱呢 ？

一个晶圆片吗 ？

**Rio** [1:47:02]
对 ， 就整整个一大片晶圆做成一个缓存 ， 嗯 ， 然后像太阳能板那样装在什么地方 ， 然后把它把它把它插在 CPU 什么地方 。

**吴涛** [1:47:15]
这个我还不太 ， 首先有个物理的限制 ， 你访问它的那个速度是给很定的嘛 ， 你就哪怕你就你变大了之后， 你访问边缘边缘上的那一部分必然是要等的嘛 。

**Rio** [1:47:28]
那就把它做成立体的嘛 。

**吴涛** [1:47:30]
那那就是 。

**Rio** [1:47:30]
我小时候有这种愚蠢的想法 ， 就是 。

**吴涛** [1:47:33]
这是没错 ， 这是一个很好的想法 。

**Rio** [1:47:34]
三维布线 。

**吴涛** [1:47:35]
对 ， 三维布线也是一个很常用的一个思路嘛 ，但是问题是说这个始终是一个 ， 你就无非是从二维变成了三维嘛 ， 你的这个总的这空间始终还是有限 ， 就不可能无限制的 ， 这个就是不管是从这个物理现实的角度考虑 ， 还是从一个经济的角度考虑 ， 都一定是一定是存在这么一个不同等级的存储的访问时间和容量的限制的 。

**Rio** [1:47:57]
对 ， 除非你在可以在非常微小的尺度上开一大堆 portal， 然后 。

**吴涛** [1:48:02]
可以开高维空间 。

**Rio** [1:48:05]
对 ， 就彻底解决了访问速度的问题 。

**吴涛** [1:48:09]
那个作弊了哈 。 回到我们正常的现实世界 。

**Rio** [1:48:12]
对 。

**吴涛** [1:48:13]
啊 ，但有一个挺麻烦的问题 ， 就是说内存它是我们现在用的主要的内存 ， 它是一个叫做易失性的内存 ， 叫做 Volatile 啊的内存 。

### 非易失内存

**吴涛** [1:48:23]
什么意思呢 ？ 就是 。

**Rio** [1:48:24]
Volatile 这个词本本意是挥发吧 ， 我记得 。

**吴涛** [1:48:27]
对 ， 就是挥发的意思 。

**Rio** [1:48:29]
挥化肥会挥发 ， 内存会挥发 ， 就是这个意思 。

**吴涛** [1:48:34]
对 ， 所所谓易失性就是说你一旦断电之后， 内存里面存的东西嘣就没有了吧 。

**Rio** [1:48:41]
当然有嘣这么快 ， 就因为我记得大概 。

**吴涛** [1:48:44]
有个残留的 。

**Rio** [1:48:46]
对 ，10 年， 呃 2010 年左右有一群呃有一个安全实验室的人展示了一个电脑关机之后立刻用液氮去 。

**吴涛** [1:48:56]
冷冻它是吧 ？

**Rio** [1:48:56]
应该没有液氮吧 ， 应该没有液氮吧 。

**吴涛** [1:48:58]
用液氮 。

**Rio** [1:49:00]
是液氮吗 ？ 就是立刻把它冷冻住 ， 然后去呃直接搜这个内存里面的数据 ， 然后 。

**吴涛** [1:49:06]
还能读出来些许的 。

**Rio** [1:49:08]
对 。

**吴涛** [1:49:08]
那它可以把把这个什么电子维那个的状态维持到在低温状态下能够维持一段时间吗 ？

**Rio** [1:49:15]
对 ， 就像对这些啊 ， 然后回忆我们刚才讲的这个 latency， 就这些所有的数据都在冬眠 ， 冬眠了十几年， 然后被被挖出来了 。

**吴涛** [1:49:27]
啊 ，但是就但是就我们日常 ， 就除开刚才吴涛讲的那种极端变态的场景之外哈 ，但正常情况下， 你一旦断电之后， 内存中间的数据就已经没有了 ， 就就清零了 。

然后你再通电的时候里面 ， 哎 ，他这什么不记得了 。 啊 ， 这个很很明显就是一个问题啊 ， 那比如说你电脑关机之后什么资料都没有了 ， 那你搞什么 ？

白搞了 。

**Rio** [1:49:50]
对 ， 这也就是我们为什么会会需要软盘 ， 或者说需要外置磁盘这种东西 。

**吴涛** [1:49:56]
对 ， 就是硬盘啊 ， 之前的软盘也好 ， 它都是一个所谓的 non-volatile 的存储介质 ， 就非易失性的存储 ， 就是断电之后还还在 。

**Rio** [1:50:06]
对 。

**吴涛** [1:50:07]
啊 ，但其实这两个中间是有一定的这个障碍的 。 嗯 ， 刚才我们讲到 ，因为计算机并就起码操作系统并不能直接执行硬盘上面的东西 ， 它得先读到内存里面去 ， 所以每次都会有这么一个很变态的这么一个呃读取 ， 然后写内存 ， 然后的一个过程 。

呃 ， 然后对于一个软件的开发者来讲 ， 你也要做一些很奇怪的事情 ， 比如说我们做这个所谓会有一个序列化解序列化的东西 ， 就是你把一个数据文件读到呃内存中， 然后你要保存的时候 ， 你还得想办法它它把把它写回磁盘 ， 然后写回磁盘的中间 ， 你都会想怎么把那个内存中的一个结构一呃变成磁盘上面的一个啊 ， 一个一组这个二进制的流 ，

对吧 ？

**Rio** [1:50:52]
对 ， 呃不一定是二进制的 。

**吴涛** [1:50:56]
那最后变最后会变成一种 ， 就就就核心要点是说这个结这个数据结构在内存中是存在一一定形态的一个方式和结构组织 ， 通过这个指针的方式 。

**Rio** [1:51:08]
对 ， 你必须想办法把这个结构呃转化为某种可以复原的 。

**吴涛** [1:51:14]
对 。

**Rio** [1:51:15]
呃一个一个一个一个字节串 ， 或者是二进二进制的串 。

**吴涛** [1:51:19]
嗯 ， 对 ， 所以有这么一个序列化解序列化的过程 ，其实这点是挺折腾的 。 就是为什么如果就假设你想想 ， 如果我们把内存作为做成一个叫做非易失的 ， 就是内存关机之后它再开 ， 就断电之后再通电还能记住之前内容 ， 那你想象一下， 我们这个日常使用的计算机就是一个很爽的状态 ， 开机不用等 ， 你想不用的时候关按掉拔掉电源线 ， 就

是你不用关机 ， 把电池拔掉都没问题 ， 然后你插电之后， 哎 ， 又回到那个画面了 ， 一模一样 。

**Rio** [1:51:52]
哎 ， 我有个问题 ， 就是比如说 MP3 播放器 ， 或者是嗯 ， 就比如说单片机 ，有有些单片机使用的存储器的确是非呃 non-volatile。

**吴涛** [1:52:06]
啊 ， 对 ，有有这种 ，有很呃很这种叫什么 ， 呃比较小的情况下， 它会有这种应用吧 ， 就是它能够关掉 ， 然后重启之后它还在那个状态 。

**Rio** [1:52:16]
对 ， 所以这种程这种机器实际上是没有这个问题存存在的 ， 就是它它无所谓什么都什么 ， 就是它完全不会区分什么是一个程序在运行的状态 ，以及什么是一个程序被被被被折叠起来的 ， 对 ， 被折叠起来 ， 被存储起来的状态 。

**吴涛** [1:52:37]
对 ， 就如果它是用这种非易失性的内存的话 ， 它就是真的可以可以做到这一点 。 而且啊啊 ， 当然这个硬件上具体怎么样我们先不说 ，但我们就只讨论这种这种 ， 如果这种是一个主流的方式的话 ， 我们作为一个开发者 ， 作为一个程序员的编程模型就很爽了 。

比如说你不用想什么什么持久化呀 ， 就经常我们现在比如说做什么呃后端开发 ， 要考虑说这个内存这个这个机器死机了 ， 就服务器宕机了 ， 我那个内存中的数据不就没了吗 ？

那我又没写到那磁盘上面 ，不就丢了吗 ？ 对吧 ， 就会有这种这种很这种担忧 ， 然后会用通过各种方法去去去想办法掩盖 ， 呃就是去去去处理 ， 针对这种类型的时候进行应该处理 。

但是如果你的内存是非易失的话 ， 就很爽啦 ， 那就直接再重启一下呗 ， 对吧 ？ 还就再通电嘛 ， 还是那个状态啊 ， 我们也不用去考虑什么序列化解序列化 ， 就开机刚讲嘛 ， 序列化解解决策略就是要就是我们开机要等那么长的一个时间的最主要的原因 ， 你要等那个东西从磁盘上加载到内存里面去 ， 要把那个啊一个序列化的一个压 ， 你可以

想象成它比较压缩 ， 变成一个呃改呃转写的结构 ， 然后再变成内存中的一个结构嘛 ， 这个是要花时间等的嘛 。

**Rio** [1:53:51]
但是序列化其实还有另外一个用途 ， 就是或者说序列化也比较主要的用途就是数据传输呀 ， 为了传输数据 ， 你将你不得不把它序列化 ， 就是传输媒介本身是 。

**吴涛** [1:54:04]
传输的时候肯定是要进行序列化 ，但是就说如果你是作为一个 ， 比如你操作系统 ， 你每天启动的时候 ， 你不需要和别人传输什么的 ， 你不需要 ， 你这个操作系统不是从另外一个网络上传过来的嘛 ， 对吧 ？

**Rio** [1:54:15]
对 。

**吴涛** [1:54:15]
大部分情况下 ，但也有那种什么 Netboot 这种情况 ， 那个情况再说啊 ， 就呃你你你启动你的电脑的时候 ， 你的操作系统是不需要等网络才能启动的嘛 。

所以所以这个时候 ， 如果我们能做到一个非易失的内存的话 ， 一切都很爽啊 ， 开机就就开机就可以有了 ， 关机就可以走了 。

嗯 ，但传统上这个是做就传统上我们做不到嘛 ，因为也是一个就是工业现实和这个成本的考量 ， 就是非易失的内存是有的 ，但是一个是比较贵 ， 然后另外一个就是它的访问速度 ， 存取速度不尽如人意 。

**Rio** [1:54:51]
最大的问题就还是太慢了 。

**吴涛** [1:54:53]
对 ， 呃慢和贵嘛 ， 就是要么都是 ， 要么就是你要有其中一个的必比啊 。 然后最近有一个所谓的什么 D 啊 ， 哎 ， 你知道传统什么三大类电容 ，不叫什么电器 。

**Rio** [1:55:07]
哦 ， 电容 、 电阻和电电导啊 ， 就是导线呗 。

**吴涛** [1:55:13]
不是三大元器件吗 ？ 我记得哈 ， 三大 。

**Rio** [1:55:15]
电容 、 电阻和电 。

**吴涛** [1:55:18]
其实其实这块马上就要暴露出这个是是储备不足了 ，因为这个因为我不是做一不是做一一的哈 ， 这块真的是完全不是太懂 ，但是 。

**Rio** [1:55:28]
我的电路不考过 。

**吴涛** [1:55:31]
哈哈哈 ， 我都没学过 ， 你比我你好 ， 你还比我还好一些 。 不过 anyway， 就是传统上有那么那么几种啊 ， 元器件 ， 电阻 、 电容 、 电感 ， 哎 ， 没错 ， 还还是三大类 ， 没记错 。

所谓存在说第四类的这种元器件 ， 英文叫做 memory memor memorister。

**Rio** [1:55:51]
Memorister。

**吴涛** [1:55:52]
Memorister， 然后中文这里维基百科的翻译叫做忆阻器 。

**Rio** [1:55:58]
对 ， 就是记忆的忆 ， 然后电阻的阻 ， 忆阻器 。

**吴涛** [1:56:02]
对 ， 它有一些它有一些奇怪的这种物理学电器的特性啊 ， 然后我是看不太懂 ，但是我知道它的它的作用是什么 ， 就是对于一个程序员来讲 ， 它的作用就可以让你实现所谓的刚才讲的一个是非易失的内存 ， 就是这是对我来说很重要的一点 。

然后这个啊 ， 就可以实现说你的内存和你的硬盘是同一个器件 。

**Rio** [1:56:29]
对 ， 这是非常非常对 ， 粗听没什么 ，但其实是一个非常重要的呃 ， 如果这个东西可以被研发出来 ，并且大规模使用的话 ， 那它将会彻底改变我们编程模型 。

**吴涛** [1:56:42]
对啊 ， 然后另外一个更牛逼的用途 ，但是现在我这个还是没太搞明白 ， 这个就也是因为什么电气工电 ， 这叫电气工程吗 ？

电气工程基础不够好的一个原因 。

**Rio** [1:56:55]
电子工程嘛 。

**吴涛** [1:56:56]
电子电子工程 ，whatever， 这个不不去纠结那么多细细节的名词了哈 。 对 ， 还有一个就是说它这个可忆阻器可以取代那种传统的电路 ， 就是我们传统的集成电路那种组组合的方式 ， 比如说你要做一个那个什么 NAND gate 嘛 。

**Rio** [1:57:11]
嗯哼 。

**吴涛** [1:57:12]
你可以用这个去构成一种那种计算的元器件 ， 然后它会实现更小的体积 ， 然后更就更低的功耗吧 ， 大概是这个意思 。

**Rio** [1:57:23]
哦 。

**吴涛** [1:57:23]
但是这个对计算来讲 ， 就对它它所暴露出来的编程模型的改变 ， 我觉得这个要小一些 ， 这个是从硬件层面的 ， 就 CPU 的模型暴露出来的实用模型是没有变化的 。

这实用模型就是说对于一个普通开发者来讲 ， 可能最大的变化还是说没有这个这个呃呃内存和这个磁盘 。

**Rio** [1:57:44]
就没有易易挥发性的内存和不易挥发性的内存的区别了 ， 就是你可以不用再去考虑内存管理和从磁盘上面调用文件 。

**吴涛** [1:57:56]
因为因为就只有内存管理这一件事了 。

**Rio** [1:57:58]
对 。

**吴涛** [1:57:58]
啊 ，而且那个时候也不用考 ， 刚才讲了也不用考虑序列化啊 ， 解序列化那些东西 ，因为你直接操作的就是内存中的这个数据结构 ， 然后这个数据结构关机后也是会被持久化下来的 ， 存下来的 ， 然后这样你开机的时候你还是回到那个程序原先的状态 。

**Rio** [1:58:16]
Hello IG have you tried turning it off and on again.

**吴涛** [1:58:18]
就不是就就可以在物理层面层面上实现我们虚现在用操作系统通过虚拟内存来做的事情 。

**Rio** [1:58:26]
对 。

**吴涛** [1:58:26]
嗯 ， 对 ， 我觉得这个对编程模型的改变还是蛮大的 。 不过这里面其实也有一些问题哈 ， 就是说如果你假假设这个内存是呃叫做非易失的话 ， 那么如果中间哪里错了 ，crash 了 ， 然后导致那个内存状态不对 ， 嗯 ， 就这个结果还是蛮奇怪的 。

**Rio** [1:58:46]
对 ， 忽然之间你好像没有一个非常好的手段去 reset 了 。

**吴涛** [1:58:51]
对 ， 对 ， 就以前那个那个叫什么 The IT Crowd 里面常说

， 对 ， 就是遇到问题先重开机重启试试了 ， 重启没问题就就还可以 ，因为重启就掉电了 ， 掉电的话一切重来 ， 就有一个所谓的一个呃 clean start。

**Rio** [1:59:13]
对 ， 就是如果计算机是一个状态机的话 ， 那么重启就可以让它回复到状态机的那个原点 。 一般来说 ， 呃程序不稳定都是这个状态机走进了一个没有被预见到的状态里面去 。

但是通过重启 ， 你可以让它重新回到那个至少是造计算机的人所预想的可以被控制 ，并且已经并且也知道它可以走向何处的地方 。

**吴涛** [1:59:38]
对 ， 所以所以所以呃 ，但是如果刚讲的如果是一个内存是非易失的话 ， 这点就行不通了 ， 就还肯定要采取一些极端的手段来做这个呃灾难恢复啊 ， 还是故障修复之类的事情 。

**Rio** [1:59:52]
对 。

**吴涛** [1:59:52]
嗯啊 ，不过但是这个刚才在讲这个不管是用这个 memor memorister。

**Rio** [1:59:59]
Memorister。

**吴涛** [2:00:00]
呃忆阻器还是说说通过虚拟内存这一点 ， 我们都是在试图说简化这个啊呃开发者的对这个的的开发难度 ， 就通过这种减少这个呃层级的方式来实现的 。其实现在的程序员所唯一需要 ， 或者也不是就需 ， 还是仍旧需要操心的一件事情 ， 就是序列化和反序列化 ， 对吧 ？

**Rio** [2:00:25]
对 。

**吴涛** [2:00:26]
但从整个编程的发展的方向来看 ，也许这件事情将来也是要被被被淘汰掉的 ， 或者说人们可以完全不用再去操心序列化反序列化这件事情 ， 对不对 ？

**Rio** [2:00:42]
对 。

**吴涛** [2:00:42]
有没有这个可能 ？

**Rio** [2:00:43]
对 ，其实现在已经有这种各种方法可以做一一定的这种事情了 。

**吴涛** [2:00:48]
对 ， 嗯 ， 先还是先说手工管理存档 ，因为我刚才又缅怀了一下自己当初写 C 程序的时候 ， 去会会在一张纸上写说有个东西 ， 我在什么地方把它呃 analog， 然后要记得应该在什么恰当的时候把它呃 free 掉 。

**Rio** [2:01:12]
嗯哼 。

**吴涛** [2:01:13]
就是嗯 ，C 其实 C 语言其实给你提供了一个比较贴近硬件的编程模型 ，但是它仍旧把嗯分配内存这一部分给帮你隐藏起来了 。

比如说你有想过 analog 究竟做了什么吗 ？ 就就我们说会说一个东西分配在堆上， 一个东西分配在站上， 可是可是堆和站这两个东西 ， 嗯 ， 你就站你可以通过后边语言来操作 ， 可是堆这个东西怎么通过后边语言来操作呢 ？

其实是不行的 ，不是吗 ？ 就堆这个东西其实是嗯操作系统替你虚拟出来的这么一块内存区域而已 。

**Rio** [2:01:55]
对 。

**吴涛** [2:01:55]
而站则是一个

嗯站其实也是要从系统虚拟出来的 。

**Rio** [2:02:03]
但不用不用那个 ， 你不用手工去管理它嘛 。

**吴涛** [2:02:06]
对 ， 堆和对堆堆和站的操堆和站的抽象层级其实是不太一样的 。

**Rio** [2:02:14]
嗯哼 。

**吴涛** [2:02:14]
可以这么说吗 ？

**Rio** [2:02:15]
对 ， 可以 。

**吴涛** [2:02:16]
对 ， 然后但是在那个就是在那个时候 ， 你调用一个函数的时候 ， 你在这个函数里面声明了一个本地变量 ， 然后这个本地变量其实就是默认分配在站上， 就是站这个东西你是没有一个直观的印象说哦 ， 这个东西在站上， 你只有去研究这个语言的原理的时候 ， 你才会明白什么是什么是站 。

**Rio** [2:02:35]
对 。

**吴涛** [2:02:35]
呃 ，但是堆这个东西你会有显示的至少两个 API 去操作它 ， 比如说一个一个是一个是 analog analog 或者 C analog。

**Rio** [2:02:44]
嗯哼 。

**吴涛** [2:02:44]
然后一个是 free。

**Rio** [2:02:45]
嗯哼 。

**吴涛** [2:02:46]
就是你会有你会通过 analog 这件事情拿到一个内存的地址 ，但是站是没有这个东西的 ， 站是不会给你一个东西 ， 就就让你显示去 push 和 pop 的 ， 对吧 ？

**Rio** [2:02:56]
对 。

**吴涛** [2:02:57]
说这个 pop dispatch， 我们的友台节目总是让我觉得是出战分发 。

**Rio** [2:03:05]
很 hardcore。

**吴涛** [2:03:07]
Messy， 对 ， 比我们比我们 kernel panic hardcore 多了 。 出战分发 ， 对 ，message message dispatch。

**Rio** [2:03:15]
对 。

**吴涛** [2:03:16]
对 ， 可是现在的程序员就就幸福很多了 ， 至少从比如说当然 C++ 程序员还是要去去操心呃呃一个一个类的那个叫什么 ？

**Rio** [2:03:31]
它要有呃 constructor， 中文是什么 ？

**吴涛** [2:03:34]
呃构造器 。

**Rio** [2:03:36]
对 ， 构造函数的 ， 你还需要去考虑一个类的构造函数 。

**吴涛** [2:03:40]
Constructor。

**Rio** [2:03:40]
C 构函数 ， 对 ，C 构函数 。 我就我小时候觉得这个这个这个这个这个名字好屌 ，C 构函数 。 然后嗯 ，在 Objective-C 里面你也需要你也需要去去考虑呃什么是 ， 就是你需要显示去写一个这个一个一个一个呃 interface 的 implementation 里面你要写这个玩意儿在被 dialog 的时候要做哪些事情 。

但是你从来不需要去显示着去调用这个 dialog 函数啊 ， 这一点和 C++ 应该是一样的 。

**吴涛** [2:04:15]
对 ， 它会帮你去 call 那个 ，但是你还是得要记住这个什么的顺序关系 ， 你写的时候就要要留意这一点嘛 。

**Rio** [2:04:22]
对 ， 然后 C++。

**吴涛** [2:04:24]
对 ， 然后 Objective-C 帮你帮程序员在某种程度上减轻了内存管理的的的的的业务逻辑 ， 你只需要自己去记住这个东西 ， 你要如果有别人还在用 ， 你就要 retain 一次 ， 如果有别人已经不再用了 ， 你就要你就把它 release 一下就好了 。

**Rio** [2:04:42]
嗯哼 。

**吴涛** [2:04:43]
然后只要还有一个人在用 ， 这个东西就不会被呃运行时真正的销毁掉 。

**Rio** [2:04:49]
它就就这个叫什么 ARC 吗 ？

**吴涛** [2:04:52]
不 ， 这是 RC， 没有 A。

**Rio** [2:04:54]
没有 A。

**吴涛** [2:04:54]
Reference counting，reference counting 就是人要自己去在这边算那个 release 了多少次 ， 呃以及 retain 了多少次 。 然后 ARC 帮你解决了这个问题 ， 就是你不用再去显示的 release 和 retain 了 。

**Rio** [2:05:07]
嗯哼 。

**吴涛** [2:05:08]
呃 。

**Rio** [2:05:09]
系统帮你数吗 ？

**吴涛** [2:05:10]
对 ， 就是 Objective-C 会在编译期帮你数一遍 。

**Rio** [2:05:14]
嗯哼 。

**吴涛** [2:05:14]
好 ， 这应该不是在运行时数的 ， 对 ， 编译期的时候会帮你数一遍 ， 你这个东西所有的用用的地方 ， 它就会帮你自动 retain 一次 ， 然后所有呃它觉得你已经不会再用的地方 ， 它就帮你 release 一下 。

**Rio** [2:05:28]
嗯哼 。 所以所以那个还是一个比较原始的方法 ， 就是 。

**吴涛** [2:05:33]
对 ，AI， 对 ， 就有点如果说呃手动的管理内存是一个怎么说 ， 是一个老式步枪的话 ， 你需要自己打一发 ， 上一枪拉一下枪栓 。

**Rio** [2:05:43]
嗯哼 。

**吴涛** [2:05:43]
那呃 ARC 就有点像半自动了 。 现在就是手工管理内存的时代基本上已经是过去了吧 ， 就除非你有什么特别 ， 除非你是自己是写呃虚拟机或者是编译器的人， 否则你一般是不需要去操心怎么手工管理内存这件事情 。

**Rio** [2:06:06]
它有些那种所谓的什么 performance critical 的东西的时候 ， 它会要用 C 或 C++ 来写的时候 ， 就还会考虑这个内存管理的问题 。

**吴涛** [2:06:15]
对 ， 或者是或者是在面试的时候 。

**Rio** [2:06:19]
嗯哼 ， 对 。

**吴涛** [2:06:19]
告诉你说啊 ， 你不能使用额外的内存 ， 你应该怎么回答 ， 你应该怎么办 ？

**Rio** [2:06:24]
怎么写个 analog？

**吴涛** [2:06:27]
对 ， 嗯 ， 然后现在就是主流的是一个垃圾回收的机制嘛 。

### 编程与GC

**Rio** [2:06:32]
对 ， 垃圾回收可以说是呃进一步解放了程序员 ， 就是你有更加清晰而简化的编程编程模型了 。

**吴涛** [2:06:43]
嗯哼 。

**Rio** [2:06:44]
当然由此也就降低了降低了编程的门嗯门槛 。

**吴涛** [2:06:50]
怎么说呢 ？

**Rio** [2:06:50]
提提高了你写出烂代码的几率 ， 应该这么说 。

**吴涛** [2:06:54]
你说门槛低了吗 ？

**Rio** [2:06:56]
门槛低有一种负面的负面的意味 。

**吴涛** [2:06:58]
那门槛低了是好事啊 。

**Rio** [2:07:00]
好吧 ， 你你是从比较正面的角度来理解这件事情 ，但我我总觉得就是门槛低了 。

**吴涛** [2:07:06]
就是更容易让更多平庸的人写出平庸但是 work 的代码 。

**Rio** [2:07:10]
对 ，但是时间一久就这甚至可以这么说 ， 就是编程模型的简化使得大规模的软件协作成为可能 。

**吴涛** [2:07:21]
对 。

**Rio** [2:07:22]
呃 。

**吴涛** [2:07:22]
就不是大家都是大牛的情况下也能把这个事情做出来 。

**Rio** [2:07:25]
对 ，有一群平庸的人也可以写出一个呃工业级别健壮的东西来给大家用 。

**吴涛** [2:07:32]
嗯哼 。

**Rio** [2:07:32]
而不再需要一群先驱者 ， 一群 hacker 去 ， 只有他们才可以写出一个真正的就是居然可以工作的程序来 。

**吴涛** [2:07:43]
对 ， 就对 。

**Rio** [2:07:45]
GC 的逻辑其实也蛮就是简单讲起来是蛮好讲的 ， 就是它会这个运行时会去检查你每一个内部的指针啊怎么样 ， 然后去算哪些指哪些区是没有不可能再被用到了 ， 然后它就直接把那些区域就标记为可以回收掉的嘛 。

**吴涛** [2:08:03]
对 ， 然后在下一段里面把它回收掉 。

**Rio** [2:08:06]
对 ， 当然 GC 有很多很多不同的呃类型 ， 我们可以找机会再讲 。

**吴涛** [2:08:13]
嗯哼 。

**Rio** [2:08:13]
呃这个你刚才说到那个 Go 出了 1.4， 我去看了一下它的那个 release release note 里面有一节写到说呃 change to runtime。

**吴涛** [2:08:25]
嗯哼 。

**Rio** [2:08:26]
它里面写说呃 1.4 之前 runtime 呃就是什么 GC 啊那个 concurrency 的支持啊 ，interface management map slices strings etc。

**吴涛** [2:08:39]
嗯哼 。

**Rio** [2:08:39]
嗯 ，在 1.4 之前基本上是以 C 来写的 。

**吴涛** [2:08:43]
对 。

**Rio** [2:08:43]
然后呃包括某些部分用了汇编代码 ， 然后从 1.4 开始大部分 runtime 都用 Go 来重写了一遍 。

**吴涛** [2:08:54]
对对 。

**Rio** [2:08:54]
然后以此 。

**吴涛** [2:08:56]
对 ，而且以此来呃带来了一个提升 ， 就是 garbage collector can scan the stacks of the programs in the runtime。

**Rio** [2:09:04]
嗯哼 。

**吴涛** [2:09:05]
And get accurate information about what variables are active。

**Rio** [2:09:08]
对 ， 它之前是因为它拿不到运行时的有些东西嘛 ， 所以它的那个 GC 就是它的那个内存垃圾回收是就是就是 imprecise， 就是不是很精确 ，有时候会漏掉一些东西啊 ，但是整体来说还可以吧 。

它现在变成一个就是就完全精确的 ， 就一定知道哪些指针是可以被就是哪些没有被 。

**吴涛** [2:09:30]
被安全回收的 。

**Rio** [2:09:31]
对 ， 然后他们还要做下一步 ，他们要做另外一件事情 ， 就是要把这个垃圾回收作为一个完全并行化的东西 ，因为现在的它的垃圾回收还是一个叫做 stop the world 嘛 。

**吴涛** [2:09:41]
哦 。

**Rio** [2:09:42]
Java JVM 也有这个呃不 ， 这句话要说严谨一点 ， 就是主流的 JVM 有这个对 ，有这个问题 ， 就是它在垃圾回收这个机制运行的期间 ，其程序的其他部分是暂停的 。

**吴涛** [2:09:58]
对 ， 这就是为什么这就是为什么 Eclipse 那么卡 。

**Rio** [2:10:01]
哈哈哈 ， 对 ，也许吧 。 对 ， 这个这个对很多应用来说这个就是不可以接受的 ， 比如说你写一个什么这个股票的实时交易的应用 ， 那你可能就那可能几十毫秒 ，100 毫秒的差别 ， 那就是上百万的这个经济的损失 ， 对吧 ？

所以不可你肯定不可避免 。 所以他们有些做金融交易的 ，有些就直接用那个什么呃 C++ 写 ， 就这样不需要去考虑 GC 的问题 。

然后或者是它用那个 JVM，但是用改改良过的这种就是所谓的 concurrent 或者 parallel GC， 就是并行的 GC。 这些过程中它可以不用停下来一个主程序 。

现在 Go 的它里面还是这个 stop the world 这种情况啊 ，但是它马上它是说 1.5 吧 ， 我记得就下一版本的时候它会变成那个 concurrent。

**吴涛** [2:10:46]
对 。

**Rio** [2:10:46]
嗯 。

**吴涛** [2:10:47]
这也就回到了刚才说的这个 ， 就是整个内存管理的方向还是朝着让越来越省心的方向来 。

**Rio** [2:10:56]
对 。

**吴涛** [2:10:57]
来来来演进的 ，但是同时也就造成了在真正那些仍旧还是需要像你说的那个股票操作系统 mission critical 的场合 ， 还是需要手动管理的 CN 啊 。

**Rio** [2:11:09]
嗯哼 。

**吴涛** [2:11:10]
就有些事情还是不得不依靠手动管理 ，因为手动管理才可以达到那个所需要的 performance。 对 ， 我记得呃那个 Bianna 是什么叫 Bianna Stroustrom， 对 ， 就是 C++ 的创始人在我忘了是哪本书里面 ， 她吐槽 C 呃吐槽 Java 说呃也就她有点炫耀的意思 ， 就是说呃你知道 join strike fighter JSF。

**Rio** [2:11:38]
嗯哼 。

**吴涛** [2:11:38]
战斗机它是一台 C++ 战斗机 ， 就是上面所有的代码都是跑的都是 C++。

**Rio** [2:11:43]
嗯哼 。

**吴涛** [2:11:44]
然后呃火星探测器你知道吗 ，是 C++ 写的 ，是你用 Java 给我写一个看看 。

**Rio** [2:11:50]
哈哈哈 。

**吴涛** [2:11:51]
大意就是这样 ， 对 。

**Rio** [2:11:52]
对 ， 那些的应用场合就比较极端嘛 ， 性能和这个环境要求比较恶劣 。

**吴涛** [2:11:58]
对 ，在这种情况之下你还是必不得不手动加加引号的手动去管理内存 。

**Rio** [2:12:04]
嗯哼 。 不过这个也有做到 ， 就是呃就是在这个技术进步的之后， 也有说这个程序员还没回过神来 ， 呃没有就是没有适应用到最新的这种方法去做了哈 。

这里有一个很很简单的例子 ， 之前我们提到了这个呃序列化解序列化的问题嘛 ，但我们要做一些事情的时候 ， 那呃你有一些文件你要在内存里面去展现 ，但是内存又不不如这个磁盘大嘛 。

**吴涛** [2:12:35]
对 。

**Rio** [2:12:35]
那么有些人就说那我怎么才能在内存里面去操 ，因为只有到内存里面只有操那个那个 CPU 才可以去操作那些数据嘛 。

所以我有一个这个从磁盘里面读数据读到内存里面去 ， 然后再处理 ， 然后再处理完毕再读下一段这么一个过程 。

嗯 ，但其实在现在操作系统上面 ， 这个事情也已经很大程度上可以完全被避免掉了 ， 就是通过所谓的使用这个叫做呃 memory map memory mapping 内存映射这个概念吧 。

**吴涛** [2:13:07]
对 。

**Rio** [2:13:08]
内存映射大概是什么事情呢 ？ 就操作系统提供了这么一个机制 ， 它可以说你可以指着磁磁盘上的一一个文件大小随意说 ， 哎 ， 我要把这块文件映射到内存地址里面去 ， 这样的话我操作系统呃就我的程序可以直接在呃在起码在界面上我直接操纵这个内存的一个区块就好了 。

但是具体的那个数据可能并不那个时候并不在内存里面 ， 然后这个时候是由操作系统去负责去把那个你要访问的那块内存区块的内容从这个磁盘上加载过来 ， 然后再再管理 。

如果说这个磁盘这个内存物理空间不足的情况下， 再把那些没有用到的那些内存区块再放回磁盘上去 ， 就是内存映射就做这么一件事 。

然后其实就很在这个就对我们的开发者来讲就是一个启发嘛 。 啊 ， 这一篇很好的文章大家我会会放在这个 notes 里面 ， 这个是 Varnish Cash 这个软件 ， 就是一个反向代理的常用 ， 如果现在你跑服务器后端的话 ， 可能会经常接触到这个软件啊 。他们的开发者写了一个就是它的标题叫做啊 What's Wrong with 1975 Programming， 就是你他说 1975 年的编程模型有什么问题啊 。

那么讲的最主要的一个问题就是说刚才一个啊就是内存啊 ， 就 1975 年的时候还没有没有虚拟内存这个概念嘛 ， 你真的是需要操你程序员手工去考虑怎么去从磁盘上加载一个文件到内存里面去 ， 然后再进行操作 ， 然后再写回去这个过程 。

但是到现在已经有这个虚拟内存 ， 这个操作系统就绝大部分操作系统都已经支持这个东西了 ，不然那个 analog 也没法写哈 。

**吴涛** [2:14:49]
对 。

**Rio** [2:14:50]
嗯 ，在这种情况下， 那么我们写程序的时候就可以不不用考虑这个一些东西 。 那比如说最简单的一个呃刚才讲的一个持久化和非持久化的问题 ， 呃持久化和序列化的问题 ， 就是那你可以不用考虑说我从内存里面读出一个比如说一个树状结构 ， 然后把它生写成一个串流再写到磁盘上， 那你直接说我在内存上分配一个比如说一个 GB 的空间 ， 然后来持久化这

个数据 ， 然后我直接把这个空间映射到我内存里面去 ， 然后我直接在里面建我的那个内存结构 ， 然后操作系统会在适当的时候把这些内存里面的数据持久化到磁磁盘上面去 ， 从而实现持久化的效果 。

但是作为一个程序员 ， 你又并不用担心自己再去真的去写写那个序列化的过程 。

**吴涛** [2:15:37]
没错 ，而且一个需要避免的 practice 或者说一个需要避免的过早优化就是嗯 ， 尽量也不要总觉得自己有些东西放在内存里面好像没有什么用 ， 应该先把它从里面挪出来 ， 然后放在一个磁盘上什么地方 ， 然后以此来达到节省内存的目的 。

**Rio** [2:16:00]
嗯哼 ， 这些都应该交给操作系统来去完成 。

**吴涛** [2:16:02]
对 ， 这件事情也通通应该让操作系统来完成 。

**Rio** [2:16:05]
对 。

**吴涛** [2:16:06]
对 ，其实说到说到序列化 ， 就是其实现在有很多网上的云端服务都提供了这样一种编程接口 ， 就是你可以在程序里面说呃比如说我用呃什么 JavaScript。

**Rio** [2:16:21]
嗯哼 。

**吴涛** [2:16:21]
我 JavaScript 交给你这样一个数据 。

**Rio** [2:16:25]
嗯哼 。

**吴涛** [2:16:25]
然后你就把它存下来 ， 然后我跟你要的时候你把它原样交还给我 。

**Rio** [2:16:30]
哈哈哈 。

**吴涛** [2:16:30]
诸如此类 。

**Rio** [2:16:31]
对对 ， 那个这个不光是在网页上啊 ， 包括我如果你开发那个 iOS 的话 ， 应该它有个 Core Data。

**吴涛** [2:16:38]
Core Data。

**Rio** [2:16:38]
对 ，也是做类似的事情嘛 。

**吴涛** [2:16:40]
对 ，Core Data 的编程模型我是觉得不是非常的直观 ，但它你可以理解 ， 你可以看到它试图为此做出一个比较简单用的接口来 ，但是用起来还是挺麻烦的 ， 我觉得 。

**Rio** [2:16:56]
那麻烦的点主要在哪里呢 ？

**吴涛** [2:16:58]
嗯 ， 啰嗦是一方面啊 ，但另外一方面 。

**Rio** [2:17:01]
那个是因为 Objective-C 的语法不好 。

**吴涛** [2:17:03]
对 ， 它是它是呃对 inherently。

**Rio** [2:17:06]
对 。

**吴涛** [2:17:06]
不可避免的 ，但 。

**Rio** [2:17:08]
但我觉得这个这个这个整个这个这个想法就是把序列化和持久化这一层从这个程序的这个界面里面呃分离开来 ， 我觉得这个是一个挺好的想法 。

**吴涛** [2:17:19]
对 。

**Rio** [2:17:20]
嗯 ， 这是没错的 。 啊 ， 就所以这还是说具体到实现的问题 ， 怎么去怎么去实现这一点 。

**吴涛** [2:17:26]
嗯 ， 可能我还是 Core Data 用的不够多吧 ，但 。

**Rio** [2:17:32]
不过 Core Data 的吐槽的人也不少 ， 你你你绝对不是唯一的 。 哈哈哈 。

**吴涛** [2:17:39]
对啊 。

**Rio** [2:17:40]
OK， 那么今天的啰啰嗦嗦讲了这么多内存和 。

**吴涛** [2:17:45]
讲的其实还是有点

。

**Rio** [2:17:48]
打乱 。

**吴涛** [2:17:49]
算对 ， 我觉得可能还是咱们两个功底不够 。

**Rio** [2:17:53]
完了 ，以后我们还是少碰那种比较 hardcore 的东西 ， 比较 。

**吴涛** [2:17:58]
大而硬的话题 。 对 ， 我们还是应该只谈风月 。 如果要做这样的话题的话 ， 我觉得我们可以比如说准备个两三个月 ， 然后写个脚本出来 ， 然后你说什么我说什么 ， 每一句都要精确的有有有案可查 ， 然后每一个数据都要每个数据都要查核对过 ， 对吧 ？

比如说 L2CACH 的典型尺寸是多少 ， 我们居然不能脱口而出 ， 太丢人了 。

**Rio** [2:18:27]
一兆两兆这个我知道 。

**吴涛** [2:18:29]
OK， 两兆 。 对啊 。 嗯 ， 对 ， 然后这一期的话题之所以会出现 ，其实完全是受到 Portal 的启发 ， 我必须承认 。

另一方面也是我之前有一波呃由此我想到了一个很呃有名的科幻作家叫做 Ted Chiang。Ted Chiang， 对 ， 中文名字叫姜锋楠 。

### 总结

**吴涛** [2:18:56]
就如果你读科幻小说的话应该会知道这个人 ，他这个人写过非常多的很有意思的科幻小说 。他有一部就叫呃 The Lifecycle of Software Objects。

**Rio** [2:19:08]
哈 。

**吴涛** [2:19:09]
对 ， 怎么说软件对象的生命周期 。 对 。

**Rio** [2:19:13]
嗯哼 。

**吴涛** [2:19:14]
它里面讲的就是呃当然这个剧情从现在看起来好像有点老 ，但他写的时候应该是挺新的 ， 就是大致就是讲有这么一个像 Second Life 这么的一个虚拟世界 。

**Rio** [2:19:29]
嗯哼 。

**吴涛** [2:19:30]
然后里面有一个公司培养出了一大堆人工智能 。

**Rio** [2:19:34]
嗯哼 。

**吴涛** [2:19:34]
人工智能是活在 Second Life 这个世界里面的 ，但是它不叫 Second Life， 它叫另外一个 Digital Terra 之类的呃数字地球之类的这么一个 。

**Rio** [2:19:45]
嗯哼 。

**吴涛** [2:19:45]
一个一个虚拟的虚拟世界里面 ， 然后在这个虚拟世界里面跑着一些人工智能 ， 然后这些人工智能是真正的智能 ， 就是生下来的时候 ， 这些人工智能诞生的时候是没有什么技能的 ， 然后需要一群训练 ， 需要一群人类在里面训练他们 。

**Rio** [2:20:03]
嗯 。

**吴涛** [2:20:04]
学习 ， 然后教他们做游戏 ， 然后呃把他们就是他们有各种各样的形体 ， 比如说有些人是机器人的形状 ，有些人是鸭子的形状 ，有些人是然后呃诸如此类 ， 然后就讲的是人工智能被培育起来的事情 。

然后这个这个文章也是这篇文章也是呃女性视角 ， 对 ，somehow 很奇怪的女性视角 ， 然后呃讲的故事也比较其实你读的话你会觉得他说的很多事情都很平淡 ， 比如就讲这个主角是怎么带着这些小人工智能们呃陪他们玩 ， 然后看他们的一点点的和用户互动 ， 然后直到后来有把他们装到就是实体世界里面做出来的机器人， 就把他们下载到那个机

器人里面 ， 然后带着他们去看去去去体验实体的世界 。

**Rio** [2:20:54]
嗯哼 。

**吴涛** [2:20:55]
然后以及最后人们是呃怎样他们的用户是怎样失去了对这种人工智能的兴趣 ， 然后就把这些人工智能要要要退还 ， 或者是或者是要要冻结乃至销毁的这么一个过程 。

**Rio** [2:21:10]
嗯 。

**吴涛** [2:21:10]
对 ， 对 ， 这篇文章也是有引发我做这样一期呃主题的动机之一 ，但是很显然可能出于这个资历和和背景的缘故 ， 好像准备比较仓促 ， 做的不是特别的尽如人意 。

不过嗯 。

**Rio** [2:21:31]
下次吧 。

**吴涛** [2:21:32]
以后对 ， 下次补回来吧 。

**Rio** [2:21:34]
哈哈哈 。

**吴涛** [2:21:35]
对 。

**Rio** [2:21:35]
好 ， 那今天的节目就到这里为结止了 。

**吴涛** [2:21:38]
嗯哼 ， 对 ， 然后我们应该会请大家听一遍这个哈哈 Still Alive 我们的主题曲 ， 那就下期再见吧 。

**Rio** [2:21:50]
拜拜 。

**吴涛** [2:21:51]
啊 ， 对 ， 呃忘了这期播出时间的播出之后应该就要圣诞节了吧 。

**Rio** [2:21:57]
呃我想想 。

**吴涛** [2:21:58]
我们下下期应该是圣诞节的那个周末我们应该没有节目 ， 我们是隔一周播一次嘛 ， 对吧 ？

**Rio** [2:22:06]
这个再议吧 ， 这个再议吧 。

**吴涛** [2:22:08]
对 ，anyway， 如果呃下一周你过圣诞节的话 ， 圣诞快乐 。

**Rio** [2:22:16]
哈哈哈 。

**吴涛** [2:22:18]
OK， 就这样 。

**Rio** [2:22:20]
OK。

**吴涛** [2:22:20]
拜拜 。

**Rio** [2:22:21]
拜拜 。

---

本节目库由 PodHood（https://podhood.com）提供支持——播客网站平台。
