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
880
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.8k
从 Swift 到机器学习
onevcat
2
920
iOS Dev - The Dark Side
onevcat
0
110
面向协议编程与 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
170
Unity Memory
onevcat
0
130
Other Decks in Technology
See All in Technology
ハイパーパラメータチューニングって何をしているの
toridori_dev
0
140
これまでの計測・開発・デプロイ方法全部見せます! / Findy ISUCON 2024-11-14
tohutohu
3
360
Microsoft MVPになる前、なってから/Fukuoka_Tech_Women_Community_1_baba
nina01
0
190
iOS/Androidで同じUI体験をネ イティブで作成する際に気をつ けたい落とし穴
fumiyasac0921
1
110
【Startup CTO of the Year 2024 / Audience Award】アセンド取締役CTO 丹羽健
niwatakeru
0
820
リンクアンドモチベーション ソフトウェアエンジニア向け紹介資料 / Introduction to Link and Motivation for Software Engineers
lmi
4
300k
Why App Signing Matters for Your Android Apps - Android Bangkok Conference 2024
akexorcist
0
120
透過型SMTPプロキシによる送信メールの可観測性向上: Update Edition / Improved observability of outgoing emails with transparent smtp proxy: Update edition
linyows
2
210
オープンソースAIとは何か? --「オープンソースAIの定義 v1.0」詳細解説
shujisado
3
420
SREによる隣接領域への越境とその先の信頼性
shonansurvivors
2
510
dev 補講: プロダクトセキュリティ / Product security overview
wa6sn
1
2.3k
B2B SaaSから見た最近のC#/.NETの進化
sansantech
PRO
0
660
Featured
See All Featured
ReactJS: Keep Simple. Everything can be a component!
pedronauck
665
120k
Building Better People: How to give real-time feedback that sticks.
wjessup
364
19k
How to train your dragon (web standard)
notwaldorf
88
5.7k
Faster Mobile Websites
deanohume
305
30k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
25
1.8k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
246
1.3M
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
16
2.1k
Fantastic passwords and where to find them - at NoRuKo
philnash
50
2.9k
A designer walks into a library…
pauljervisheath
203
24k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
93
16k
Side Projects
sachag
452
42k
Art, The Web, and Tiny UX
lynnandtonic
297
20k
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