Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
kemchenj authored Jan 8, 2023
1 parent 3aef063 commit 7a2fe6e
Showing 1 changed file with 9 additions and 1 deletion.
10 changes: 9 additions & 1 deletion Reports/2023/#229-2023.01.09.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,15 @@
## 音视频

> 比较不错的书的推荐和书评
### 🐢 [2022 LLVM Dev Mtg: Implementing Language Support for ABI-Stable Software Evolution in Swift and LLVM](https://www.youtube.com/watch?v=MgPBetJWkmc)

[@kemchenj](https://kemchenj.github.io):今年的 LLVM 大会苹果工程师 Doug 分享了 Swift 实现 ABI Stability 的过程和细节,整个演讲思路清晰,层层深入讲得非常简单易懂,让我感受到了高级开发工程师的深厚功力,其中让我印象最深的是关于 Resilience Domain 这个抽象的引入。

实现 ABI 稳定需要付出一些额外的性能成本,因为不同版本的库,对于同一个结构体可能有不同的实现,例如新版本增加了字段,导致内存布局产生了变化,此时为了抹平这些实现的 ABI 差异,就需要引入额外中间层,一般来说这种性能消耗不会太大。

但对于 iOS/macOS 来说,引入了 Swift 的所有 SDK 都需要保持 ABI 稳定,大量的 SDK 互相调用时中间层带来的性能消耗就变得非常大。仔细想想其实它们之间互相调用时并不需要中间层进行转发,因为它们是一起编译出来的,它们的 ABI 对于同一版本的其它 SDK 来说是确定的。

Swift 将这样的一个“作用域”抽象为 **Resilience Domain**,处于同一个 domain 里的库互相调用的代码不会经过中间层的转发,指定好 Domain 之后 Swift 编译器就会自动为你处理好这一切,在保证 ABI 稳定的同时又尽可能地减少性能消耗,真的是非常棒的一个设计!

## 摸鱼周报

Expand Down

0 comments on commit 7a2fe6e

Please sign in to comment.