
























欢迎来到 Agili 的 Hacker Podcast 今日看点。今天我们会聊 MIT 为研究芯片安全从零写操作系统、Java 酝酿十二年的 Valhalla 终于合入主分支,还会看到 DuckDB 如何把整个分析型数据库塞进一个 20MB 的单文件里。
安全研究人员想在 Apple M1 这类芯片上验证 Spectre、Meltdown 攻击的细节,但过去只能在 macOS 或 Linux 上手动改内核,不稳定且难以复现。MIT CSAIL 团队索性从裸机写起,打造了专用于微架构研究的操作系统内核 Fractal。
Fractal 的核心设计是“多特权并发”,能让同一个实验在运行时切换特权级别,同时保持指令和地址空间不变。关键构造“外核线程”处在用户进程的内存里,却以内核特权执行,这让测量结果几乎不含中断、调度带来的背景噪声。
团队用 Fractal 在 M1 上发现了多个此前未知的行为。比如 ARM 的 CSV2 规范本应阻止低特权代码影响内核的推测执行,但 Fractal 发现 CPU 在保护机制起作用之前就已经把目标地址取进了指令缓存,这个操作仍然可以通过侧信道被观测到。团队还首次在 Apple Silicon 上验证了一种叫 Phantom 的推测攻击,并澄清了过去关于条件分支预测器跨特权级训练的误解——之前认为仅在性能核上有效,实际上是实验期间 macOS 悄悄把线程迁移到了不同核心。
Fractal 支持 x86_64、ARM64 和 RISC-V,代码量约 31000 行,配了 POSIX 系统调用、C 标准库,甚至能在上面跑 vim 和 GCC。项目已在 GitHub 开源,论文和全部实验数据也一并公开。有社区成员说,这个思路在 Spectre 保密期里微软工程师就玩过,但把它做成可复用的研究基础设施,Fractal 做到了。
DuckDB 是一个进程内分析型 SQL 数据库:不需要服务器,像加载 NumPy 一样直接链接到程序里,单二进制文件不到 20 MB。它专为扫描数百万行做过滤、聚合、连接之类的查询优化,而不是按主键单点查找。你可以直接对某个装满 Parquet、CSV 文件的目录写 SQL。
传统分析型数据库通过网络收发数据,每条结果记录都要序列化成协议格式再反序列化,这往往是查询中最慢的环节。DuckDB 在同一个进程里运行,能直接读取 Python dataframe 的缓冲区,甚至实现零拷贝。配合 Arrow 这样的列式内存格式,它绕开了逐行逐值函数调用的巨额开销。
SQL 进入 DuckDB 后经过解析、绑定、优化等阶段,优化器包含 33 个可单独禁用的转换规则,比如 filter pushdown、子查询展开和动态连接过滤器。物理计划最终被分解成一个个管线,没有需要看到全部数据才能产生结果的算子(如排序或分组)会形成断点,断点前三阶段(sink、combine、finalize)并行完成,充分利用多核。
数据库内部按列分开存储,每列分成约 12 万行的行组,每个行组携带最小最大值和空值计数这样的 zone map,查询时能直接跳过不相关的组。很多使用者并不建表,而是直接查询 Parquet 文件——Parquet 本身也是列存、带统计信息,DuckDB 连远程文件都只需要按需抓取部分字节。
Project Valhalla 的口号是让 Java 里自定义的类型在内存中变得扁平、密集,像基本类型一样,避免每个对象都带对象头、堆分配和指针跳转。6 月 15 日 Oracle 工程师确认 JEP 401(Value Classes and Objects)已合入 OpenJDK 主线,变更超过 19.7 万行代码,准备在 JDK 28 中预览。
在 JDK 28 里,用 value 声明值类,所有字段隐式 final,== 比较的是字段的逐位等效性,不再靠对象身份。配合 JEP 402,Integer 这类包装类也变成值类,== 终于比较的是数值。JVM 通过标量化和堆扁平化来优化:在栈上把值对象拆成字段,在数组里将字段直接连续存放,避免指针跳转。不过限于当前 64 位原子写,部分超过 64 位的对象还无法扁平化。
nullability 被推迟到独立 JEP,特化泛型也仍在研发中。许多评论者拿 C# 在 2002 年就实现了非空值类型来对比,但也有人指出 Java 有 30 年的向后兼容负担,分阶段发布更务实。团队核心成员解释,值类的设计目标是统一 Integer 和 int,放弃双投影模型是因为 80–90% 的开发者偏好简单方案。
1987 年日本国有铁道因巨額负债被拆分成 7 家 JR 公司,日本设计中心的山本洋司只有 124 天时间设计统一的标志、字体和全部应用物料。最终的 JR 连体字形意在表现“铁轨贯穿全国”,线条够粗,列车行驶时也看得清。
当时只有 15 色热转印色卡可用,设计师把这 15 种颜色摊在总裁面前,各公司各取所需,事后才用地域象征合理化各自的颜色。更极致的是,“鉄”字左边是“金”右边是“失”,在赤字中诞生的公司用这个字太不吉利。山本将“失”换成形近的“矢”(箭头),还专门去国会图书馆确认这个字确实存在。整个字标系统在印刷截止前一天傍晚才获批,但他觉得不够完美,又通宵重绘了所有公司的字标才赶上交付。
最初只打算给少量列车换标,但设计中心提议在第一天就让全系统一万辆车贴上 JR。利用末班车与首班车间 4–5 小时的窗口,工人们一列一列手工贴标。这份“最后一次服务”的使命感让大规模改装成为可能。近四十年间这个标志从未更换,社区认为这某种程度反映了经营的稳定。
作者从德国回到美国后,发现不管咖啡馆还是超市,几乎人人耳中挂着一副 AirPods。有调查显示 44% 的美国人使用蓝牙或无线耳机,重度使用者更容易感到孤独,也更少与陌生人进行有意义的对话。
一项 2026 年的研究发现美国人每天说出的单词数比 2005 年减少了 28%,而耳机鼓励人们避免与收银员交谈、在屏幕上点餐付款。更深层的问题是,耳机挤占了与自己独处的时间——用南加州大学教授的话说,只有脱离即时活动让思维自由游荡时,才会发生深度的反思和意义整合。
在杂货店,一位陌生老人对作者盘中的辣椒拌菜打趣了几句,这 15 秒的交流让作者整个下午更愉快。心理学研究指出,这些微小互动累积起来会让人相信“人们大体是善良的”。耳机有屏蔽噪音和帮助专注的好处,但作者几年前就有意识地减少使用频率。
Gribouille 0.3.0 发布了,这是一个用 Typst 实现图形语法的库。新版本可以用 guides(x: none) 隐藏坐标轴刻度线和标签,无需修改主题即可做到。图例控制也支持 guides(none) 一键隐藏所有未单独设置的部分。
compose() 新增 theme: 参数,统一设置合成图表的共用标题和图例样式;defer(plot, ...) 替换了之前的 plot(..., defer: true)。面积图现在默认按栈对齐和堆叠显示,不再需要显式指定统计变换和位置参数。标记函数 annotate() 还获得了 clip 参数,设为 false 后可让标注绘制到面板边界之外。社区有人关心是否能渲染成交互式 SVG,目前 Typst 可输出 SVG,但悬停数据需要额外脚本介入。
Hyundai 以 3.25 亿美元购买了 SoftBank 持有的 Boston Dynamics 剩余 9.65% 股份,实现全资控股。这是 SoftBank 行使此前保留的卖出选择权,把 Boston Dynamics 整体估值推至约 34 亿美元。SoftBank 抽身转向 AI 基础设施,正在组建 Roze AI,并重注押在 OpenAI 上。
Hyundai 计划 2028 年在佐治亚州的电动车工厂让 Atlas 开始做零件排序等实际工作,关键关节电机由集团内部的 Hyundai Mobis 生产。这有别于 Tesla Optimus 或 Figure AI:Hyundai 自己是工厂主,第一手客户就是自己,不需要先说服别人买机器人。社区里围绕“通用人形 vs 专用机械臂”展开了讨论,有人觉得长尾任务确实需要类人形来替代人类,也有人认为很多任务完全可以用现有固定或移动机械臂解决。
作者认为成为优秀机器学习研究者的过程和冥想很像:把读书与动手构建结合起来,不论有没有灵感都持续投入时间。研究方向不要追逐热度不够半年的概念,人工智能基础思想四十年没怎么变,把交叉熵手算、奇异值分解可视化到脑子里,比琢磨今年的流行词更值。
实验结果好,很好;结果差,也很好——两者提供的信息量相同,一串负面结果往往比单个正面结果更有教益。但对那些看起来太好的结果要极度偏执,一大半好结果都是代码 bug 制造的。现代深度学习堆栈极复杂,错误可能出在训练、推理、数据、框架的任何地方,不弄清楚就无法相信任何结论。
苯环结构来自梦,Ozempic 来自毒蜥毒液,好的想法常在散步和放空时冒出来。创意背后则是数百小时的苦工:Andrej Karpathy 手动标注了一大块 ImageNet,SWEBench 的作者花了数百小时清洗 GitHub 数据。文中用了一句禅语:“悟之前砍柴挑水,悟之后砍柴挑水。”成功的项目很少绕过笨重的细节。
Datasette Apps 是一个新插件,允许在 Datasette 实例中托管带 HTML 和 JavaScript 的自包含应用。应用跑在受限的 <iframe sandbox> 沙箱里,配合 Content-Security-Policy 头部禁止对外部域名的请求,也拿不到 cookies 或 localStorage。应用可以用 JavaScript 执行只读 SQL 查询,也可以按配置好的存储查询执行写入操作。
作者用 <meta> 标签设置了额外 CSP,发现恶意 JavaScript 无法在页面开头之后修改它。应用与父窗口的通信使用了 MessageChannel,导航后通道自动关闭,降低劫持风险。插件还内置了日志面板,方便调试 SQL 查询和 CSP 错误。用户可以把一段描述应用限制和可用 API 的提示粘贴到 ChatGPT 或 Claude 里让模型生成代码。安全评估发现了一个严重漏洞:普通用户可能通过自设 CSP 域名窃取管理员数据,修复方案是将设置允许域名的权限独立为 apps-set-csp,仅限受信任人员使用。
2016 年 6 月 15 日 ClickHouse 开源时只是 Yandex 内部替代 MySQL 和自建 MapReduce 的列式分析引擎。创始人 Alexey Milovidov 从一开始追求最高级别开源,把仓库当作别人学习 C++ 和数据结构实验的地方。一个完整的 CI 运行需要约 400 小时,曾帮助发现 jemalloc 甚至 Linux 内核里的 bug。
很多用户用 ClickHouse 替换 Elasticsearch 和 Loki 做可观测性,即使未索引的 LIKE '%hello world%' 查询也远超 Loki 索引后的速度。有人抱怨 JSON 导入有隐蔽陷阱,比如 JSONEachRow 下数字字段默认返回字符串,开启跳过未知字段后拼写错误会静默丢弃数据。零拷贝复制等功能则被限制在商业版中。尽管如此,大多数评论仍认为 ClickHouse 是“用正确工具做正确事”的好例子。
女:Hello 大家好,欢迎收听 Agili 的 Hacker Podcast,我是莓莓。
男:大家好,我是阿迪。
女:今天要聊的东西挺杂的,从芯片安全一直跑到日本铁路标志,中间还会穿插数据库和无处不在的耳机。咱们先从 MIT 那个专门折腾硬件的操作系统开始吧,阿迪,我听说它连名字都很直白,叫 Fractal。
男:对,MIT CSAIL 团队做的一个微内核,31000 多行代码,它直接跑在裸机上面,就是为了把硬件本身变成研究对象。以前安全研究人员想搞清楚 Spectre、Meltdown 这类推测执行攻击的细节,只能在 macOS 或 Linux 上手工改内核,改完系统随时崩,而且操作系统自己的中断、调度和地址空间切换会把真正想测的信号淹没掉,实验很难复现。
女:就像一个咖啡厅里你可以自由换座位,但服务员总在走来走去,你根本听不清隔壁说的悄悄话。
男:这个比喻很准。Fractal 的关键设计叫“多特权并发”,它可以在同一个实验里切换特权级别,却保持相同的指令和地址空间。他们构造了一种“外核线程”,表面在用户进程的内存里,实际以内核特权执行,这样就把操作系统的噪声几乎压到零。于是苹果 M1 芯片那些以前看不见的毛病就露出来了。
女:他们看到了什么?
男:M1 实现了 ARM 的 CSV2 规范,理论上应该阻止用户代码影响内核的推测执行。Fractal 确认这个保护在执行阶段确实有效,但在此之前 CPU 已经把目标地址取进指令缓存了,而这个取操作是可以通过侧信道观测到的。也就是说,用户代码仍然能影响内核缓存的内容。他们还在苹果芯片上首次验证了一种叫 Phantom 的推测攻击——连 nop 这种什么都不做的指令都会被误当成分支去推测执行。这在以前只在 AMD 和 Intel 上见过。
女:听起来像是原来那个假设安全的墙壁,其实有几块砖根本没砌上。
男:还有一个例子很有意思。之前有人研究 M1 的条件分支预测器,结论是跨特权训练在性能核上有效,在能效核上无效。Fractal 团队证明两个核都没有特权隔离,之前的结论只是 macOS 在系统调用时偷偷把线程迁到了不同核心上造成的假象。等于说,研究者被操作系统骗了好几年。
女:这个工具已经把代码开源了,别的团队也能直接拿来用?
男:github.com/jprx/fractal,支持 x86_64、ARM64 和 RISC-V,里面甚至还带了 POSIX 系统调用和 C 标准库,可以跑 vim 和 GCC。南加州大学一位助理教授评论说,Fractal 把过去那种打补丁式的微架构逆向工作流,变成了可复用的研究基础设施。研究硬件安全的人终于有了一把称手的镊子。
女:从芯片往上层走,就到了数据。说到数据,DuckDB 这几年曝光率特别高,我最近看到一篇对它的深度拆解,才知道为什么那么多人用它在笔记本上跑分析。
男:DuckDB 是一个进程内的分析型 SQL 数据库。“分析型”就是它为了扫描几百万行做过滤、聚合、连接这种操作而优化,不是按主键查一条记录。“进程内”意味着没有服务器,你 pip install duckdb 或者 brew install,然后就能把一个装满了 Parquet、CSV、JSON 的目录当成 SQL 数据库直接查。整个二进制不到 20 MB,零外部依赖。
女:我第一回用它读 S3 上的 Parquet 文件,还以为需要先下载,结果它只去拿了个文件脚注。
男:这就是它快的一个侧面。它先读脚注获取 schema 和每个行组的 min/max 统计信息,根据 WHERE 条件直接跳过不相关的行组,然后只取那些列块下来解压。而且在同一进程里可以用 Apache Arrow 做零拷贝,不需要像传统数据库那样把结果序列化成网络协议、逐行逐值调用 ODBC 函数。创始人 2017 年的论文测过,客户端协议本身消耗的时间经常比数据库计算时间还长。
女:所以省掉了搬箱子的过程。优化器是不是也很激进?
男:对,它在逻辑计划阶段有一整套小型优化器,filter pushdown、子查询重写成连接、动态构建哈希连接键的最小最大值过滤器下推到扫描端去利用 zone map。默认的列式存储把数据分成 256KB 的块,每个块带校验和,防止内存和磁盘上的位翻转。这套组合让它在单机上经常能跑赢年费几百万美元的集群。
女:但也不是什么地方都合适吧?
男:递归查询支持有限,JSON 类型只是字符串,逐行解析在有些场景不如 ClickHouse。还有人吐槽说静态链接扩展在 App Store 环境很头疼。但从用户反馈看,多数人是因为它实在太容易用了才上的手——有人拿来分析全公司工程师的 Claude Code 会话找开发体验缺口,有人在电动汽车上每个车跑一个 DuckDB 做本地数据分析,线性扩成本。
女:说到分析型数据库,今年正好是另一个明星项目 ClickHouse 开源十周年,它跟 DuckDB 感觉有点像,体位又不太一样。
男:ClickHouse 是 2016 年从 Yandex 内部开源出来的,最初就是要替换他们自己的 MySQL 和定制 MapReduce。创始人 Alexey Milovidov 从第一天起就把开发路线图、测试系统、代码评审全部公开。他干脆把仓库当成别人学习 C++ 和数据结构的地方,你可以上去提一个实验性 PR,哪怕不打算合并,CI 也会完整跑一遍。他们的 CI 单次跑完要 400 小时,还真的揪出过 jemalloc、librdkafka 甚至 Linux 内核的 bug。
女:400 小时,这个大方程度挺罕见的。用 ClickHouse 的团队一般拿它替了什么?
男:最早那波人用它在日志分析上替换 Elasticsearch,获得 5 倍以上的压缩率和 QPS。后来可观测性场景里,有人用 LIKE '%hello world%' 都不建索引就能跑出比 Loki 索引查询还快的速度。还有把 TimescaleDB 换掉的,因为觉得运维痛苦少很多。
女:有没有踩过的坑?
男:JSON 导入有个很容易中招的地方,JSONEachRow 格式下数字字段默认返回字符串,忘了用 Number() 转换的话,算术全变成字符串拼接。还有个选项是跳过未知字段,字段名拼错就静默丢数据,不报错。社区版也不支持对象存储上的零拷贝复制,这是开放核心模式的妥协。但周围的声音整体还是那句话——用正确的工具做正确的事。
女:说完了两个分析数据库,我们再聊一个把数据和应用揉在一起的东西。Datasette 最近出了个新插件 datasette-apps,让用户能在 Datasette 实例里托管自包含的网页应用。阿迪,这个听起来像是给数据表直接装了前端。
男:对,这些应用跑在受限的 iframe 沙箱里,加了很严格的内容安全策略,不能往外部域名发请求,也不能碰 cookie 或 localStorage。应用可以用 JavaScript 执行只读 SQL 查询,配置了写入查询的话还可以执行写入。它的灵感部分来自 AI 生成 HTML 和 Claude Artifacts——给一个自包含的前端加上 Datasette 风格的后端,很顺手。
女:那安全性怎么保证?你刚才说沙箱,这够吗?
男:他们做了不少强化。父子窗口通信从 postMessage 换成了 MessageChannel,页面导航后通道自动关闭,能防止命令被外部页面劫持。还专门跑了安全评估工具,发现过一个严重漏洞:普通用户可以创建应用,把自己添加进 CSP 允许列表的域名,引诱管理员访问后窃取数据。修复是把添加 CSP 域名的权限单独拆成 apps-set-csp,只给受信任的人。
女:对我们这种不太会写前端的人,创建应用是不是还得求开发?
男:倒不一定。创建表单末尾有一段可复制的提示,直接粘贴给 ChatGPT、Claude 或者 Gemini,模型就能帮你把应用代码产出来。如果装了 Datasette Agent,AI 助手甚至能直接创建和编辑。当然,也有人担心这种依赖 LLM 的做法会导致想法同质化,创造力下降,但这门槛确实低到了泥土里。
女:这又绕到 AI 辅助开发的话题上了。我最近看过一篇讲机器学习研究者需要什么气质的文章,里面提醒说,代码助手虽然快,但隐患也不少。
男:它把 ML 研究比作禅修:把读书学习和动手构建结合起来,持续投入,灵感随机出现,大多数日子是没有的。真正要紧的不是去追每半年的流行词,而是回头手算交叉熵,把 SVD 可视化到脑子里。现代深度学习栈非常复杂,bug 可能藏在训练、推理、数据、框架任何一个角落。如果用代码助手,它可能在沉默中把配置改了、序列长度缩短了,你根本不知道。对工程来说这只是小毛病,对科研来说就是一场灾难。
女:文章还给实验结果定了个“平等心”的心态:结果好,很好;结果糟,也很好。一串负面结果往往比单个正面结果更有教益。碰到太好的结果反而要极度怀疑,多半是代码 bug 在假笑。
男:是的,健康的偏执很重要。它还讲了一点容易被忽略的事:深度学习实验周期很长,训练动辄几周,你得刻意设计流畅的研究流程,缩短冷启动时间,用小的评测快速拿反馈。有些结果急不来,保持对上周实验的理解本身就是硬功夫。
女:而且文章说,要做出好研究就得做研究以外的事——散步、放空,达尔文、费曼、特斯拉都这么干。这让我想起另一篇文章,讲的是美国现在到处都有人挂着一副耳机,连走路那几分钟空隙也要用播客填满。
男:那篇描述挺具体的。作者从德国回到美国,发现底特律郊区的咖啡店、超市、甚至高尔夫球场,几乎人人耳朵里塞着 AirPods。有市场数据说 44% 的美国人用无线耳机。2026 年有一项研究显示,美国人平均每天说出的单词数从 2005 到 2019 年减少了 28%,社会心理学家推测 2019 年后下滑更厉害。
女:我们以前觉得跟收银员打个招呼、跟陌生人闲扯两句不重要,现在看来这些零碎互动其实在帮我们建立对世界的信任感。
男:苏塞克斯大学的 Gillian Sandstrom 说,跟陌生人的随意交谈能增强社交技能,积累起来让人觉得“人们大体是善良的,我可以和任何人聊天,我在这个世界有位置”。戴上耳机,这些机会就全消失了。而且耳机还会改变我们对声音内容的感知——加州大学的研究发现,用耳机听播客会让听众觉得主持人更温暖、更有说服力,因为声音好像直接出现在头脑里,心理距离变近了。
女:这解释了为什么播客那么亲密,但也意味着我们可能连和自己独处的空白都被挤掉了。南加州大学的教授说,只有不干任何事、让思绪自由游荡的时候,才会发生深度的反思和意义整合。
男:社区里的讨论补充了很多角度。有人指出,在吵闹的地铁里戴耳机反而是把不正常的环境恢复正常;有人强调文化差异比技术影响更大,一个人愿不愿意交谈更多来自小时候的环境。还有女性说她们会戴不播放音乐的耳机,只是为了在不引发冲突的情况下阻止骚扰。但作者自己的选择是刻意减少耳机使用,他在杂货店的沙拉吧前被一个陌生老头调侃了一句,15 秒的对话让他整个下午更愉快。这种东西很难量化,但也许是我们最不应该丢掉的东西。
女:从耳机这个日常习惯,我想跳到一个看似无关却同样有耐心的故事——日本铁路的 JR 标志。
男:这个标志你可能在很多车站见过。1987 年日本国有铁道因巨额负债被拆分,成立 7 家 JR 公司,但全部都共用同一个 JR 标志。设计师山本洋司只有 124 天,从标志、字体、颜色应用规范、新闻资料到车票全要完成。初期提案超过 100 个,最后定下来的 J 和 R 连体字形表达的是铁轨贯穿全国、连续系统的意思,线条粗到列车开动也看得清,静止时也让人觉得有速度感。
女:七家公司的颜色是怎么定下来的?是品牌策略吗?
男:其实受限于当时只有 15 色的热转印色卡,设计师直接把颜色摆在总裁们面前让他们各选主色和副色。后来才用地名合理化:北海道选了浅绿,说是雪中的嫩芽;东海选了橙色,说是黎明;九州选了红色,说是南方烈日;货运选了集装箱蓝。更绝的是汉字,所有公司正式名称结尾都是“鉄”字,左边是“金”,右边是“失”,合起来是“失去金钱”,这不吉利。山本把右边的“失”换成形状几乎一样的“矢”,得到“䥑”字,意思是箭头。他还专门去国立国会图书馆查证这个字到底存不存在。
女:而且他在印刷截止前一天傍晚才拿到批复,觉得不够好,又通宵重绘了所有公司的字标,第二天上午十点准时交稿。
男:更疯狂的是上线那个晚上。本来只打算更新少量列车,山本提议第一天就给一万辆车贴上标志。所有车都在运营,工人们只能在 3 月 31 日末班车到 4 月 1 日首班车之间的四五个小时里,一列一列手工贴。口号是“最后一次服务——干吧”。那个标志将近四十年没更换过,在日本的大企业里很少见。山本的设计理念强调“事实、现实、诚实”,他认为很多企业标志只在桌面上好看,放大了就缺乏力度和尺度。
女:社区里有人提醒,JR 其实只是日本大约 100 家铁路公司里的 7 家,东京还有营团地铁、都营、小田急、东急等等很多私铁,它们本来就不是国铁。标志再统一,也没法代表全部的日本铁路。而且有人觉得 JR 看起来很像汉字“駅”,说不定是选这个名字的一个微妙原因。不过,这个故事还是让人感觉到,在拆分的混乱里,一个稳定的视觉符号能兜住一些东西。我想到机器学习那篇文章的结尾:花不跟旁边的花竞争,它只是盛开。
男:对。回过头看,Fractal 花了两年才发论文,DuckDB 是 CWI 的研究项目慢慢长成的,ClickHouse 在 Yandex 内部跑了七年才开源。这些跟贴完一万张标志用了一个通宵一样,都不是靠快取胜。也许这才是我们真正想聊的——你把手上的事做扎实,不需要总惦记着有没有噪音、有没有人在看,它会自己走出来。
女:好,这就是本期 Hacker Podcast 的全部内容。如果你喜欢,记得用泛用型播客客户端订阅我们,或者在 Apple Podcasts 上给个五星好评。谢谢大家,下期再见。
男:再见。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。