在分歧中发展 2019,我们能⽤用 Swift 做什么

前端狗

2019/07/09 发布于 编程 分类

GMTC2019 

文字内容
1. 在分歧中发展 2019,我们能⽤用 Swift 做什什么 王 巍 (@onevcat) LINE ⾼高级软件⼯工程师
2. 在此键⼊入姓名 在此键⼊入tittle
3. 在此键⼊入姓名 在此键⼊入tittle
4. ⾃自我介绍 王 巍,@onevcat iOS Developer - 2010~ Swift - 2014~ Kingfisher,ObjC 中国组织 LINE Corp ⾼高级软件开发⼯工程师 负责开发者关系及开源事业相关 (私下是全栈⼲干⼯工程师)
5. WWDC 2014
6. Chris Lattner LLVM
8. Objective-C = iOS/macOS
9. Swift = iOS/macOS ?
10. ⽬目录 为什什么是⼀一⻔门好语⾔言 当前的处境和变化 在 Apple 平台以外的使⽤用 未来啊,你在哪⾥里里
11. ⽬目录 为什什么是⼀一⻔门好语⾔言 当前的处境和变化 在 Apple 平台以外的使⽤用 未来啊,你在哪⾥里里
12. Fast Modern Safe
13. 快速、现代、安全,但…为什什么? 知其然,更更要知其所以然
14. 最主要原因:有个好爹 软件开发,特别是编程语⾔言开发,已经进⼊入了了拼爹时代
15. 专⻔门的编译优化 Objective-C 编译器器 词法分析 AST 语义分析 LLVM IR
16. 专⻔门的编译优化 快速 Swift 编译器器 Swift Intermediate Language 词法分析 AST 语义分析 SIL ⽣生成 SIL 未加⼯工 SIL 标准型 LLVM IR
17. 专⻔门的编译优化 Swift Intermediate Language 快速 SIL ⽣生成 • 强制内联 (mandatory inline) • 基于 protocol 的泛型特化 (specification) • class 和 protocol 的去虚拟化 (devirtualization) • 编译时的边界检查 • …. SIL 未加⼯工 SIL 标准型
18. Value Type 和 Immutable 安全
19. Copy on Write 快速 friends
20. Copy on Write 快速 friends sayHello(to: friends) guests
21. Copy on Write 快速 friends sayHello(to: friends) guests
22. Copy on Write 快速 friends sayHello(to: friends) guests Copy
23. ⾼高效的函数式编程 现代
24. ⾼高效的函数式编程 现代 命令式 运⾏行行时间 (s) 函数式 0 0.375 0.75 1.125 上⻚页代码以及等同的命令式程序对⽐比,循环 100,000 次,-O 编译 1.5
25. 图⽚片来源:知乎⽤用户 题叶
26. 完全避免 nil 崩溃 安全
27. 完全避免 nil 崩溃 安全 查尔斯·安东尼·理理查德·霍尔爵⼠士: “It was the invention of the null reference in 1965. I call it my billion-dollar mistake.
28. Swift 是⼀一⻔门优秀的语⾔言吗? 毫⽆无疑问
29. ⽬目录 为什什么是⼀一⻔门好语⾔言 当前的处境和变化 在 Apple 平台以外的使⽤用 未来啊,你在哪⾥里里
31. “ 我这⼏几年年每年年都学了了⼀一⻔门新语⾔言,它们分别是 Swift 1,Swift 2,Swift 3,Swift 4…
32. Swift 版本变迁 Swift ß Swift 1 Swift 2 Swift 3 公开 ! ! ! 2014 2015 2016 2017 ! Swift 4 Swift 5 ! 2018 源码不不兼容 = 需要修改源码才能编译 ⼆二进制不不兼容 = 需要重新编译才能运⾏行行 2019
33. Swift 5 ABI 稳定 Application Binary Interface 不不再会改动
34. Swift 5 ABI 稳定 iOS 12.1 或以前 iOS 12.2 或以后 App Size 改善 ~10MB
35. ABI 稳定的意义 Apple ⾃自⼰己可以使⽤用 Swift 开发系统框架 第三⽅方开发者可以发布⼆二进制框架 (Swift 5.1) App 下载尺⼨寸减⼩小 加载速度变快…
37. 虽然⽤用的是 Swift 但写出来的是 Objective-C
38. Swift 的编程范式应该是怎样的
39. Swift 的编程范式应该是怎样的
40. SwiftUI
41. UIKit
42. 完全区别于 UIKit 的全新范式 UIKit SwiftUI 基本思维 命令式 声明式 数据流 Target-Action Notification Binding Reactive 基础类型 UIView class View protocol 常⻅见架构 MVC DSL 描述
44. Swift in LINE 年年度 2018/05 2019/05 语⾔言 40% Swift 60% Objective-C 60% Swift 40% Objective-C Commit 12 万 14 万 代码⾏行行数 120 万 150 万 开发者⼈人数 ~100 ~100 * 以上数据均为概算
45. Swift in App Idea Demo Believer Application
46. Swift in App Idea Demo Believer Application
48. ⽬目录 为什什么是⼀一⻔门好语⾔言 当前的处境和变化 在 Apple 平台以外的使⽤用 未来啊,你在哪⾥里里
49. Swift on Server
50. Swift ⼜又快⼜又安全, 只做客户端是不不是太浪费?
51. SoS 项⽬目组 Swift Server Work Group (SSWG)
52. SoS 官⽅方筹划项⽬目 项⽬目 负责 SwiftNIO Apple Logging API Apple Metrics API Apple Postgres Client Vapor Redis Client N/A HTTP Client SSWG APNS Clinet Vapor
53. SwiftNIO Netty for Swift • 异步事件驱动 • ⾮非阻塞 IO • 基础的⽹网络底层协议实现 • Apple 开源
54. 基于 SwiftNIO 的⽹网络框架 Perfect-NIO SwiftNIO Kitura-NIO
55. Real World SoS objc.io
56. Real World SoS vapor.code
57. Real World SoS mxcl/Canopy
58. SoS 与其他⽅方案的优劣对⽐比 开发效率 重构信⼼心 内存占⽤用 崩溃率 周边⽣生态 部署⼯工具 开发者数 现象级 app
59. Swift on Server Idea Demo Believer Application
60. Swift on Web
61. ⼩小孩⼦子才做选择, 前端后端 我全都要
62. 任何可以使⽤用 JavaScript 来编写的应⽤用 最终会由 JavaScript 编写 — Atwood 定律律, 2007
63. 将 Swift 编译成 JavaScript 有任何优势吗?
64. Swift → JavaScript Swift 编译器器 Swift Intermediate Language 词法分析 AST 语义分析 SIL ⽣生成 SIL 未加⼯工 SIL 标准型 LLVM IR
65. Swift → JavaScript Swift 编译器器 Swift Intermediate Language 词法分析 AST 语义分析 SIL ⽣生成 SIL 未加⼯工 SIL 标准型 JS
66. 可⾏行行,但是... • • • • 已有成熟类似⽅方案 (TypeScript 等) 运⾏行行速度难堪重任 难以利利⽤用编译器器优化 缺乏 Swift 标准库
67. 软件开发也进⼊入了了拼爹时代
68. Apple Microsoft Google Mozilla
69. Apple Microsoft Google WebAssembly Mozilla
70. WebAssembly 是什什么 Binary instruction format for a stack-based virtual machine Portable target for high-level languages (C/C++/Rust) Enabling deployment on the web for client and server
71. WebAssembly 是什什么 C C++ Rust Binary Web
72. WebAssembly 驱动的⾼高性能项⽬目
73. WebAssembly 驱动的⾼高性能项⽬目
74. WebAssembly 驱动的⾼高性能项⽬目 3D 游戏 在线编译 ⾳音视频处理理 加密/解密 AR/VR
75. WebAssembly 驱动的⾼高性能项⽬目 Windows/macOS/Linux 加密/解密 3D 游戏 在线编译 ⾳音视频处理理 AR/VR
76. WebAssembly 是什什么 C C++ Rust Binary Web
77. 将 LLVM bitcode 编译为 WebAssembly (.wasm)
78. Clang 前端 C/C++ 词法分析 emscripten 后端 AST 语义分析 LLVM IR LLVM BC Emscripten wasm
79. WebAssembly 是什什么 C C++ Rust Binary Web
80. WebAssembly 是什什么 Binary Web
81. Swift → WebAssembly Swift 前端 Swift Intermediate Language 词法分析 AST 语义分析 SIL ⽣生成 SIL 未加⼯工 SIL 标准型 LLVM IR
82. Swift → WebAssembly Swift 前端 emscripten 后端 词法分析 AST …… LLVM IR LLVM BC Emscripten wasm
83. Swift → WebAssembly 在 Swift ⼯工具链中集成 emscripten? 1. 为⼯工具链后端添加 WASM target 2. 禁⽤用不不⽀支持的⽅方法 3. WASM 版的 Swift 标准库 4. 构建正确的 LLVM bitcode https://bugs.swift.org/browse/SR-9307 Build Swift packages targeting WASM https://reviews.llvm.org/D56188 Adopt SwiftABIInfo for WebAssembly https://github.com/apple/swift/pull/20684 Add minimal support … wasm
84. swiftwasm.org [Swift+WASM] initial support for compiling Swift to WebAssembly https://github.com/apple/swift/pull/24684
85. ⽤用 Swift 操作 DOM?
86. Swift DSL on HTML
87. Swift on Web Idea Demo Believer Application
88. Swift on AI
91. 灵活易易学,⽣生态丰富 动态解释,难以优化
92. 灵活易易学,“⽣生态丰富” 静态编译,“深层优化”
93. Python 协作
94. Call xxx from Swift @dynamicMemberLookup @dynamicCallable C API (Python, Ruby, etc…) . . .
95. 性能考虑 Graph Program Extraction Cloud TPU Google Colab Swift ⽀支持
96. Swift on AI Idea Demo Believer Application
97. Swift on IoT
100. CPU:Cortex-A53 1.4GHz 内存:1GB 存储:SDCard 16GB+ 系统:Linux 价格:¥300 86x54 mm
101. nRF9160 ¥100 10x16mm Cortex-M33 64MHz 256 KB RAM 1 MB Flash LTE, GPS, CryptoCell… CC2640 ¥25 7x7mm Cortex-M3 48MHz 20 KB RAM 128KB Flash 蓝⽛牙, AES-128
102. Swift on IoT - Swift 编译器器“应该”是不不可能的 - Swift 标准库也需要极度简化 - Swift 业务代码在 LLVM IR 后 与 C (Clang) 得到的驱动 link 后进⾏行行部署 Ref: Swifty Things: Programming the Internet of Things with Swift
103. Swift on IoT
104. Swift on IoT Idea Demo Believer Application
105. ⽬目录 为什什么是是⼀一⻔门好语⾔言 当前的处境和变化 在 Apple 平台以外的使⽤用 未来啊,你在哪⾥里里
106. Swift 是⼀一⻔门通⽤用语⾔言 ABI 稳定 新特性 App 开发 SwiftUI 周边⽣生态
107. Swift 在分歧中发展 App 开发 服务器器 ⽹网⻚页 AI IoT 脚本 …
109. 道路路千万条,app 第⼀一条 ⻋车道请选好,逆⾏行行两⾏行行泪
110. 在此键⼊入姓名 在此键⼊入tittle
111. 在此键⼊入姓名 在此键⼊入tittle
112. THANKS THANKS! THANKS!