Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
GMTC 2019 - 在分歧中发展,2019 我们能用 Swift 做什么
Search
Wei Wang
June 21, 2019
Technology
0
910
GMTC 2019 - 在分歧中发展,2019 我们能用 Swift 做什么
Wei Wang
June 21, 2019
Tweet
Share
More Decks by Wei Wang
See All by Wei Wang
網路之難,難於上青天 - iPlayground 2019
onevcat
11
4.9k
从 Swift 到机器学习
onevcat
2
940
iOS Dev - The Dark Side
onevcat
0
120
面向协议编程与 Cocoa 的邂逅
onevcat
14
4.7k
Swift 3 - From Expert to Beginner
onevcat
2
210
如何打造一个让人愉快的框架
onevcat
4
22k
JSPatch Introduction
onevcat
0
180
Objective-C Runtime Swizzle
onevcat
0
180
Unity Memory
onevcat
0
130
Other Decks in Technology
See All in Technology
【NGK2025S】動物園(PINTO_model_zoo)に遊びに行こう
kazuhitotakahashi
0
220
2025年に挑戦したいこと
molmolken
0
160
Alignment and Autonomy in Cybozu - 300人の開発組織でアラインメントと自律性を両立させるアジャイルな組織運営 / RSGT2025
ama_ch
1
2.4k
コロプラのオンボーディングを採用から語りたい
colopl
5
1.2k
ゼロからわかる!!AWSの構成図を書いてみようワークショップ 問題&解答解説 #デッカイギ #羽田デッカイギおつ
_mossann_t
0
1.5k
#TRG24 / David Cuartielles / Post Open Source
tarugoconf
0
580
2024AWSで個人的にアツかったアップデート
nagisa53
1
110
Amazon Route 53, 待ちに待った TLSAレコードのサポート開始
kenichinakamura
0
160
シフトライトなテスト活動を適切に行うことで、無理な開発をせず、過剰にテストせず、顧客をビックリさせないプロダクトを作り上げているお話 #RSGT2025 / Shift Right
nihonbuson
3
2.1k
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
6
54k
comilioとCloudflare、そして未来へと向けて
oliver_diary
6
440
今から、 今だからこそ始める Terraform で Azure 管理 / Managing Azure with Terraform: The Perfect Time to Start
nnstt1
0
220
Featured
See All Featured
Fashionably flexible responsive web design (full day workshop)
malarkey
406
66k
Designing Experiences People Love
moore
139
23k
How to train your dragon (web standard)
notwaldorf
89
5.8k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
KATA
mclloyd
29
14k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
3
360
Optimising Largest Contentful Paint
csswizardry
33
3k
Designing on Purpose - Digital PM Summit 2013
jponch
116
7.1k
Visualization
eitanlees
146
15k
Thoughts on Productivity
jonyablonski
68
4.4k
Building Your Own Lightsaber
phodgson
104
6.2k
Transcript
在分歧中发展 2019,我们能⽤用 Swift 做什什么 王 巍 (@onevcat) LINE ⾼高级软件⼯工程师
⾃自我介绍 王 巍,@onevcat iOS Developer - 2010~ Swift - 2014~
Kingfisher,ObjC 中国组织 LINE Corp ⾼高级软件开发⼯工程师 负责开发者关系及开源事业相关 (私下是全栈⼲干⼯工程师)
WWDC 2014
LLVM Chris Lattner
None
Objective-C = iOS/macOS
Swift = iOS/macOS?
⽬目录 为什什么是⼀一⻔门好语⾔言 当前的处境和变化 在 Apple 平台以外的使⽤用 未来啊,你在哪⾥里里
⽬目录 为什什么是⼀一⻔门好语⾔言 当前的处境和变化 在 Apple 平台以外的使⽤用 未来啊,你在哪⾥里里
Fast Modern Safe
快速、现代、安全,但…为什什么? 知其然,更更要知其所以然
最主要原因:有个好爹 软件开发,特别是编程语⾔言开发,已经进⼊入了了拼爹时代
专⻔门的编译优化 词法分析 语义分析 AST Objective-C 编译器器 LLVM IR
专⻔门的编译优化 词法分析 语义分析 SIL ⽣生成 AST Swift 编译器器 SIL 未加⼯工
SIL 标准型 LLVM IR Swift Intermediate Language 快速
专⻔门的编译优化 SIL ⽣生成 SIL 未加⼯工 SIL 标准型 Swift Intermediate Language
• 强制内联 (mandatory inline) • 基于 protocol 的泛型特化 (specification) • class 和 protocol 的去虚拟化 (devirtualization) • 编译时的边界检查 • …. 快速
Value Type 和 Immutable 安全
Copy on Write 快速 friends
Copy on Write 快速 sayHello(to: friends) friends guests
Copy on Write 快速 sayHello(to: friends) friends guests
Copy on Write 快速 sayHello(to: friends) friends guests Copy
现代 ⾼高效的函数式编程
现代 ⾼高效的函数式编程 运⾏行行时间 (s) 0 0.375 0.75 1.125 1.5 函数式
命令式 上⻚页代码以及等同的命令式程序对⽐比,循环 100,000 次,-O 编译
图⽚片来源:知乎⽤用户 题叶
完全避免 nil 崩溃 安全
完全避免 nil 崩溃 安全 It was the invention of the
null reference in 1965. I call it my billion-dollar mistake. 查尔斯·安东尼·理理查德·霍尔爵⼠士: “
Swift 是⼀一⻔门优秀的语⾔言吗? 毫⽆无疑问
⽬目录 为什什么是⼀一⻔门好语⾔言 当前的处境和变化 在 Apple 平台以外的使⽤用 未来啊,你在哪⾥里里
None
我这⼏几年年每年年都学了了⼀一⻔门新语⾔言,它们分别是 Swift 1,Swift 2,Swift 3,Swift 4… “
Swift 版本变迁 2014 Swift ß 2015 2016 2017 2018 2019
Swift 1 Swift 2 Swift 3 Swift 4 Swift 5 ! ⼆二进制不不兼容 = 需要重新编译才能运⾏行行 源码不不兼容 = 需要修改源码才能编译 ! ! ! ! 公开
Swift 5 ABI 稳定 Application Binary Interface 不不再会改动
Swift 5 ABI 稳定 iOS 12.1 或以前 iOS 12.2 或以后
App Size 改善 ~10MB
Apple ⾃自⼰己可以使⽤用 Swift 开发系统框架 第三⽅方开发者可以发布⼆二进制框架 (Swift 5.1) App 下载尺⼨寸减⼩小 加载速度变快…
ABI 稳定的意义
数据来源: https://www.benfrederickson.com/ranking-programming-languages-by-github-users/ GitHub Swift vs Objective-C
虽然⽤用的是 Swift 但写出来的是 Objective-C
Swift 的编程范式应该是怎样的
Swift 的编程范式应该是怎样的
SwiftUI
UIKit
完全区别于 UIKit 的全新范式 UIKit SwiftUI 基本思维 命令式 声明式 数据流 Target-Action
Notification Binding Reactive 基础类型 UIView class View protocol 常⻅见架构 MVC DSL 描述
None
Swift in LINE 年年度 2018/05 2019/05 语⾔言 40% Swift 60%
Objective-C 60% Swift 40% Objective-C Commit 12 万 14 万 代码⾏行行数 120 万 150 万 开发者⼈人数 ~100 ~100 * 以上数据均为概算
Swift in App Idea Demo Believer Application
Swift in App Idea Demo Believer Application
None
⽬目录 为什什么是⼀一⻔门好语⾔言 当前的处境和变化 在 Apple 平台以外的使⽤用 未来啊,你在哪⾥里里
Swift on Server
Swift ⼜又快⼜又安全, 只做客户端是不不是太浪费?
Swift Server Work Group (SSWG) SoS 项⽬目组
项⽬目 负责 SwiftNIO Apple Logging API Apple Metrics API Apple
Postgres Client Vapor Redis Client N/A HTTP Client SSWG APNS Clinet Vapor SoS 官⽅方筹划项⽬目
SwiftNIO Netty for Swift • 异步事件驱动 • ⾮非阻塞 IO •
基础的⽹网络底层协议实现 • Apple 开源
基于 SwiftNIO 的⽹网络框架 SwiftNIO Kitura-NIO Perfect-NIO
Real World SoS objc.io
Real World SoS vapor.code
Real World SoS mxcl/Canopy
开发效率 重构信⼼心 内存占⽤用 崩溃率 周边⽣生态 部署⼯工具 开发者数 现象级 app SoS
与其他⽅方案的优劣对⽐比
Swift on Server Idea Demo Believer Application
Swift on Web
⼩小孩⼦子才做选择, 前端后端 我全都要
任何可以使⽤用 JavaScript 来编写的应⽤用 最终会由 JavaScript 编写 — Atwood 定律律, 2007
将 Swift 编译成 JavaScript 有任何优势吗?
Swift → JavaScript 词法分析 语义分析 SIL ⽣生成 AST Swift 编译器器
SIL 未加⼯工 SIL 标准型 LLVM IR Swift Intermediate Language
Swift → JavaScript 词法分析 语义分析 SIL ⽣生成 AST Swift 编译器器
SIL 未加⼯工 SIL 标准型 JS Swift Intermediate Language
• 已有成熟类似⽅方案 (TypeScript 等) • 运⾏行行速度难堪重任 • 难以利利⽤用编译器器优化 • 缺乏
Swift 标准库 可⾏行行,但是...
软件开发也进⼊入了了拼爹时代
Apple Microsoft Google Mozilla
WebAssembly Apple Microsoft Google Mozilla
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
WebAssembly 是什什么 C C++ Rust Binary Web
WebAssembly 驱动的⾼高性能项⽬目
WebAssembly 驱动的⾼高性能项⽬目
WebAssembly 驱动的⾼高性能项⽬目 3D 游戏 在线编译 ⾳音视频处理理 加密/解密 AR/VR
WebAssembly 驱动的⾼高性能项⽬目 3D 游戏 在线编译 ⾳音视频处理理 加密/解密 AR/VR Windows/macOS/Linux
WebAssembly 是什什么 C C++ Rust Binary Web
将 LLVM bitcode 编译为 WebAssembly (.wasm)
词法分析 语义分析 AST LLVM IR C/C++ Emscripten wasm Clang 前端
LLVM BC emscripten 后端
WebAssembly 是什什么 C C++ Rust Binary Web
WebAssembly 是什什么 Binary Web
Swift → WebAssembly 词法分析 语义分析 SIL ⽣生成 AST Swift 前端
SIL 未加⼯工 SIL 标准型 LLVM IR Swift Intermediate Language
Swift → WebAssembly 词法分析 AST Swift 前端 LLVM IR Emscripten
wasm LLVM BC emscripten 后端 ……
Swift → WebAssembly 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 在 Swift ⼯工具链中集成 emscripten? 1. 为⼯工具链后端添加 WASM target 2. 禁⽤用不不⽀支持的⽅方法 3. WASM 版的 Swift 标准库 4. 构建正确的 LLVM bitcode
https://github.com/apple/swift/pull/24684 [Swift+WASM] initial support for compiling Swift to WebAssembly swiftwasm.org
⽤用 Swift 操作 DOM?
Swift DSL on HTML
Swift on Web Idea Demo Believer Application
Swift on AI
None
None
灵活易易学,⽣生态丰富 动态解释,难以优化
灵活易易学,“⽣生态丰富” 静态编译,“深层优化”
Python 协作
Call xxx from Swift @dynamicMemberLookup @dynamicCallable C API (Python, Ruby,
etc…) . . .
性能考虑 Graph Program Extraction Cloud TPU Google Colab Swift ⽀支持
Swift on AI Idea Demo Believer Application
Swift on IoT
None
Swift on ARM, Linux https://github.com/uraimo/buildSwiftOnARM
CPU:Cortex-A53 1.4GHz 内存:1GB 存储:SDCard 16GB+ 系统:Linux 价格:¥300 86x54 mm
nRF9160 Cortex-M33 64MHz 256 KB RAM 1 MB Flash LTE,
GPS, CryptoCell… ¥100 10x16mm CC2640 Cortex-M3 48MHz 20 KB RAM 128KB Flash 蓝⽛牙, AES-128 ¥25 7x7mm
- Swift 编译器器“应该”是不不可能的 - Swift 标准库也需要极度简化 - Swift 业务代码在 LLVM
IR 后 与 C (Clang) 得到的驱动 link 后进⾏行行部署 Swift on IoT Ref: Swifty Things: Programming the Internet of Things with Swift
Swift on IoT
Swift on IoT Idea Demo Believer Application
⽬目录 为什什么是是⼀一⻔门好语⾔言 当前的处境和变化 在 Apple 平台以外的使⽤用 未来啊,你在哪⾥里里
Swift 是⼀一⻔门通⽤用语⾔言 App 开发 新特性 SwiftUI ABI 稳定 周边⽣生态
Swift 在分歧中发展 脚本 IoT AI ⽹网⻚页 服务器器 … App 开发
None
道路路千万条,app 第⼀一条 ⻋车道请选好,逆⾏行行两⾏行行泪
THANKS! THANKS! THANKS