很高興看到 UI 開發的「範式」再一次實現了跨平台的大統一。

「用編程語言聲明式表達 UI」部分,React,如 Jordan 所說 (「using the programming language itself to express the UI structure as a function of the varying inputs.」),應該是主要貢獻,即使 swiftUI 沒有說,"React(JSX) -> Flutter(Dart) -> SwiftUI" 這個影響鏈應該是被公認得,當然這個 idea 好像可以追溯到 P Wadler 或者 QT quick?但絕對是 React popularized (帶火) 得。

「Reconciliation(即如何 patch 視圖的更新)」 部分,基本上可以分為 functional update (setState) 和 data-binding(或 reactivity,或 observable 但並非類似 Rx 系基於 Stream 的observable……) 兩個流派。後者因為能靜態收集的依賴關係更多,在可能的(編譯期)性能優化上要有優勢得多。從這個角度上來說 SwiftUI 其實更接近 Vue(cc @尤雨溪 ) 或者更激進的 svelte,這個 idea 不知道要追溯到哪裡…Knockout,WPF?

「狀態管理 source of truth」部分,雖然大家通常認為 Redux 是 Flux 的變種,不過我覺得功勞顯然應該來自 Redux 借鑒的 Elm(Elm 其實對上面也有功勞畢竟人家是以一種非 Stream 的新 FRP 作為賣點發表的 paper)……這個在 WWDC 上是從傳統的 Event Bus 角度來引入的,再往上我就追溯不動了……

除此之外,swiftUI 倒是還一併包含了一堆各種社區里的亮點……

「性能」,類似 rust 用 struct 做 view 的 RAII,這個直接 ARC/GC 都省了

「類型」,view tree 是 statically typed 的,這個在此之前 Reason 做過嘗試

「工具」,能看到 storyboard,framer,android studio 的影子但是 way better

「樣式」,CSS in JS 邁出了一步, 但哪有重頭搞來得漂亮啊,modifier 也比 HOF 好

其他補充,

- SwiftUI 在渲染 pipeline 上也能比 RN 省好幾個步驟直接 talk to Metal

- 本來我以為 Android Kotlin 憑藉更大更開放的社區應該走得更快,現在看來 Jetpack composer 完成度也比不了

- Facebook 主要用的 React-inspired 的 ComponentKit (iOS) 和 Litho (Android) 雖然都很成熟也開源但出於競爭對手關係註定成不了平台標準

- 考慮對 effects 隔離和復用,React Hooks 仍然是超前的部分,其他框架中好像還只能依賴設計模式(不確定)

所以 apple「擁有平台 + 擁有整個技術棧 + 悶聲發大財」,能做的事情真得是很多。

歡迎指正,想到再更。


推薦閱讀:
相关文章