作为 PE 解析库 *AsmResolver* 的维护者,作者认为 .NET 的**自定义特性(Custom Attribute)**存储机制是微软最糟糕的设计决策之一,给开发者带来了极大的复杂性和挫败感。 该批评主要集中在两个问题上: 1. **枚举序列化:** 自定义特性根据其底层类型(如 `int` 或 `short`)存储枚举值,但二进制格式中并未提供识别该类型的元数据。若要解析这些值,必须对程序集元数据、类型定义和类型转发器进行昂贵的递归遍历,以确定正确的字节长度。 2. **通过字符串引用类型:** .NET 二进制格式的其他部分使用了高效且去重后的元数据 Token,但自定义特性却将 `System.Type` 引用存储为完全限定名(FQN)字符串。这种方式效率极低,不仅导致了巨大的数据膨胀,还迫使解析器必须针对各种且往往缺乏文档的语法规则,实现复杂且易出错的字符串解析逻辑。 作者总结道,这些设计选择过于繁琐且与 .NET 架构的其他部分不一致。由于微软对长期向后兼容性的严格坚持,这些问题很可能将一直无法得到解决。
在患上重复性劳损导致打字疼痛后,Rene Zelaya 开发了“WhisperPad”。这是一款注重隐私的本地 Mac 听写应用,旨在最大限度地减少手部活动。该应用的核心价值在于能够将转录的文本自动输入到任何程序中。
当苹果公司以违反关于辅助功能 API 使用的第 2.4.5 条准则为由,拒绝了该应用的后续更新时,Zelaya 被迫做出调整。他没有放弃这个项目,而是将软件拆分为两个版本:一个是符合 App Store 规范、需要手动粘贴的限制版;另一个则是保留了原始“自动粘贴”功能的直接分发版。
通过处理复杂的独立支付流程、应用更新和许可授权,Zelaya 学到平台限制并不意味着只有“服从或退出”两条路。相反,他采取了混合策略:利用 App Store 提高曝光度,同时通过直接发布来维持应用的全部功能。如今,WhisperPad 已通过这两种渠道提供,在尊重开发者最初辅助功能愿景的同时,也成功服务了用户。