主要观点:编译器和数据库优化器有特定特点,现状存在矛盾,需改进以支持更好的调试、控制等。
关键信息:
- 优化器特点:具有 contingent criticality(在某些情境下至关重要且容错率低)、limited control(控制旋钮有限)、limited testability(检查输出的设施有限)、limited visibility(有时看似“有自己的想法”)。
- 现状矛盾:优化器关键但其他方面控制等不足。
改进方向:
- 帮助用户建立心理模型:有清晰优化文档及正负例,解释未触发优化原因及引导方法。
- 进化调试工具:借鉴 LLVM 的 Optimization Remarks 等,集成到编辑器扩展,方便用户分享报告。
- 提供强指导而非提示:避免优化器默默忽略,可通过语义分析等实现,不同情况可灵活处理。
- 建立优化器回归测试基础设施:针对不同情况设计测试,解决纯编译时和运行时优化的测试问题。
重要细节:
- Rust 有black_box内在函数用于优化调试;许多语言有标记内联信息的方式;MySQL 有optimizer hints。
- LLVM 支持Optimization Remarks;Clang 用[-fsave-optimization-record]支持记录,Rustc 支持[-Zremark-dir=<blah>];Swift 有SIL optimization remarks。
- 不同语言在优化与调试方面的特点,如 D 的“no GC”支持、C#的
ref参数等;Go 没有传统的开发和发布构建分离。 - 不同文章对 Proebsting’s Law 的研究及结论。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。