## Yawn:一个“永远v1”前端库 一个最近的认识促成了Yawn的想法:前端响应式自2018年以来就已存在,通过Async Iterables实现!与其不断学习新的框架特定响应式系统(useState、refs、Signals等),Yawn利用了这一内置的Web平台特性。这旨在对抗“JavaScript疲劳”——无休止地采用和重新学习前端工具的循环。 Yawn 提出了一个最小的API(约2个函数,1个类),镜像Web标准,承诺一个不会改变的库。它利用标准的HTML属性和事件监听器,响应式由Async Iterables驱动。核心组件是用于管理响应式数据的`State`类。 该项目目前是一个概念验证 (<https://github.com/SacDeNoeuds/yawn>),拥有极小的体积(2.6kB gzip压缩后),并提供诸如延迟求值、与现有迭代器辅助工具的兼容性以及与后端流直接集成的潜力等优势。 作者寻求社区支持——如果GitHub仓库达到5,000颗星,则目标是向生产就绪推进。目标是构建一个基于持久Web基础的库,提供稳定且熟悉的发展体验。
## 减小 Haskell 二进制文件大小:链接与代码折叠
Haskell 二进制文件由于传递依赖性可能出乎意料地很大。本文探讨了在链接时减小它们大小的技术,并以 `pandoc` 项目为例进行演示。
提出了两种主要策略。首先,使用 GHC 选项 `-split-sections` 和 `--gc-sections`(通过 `-fuse-ld=lld` 使用 `lld` 作为链接器)可以将二进制文件大小减少 27%,从而实现死代码移除。
更具实验性的是,使用 `lld` 的*相同代码折叠* (ICF) 可以进一步缩小二进制文件(在本例中减少了另外 23%)。ICF 识别并合并功能上等效的代码段。虽然有效,但 ICF 并非完全安全,可能会导致依赖于特定函数地址的 C 代码出现问题。
分析表明 Haskell 项目内部存在大量代码重复,表明在编译过程中存在优化的潜力——缓存编译单元以避免重复工作。尝试了 `bloaty` 和 `kcov` 等工具进行进一步分析,但证明与 Haskell 代码不兼容。
作者还指出 ICF 与调试工具(如 `-fdistinct-constructor-tables`)之间可能存在交互,需要仔细考虑以保留调试信息。
## 从令人头疼的bug到Linux内核补丁
一位开发者的虚拟化之旅,导致了一次令人沮丧的调试经历,并最终促成了他们对Linux内核的首次贡献。在构建Type-2虚拟机监控程序时,他们在CPU核心之间切换时遇到了看似随机的系统崩溃。问题源于一段从KVM自检中借用的代码片段中的一个微妙的符号扩展错误,用于检索任务状态段(TSS)的基础地址。
这段代码依赖于对较小的整数类型进行位移,从而触发隐式整数提升和随后的C语言中的符号扩展。这破坏了计算出的TSS地址,导致在上下文切换期间发生崩溃——具体来说,在处理中断时发生双重错误。
经过数天的调查,排除了他们自己的代码作为罪魁祸首,开发者通过将有问题代码与KVM本身处理TSS地址检索的方式进行比较,发现了问题。一个简单的修复方法——在位移之前将值显式转换为无符号类型——阻止了符号扩展。
最终的补丁被接受并合并到Linux内核中。有趣的是,虽然AI工具帮助分析了日志,但它们未能识别根本原因,这凸显了人类调试技能的持续重要性。
这期通讯探讨了每个机构的“蒙娜丽莎”——那一件吸引人群、代表其最佳水平的珍品。 起源于作者注意到美国唯一的列奥纳多·达·芬奇画作《吉内弗拉·德·本奇》,在国家美术馆(作者工作的地方)有时被称为“美国的蒙娜丽莎”。
这引发了一项搜索,揭示了17个不同的例子。 从MoMA的安迪·沃霍尔的《金色玛丽莲·梦露》,到黑帮博物馆上布满弹孔的墙壁,甚至蒂芙尼钻石,机构都将特定物品视为达·芬奇杰作的等价物。 其他例子包括死海古卷、哈里特·塔布曼的照片,以及一个昵称为“伊达”的4700万年前的灵长类化石。
作者还反思了他们自己的“蒙娜丽莎”——一期关于消除垃圾邮件的过往通讯,这期通讯受到了读者的特别欢迎。 最终,这篇文章强调了不同机构如何定义和庆祝他们最具标志性和价值的珍宝。