2024 年 5 月 3 日,作者与 Leland 讨论如何在 Jetpack Compose 中最佳实现新的数据结构以加快特定方面的速度,Leland 提出想法并“nerd sniped”了作者。问题是如何高效编码 8x8 网格的占用情况并表示为Long
(每个位代表网格中的一个单元格)。
- The grid:给出了网格的示例及初始化代码,通过
Grid
类和相关函数实现网格的创建和输出,展示了如何用Long
表示网格并保持类型安全。还提到了Rect
类型及相关操作。 - Adding operators:添加一系列 API 以简化网格操作,通过重载运算符可对网格进行有趣的操作,如添加、减去矩形,查询单元格是否被占用等,这些运算符实现简单且编译后效率高。
- Higher level APIs:添加
forEach
函数遍历所有占用的单元格,代码简洁且生成的 aarch64 代码整洁,还使用了扩展函数使代码更易读。 - Hiding the madness:用户使用 API 时无需关注底层代码,可编写高度可读的代码,如各种网格操作的代码,且这些抽象不会影响代码的高效性。
- The mighty R8 is impressive:以
Rect
为例说明 R8 的作用,在不使用 R8 时生成的 aarch64 代码复杂,而启用 R8 后代码变为单个常量加载,展示了 R8 在优化代码方面的强大能力。完整代码可在GitHub gist获取。同时提到除位操作代码外,对 Kotlin 有一些抱怨,且使用了自己版本的coerceIn()
函数以避免标准函数的副作用影响优化。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。