## Clojure 在 OpenLDK 上:优化 Java 方法分派
在 OpenLDK (一种 Common Lisp JVM) 上运行 Clojure 曾面临极慢的启动时间——达到 REPL 几乎需要三个小时——这是由于 CLOS (Common Lisp 对象系统) 和 Java 的分派机制之间存在根本性不匹配所致。CLOS 使用多分派(考虑所有参数类型),而 Java 使用单分派(仅考虑接收者的类型)。OpenLDK 将 Java 映射到 CLOS,导致每次 Java 调用都进行代价高昂的方法查找,而 Clojure 在启动期间加载的约 3000 个类进一步加剧了这一问题。
解决方案是利用 CLOS 的元对象协议 (MOP) 将 Java 方法的默认分派机制替换为单分派实现。这是通过创建具有分派和 `invokespecial` 调用(Java 构造函数/超类调用)哈希表缓存的自定义 `java-generic-function` 元类来实现的。
关键改进包括拦截 SBCL 的 `update-dfun`(它在类定义上重建分派网络)并将其替换为缓存清除,以及为常用的 Java 方法(如 `<init>`)预先创建泛型函数。这些更改将 REPL 启动时间从近三个小时缩短到三分钟以内,展示了 MOP 在不修改核心 Lisp 实现的情况下进行有针对性的运行时定制的强大功能。
受一个奇特的、缺氧产生的想法启发,作者踏上了一段旅程,试图将“早餐”的全部内容绘制成一个复杂的、多维空间,其定义基于牛奶、鸡蛋和面粉的比例。 这项最初的趣味性智力练习,很快演变成了一场对理论上的“暗黑早餐”——一种*应该*存在但尚未被观察到的早餐——的痴迷式搜寻。
作者一丝不苟地记录了已知的早餐——煎饼、蛋饼、国际变种——绘制了它们之间的关系,并确定了早餐“流形”中一个显著而令人不安的空白。 尽管进行了广泛的研究,包括搜寻古代食谱,甚至分析了IHOP的菜单,但这个深渊仍然存在。
最终,一个线索浮出水面:IHOP蛋饼中含有煎饼糊,暗示了这种禁忌早餐的位置。 作者得出结论,这个空白很可能存在原因,并且干涉边界可能会产生灾难性的后果。 这项研究与其他的“早餐学者”分享,以洛夫克拉夫特一句令人不寒而栗的引言作为结尾,警告人们揭示太多真相的危险。
## Interval 研究公司:概要
Interval 研究公司于 1992 年由保罗·艾伦和戴维·利德尔创立,是一家独特的硅谷实验室,旨在弥合突破性技术与其未来影响之间的差距。与传统的研发机构不同,Interval 营造了一种高度跨学科的环境——汇集了电影制作人、艺术家、工程师等,探索无线通信、可穿戴计算和沉浸式环境等新兴技术。
受到 Xerox PARC 的成功 *和* 失败的启发,Interval 同时重视创新 *和* 潜在的商业化,运营模式介于研究实验室和风险投资基金之间。研究人员协作进行多个项目,通过“积分”系统分配资源,并被鼓励通过实地研究来研究实际应用。
经过七年的“自由探索”,Interval 将重点转向开发可销售的产品,导致了领导层的变更。虽然创作了一些有趣的艺术装置并催生了一些初创公司,但该实验室在很大程度上保持私密性。这种转变引发了研究人员之间的争论,讨论的是如何维持实验室最初的开放式探索精神,以及满足艾伦不断变化的商业利益,尤其是在有线电视行业。
## Go 运行时:深入内存分配器
Go 运行时内存分配器高效管理程序获取内存的方式,充当需要持久存在于函数调用之外的数据的“仓库经理”(堆)。与直接从操作系统请求内存(一个缓慢的过程)不同,Go 请求大块内存( arenas,通常为 64MB)并在内部管理分配。
Arenas 被划分为 8KB 页面,然后划分为包含单一大小对象的 *spans*,根据对象大小以及是否包含指针(scan/noscan)分为 68 个 *尺寸类别*(8B-32KB)。这避免了碎片并加快了分配速度。微小对象(<16B)被打包在一起以提高效率。
为了处理来自许多 goroutine 的并发分配,使用了三级缓存层次结构:每处理器 *mcaches*(无锁),每 span 类 *mcentrals*(简短锁),和全局 *mheap*(昂贵的锁)。这最大限度地减少了争用。
分配器与垃圾收集器紧密合作,使用位图跟踪存活对象。未使用的内存最终由后台 *scavenger* 返回给操作系统。该系统通过最大限度地减少系统调用和利用缓存来优先考虑速度,使 Go 的内存管理具有高性能。
## Hydroph0bia 漏洞 (CVE-2025-4275) – 修复分析与厂商响应
本文详细分析了 Insyde 针对 Hydroph0bia 漏洞的修复方案,该漏洞影响众多 OEM 厂商。禁运期结束后,只有戴尔迅速发布了解决该问题的 BIOS 更新。联想计划在 7 月 30 日前发布修复,Framework 承认了漏洞但未给出时间表,其他厂商(宏碁、惠普、富士通等)保持沉默。
对戴尔更新的 BIOS 进行逆向工程显示,修复主要位于 SecureFlashDxe 驱动程序中,添加了代码以删除可能被篡改的变量,并实施了 VariablePolicy 以防止其重新设置。然而,作者指出该修复并非万无一失,可能可以通过直接 NVRAM 操作(SPI 编程/闪存写入绕过)来绕过。
Insyde 承认曾尝试更强大的解决方案,但导致了回归问题,最终采用了当前这种不太理想的实现方式。他们承诺未来将发布修复程序,消除对 NVRAM 在安全敏感数据方面的依赖。作者赞扬了 Insyde 在整个披露过程中的响应速度和协作精神。将对新购买的配备 Intel BootGuard 的宏碁 Swift Go 16 进行进一步测试,以验证研究结果。
资源(BIOS 镜像、报告、驱动程序)可在 GitHub 上获取。
## 加州南部边境巡逻监控引发担忧
加州南部居民注意到,越来越多的隐藏式车牌识别器似乎由边境巡逻队在边境道路上运营。这些识别器在拜登政府任期最后几个月获得许可安装,并将数据传输到联邦数据库,引发了隐私和法律问题。
倡导者认为,该计划绕过了2016年加州关于自动车牌识别器(ALPR)使用的法律,是对守法公民不必要的侵入。为帮助移民的人道主义志愿者尤其担忧,担心因被追踪的行动而可能被拘留。虽然支持者声称这些识别器有助于识别罪犯和追踪贩运活动,但批评者指出,数据使用缺乏透明度。
最近的报告显示,边境巡逻队正在将这些数据用于预测情报计划,甚至质疑合法永久居民的日常活动。尽管州法律禁止与联邦移民执法部门共享数据,调查显示仍然存在违规行为。加州官员反应迟缓,最近一项旨在加强自动车牌识别器法律的法案已被州长否决。
## OsmAnd 100倍路由加速:摘要
OsmAnd以其强大的离线地图而闻名,但随着地图细节和路由复杂性的增加,性能面临挑战。他们传统的A*算法在速度方面遇到困难,尤其是在较长路线的情况下。OsmAnd没有采用标准解决方案(如收缩层次结构,这会牺牲灵活性和存储效率),而是开发了一个定制的**高速公路层次结构(HH)路由**系统。
HH路由利用基于“区域簇”和策略性选择的“边界点”(每个簇内的关键接入点)的两层结构。通过预先计算这些边界点之间的捷径,该系统大大减少了需要分析的道路段数量。这与优化的A*算法相结合,用于局部路线调整,实现了**100倍的速度提升**,而不会增加地图大小(整个星球的汽车数据仍然约为800MB)。
重要的是,HH路由保持了OsmAnd著名的灵活性,支持所有现有的路由参数和频繁的地图更新。虽然最佳性能需要跨区域保持一致的地图版本,但这种创新的方法为OsmAnd用户提供了更快、更高效和更可定制的离线导航。
## Rev-dep:JavaScript & TypeScript 快速依赖分析
Rev-dep 是一款高性能的静态分析工具,旨在维护大型 JavaScript 和 TypeScript 项目的代码质量和架构完整性。它使用 Go 语言构建,以实现卓越的性能,比其他工具更快地分析依赖图——审计 50 万+ 行代码的项目仅需约 500 毫秒。
它充当“依赖图的 lint 工具”,强制执行关于循环依赖、未使用代码(文件和模块)、模块边界和导入规范的规则。Rev-dep 提供基于**配置的治理**(用于自动化 CI 检查)和**探索性 CLI 工具集**,用于调试和理解依赖关系。
**主要特性:**
* **Monorepo 支持:** 原生支持现代工作区(pnpm、yarn、npm)和 `package.json` exports/imports。
* **可配置规则:** 定义并强制执行架构规则、导入风格和卫生检查。
* **快速 CLI:** 快速识别入口点、解析依赖项和列出导入的文件。
* **CI 集成:** 作为一道关卡,防止架构漂移和代码膨胀。
Rev-dep 通过提供对项目依赖关系的清晰洞察,帮助开发者自信地重构、维护和扩展代码库。它是一个有价值的工具,可确保代码库精简、结构良好且易于维护。