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
860
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
900
iOS Dev - The Dark Side
onevcat
0
110
面向协议编程与 Cocoa 的邂逅
onevcat
14
4.6k
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
120
Other Decks in Technology
See All in Technology
I tried the newly introduced certification "Applied Skills" on Microsoft Learn
mappie_kochi
0
270
CData Virtuality を活かせるキーシナリオと製品デモ
cdataj
0
350
今こそ変化対応力を向上させるとき 〜ログラスが FAST に挑戦する理由〜 / Why Loglass is Talking on the Challenge of Agile Framework FAST
shioyang
0
150
Semantic Kernel の Agent 機能試してみた!
okazuki
1
180
New Relicを活用したシステム監視の強化とオブザーバビリティ向上
sugoto911
1
110
組織デバイスのための効率的なアプリケーション更新戦略
kenchan0130
0
360
寒冷地稲作の歴史にみるコミュニティ
miu_crescent
2
120
Road to Single Activity Uncovered
yurihondo
0
100
LINE-ChatGPT 倫理問題を整理する全力肯定彼氏くん [LuC4]に訪れたサービス開始以来の最大の危機
o_ob
2
170
テクニカルライターのチームで「目標」をどう決めたか / MVV for a Team of Technical Writers
lycorptech_jp
PRO
3
130
普通の Web エンジニアのための様相論理入門 #yapcjapan / YAPC Hakodate 2024
ytaka23
7
1.6k
Databricks Appのご紹介
databricksjapan
0
390
Featured
See All Featured
Imperfection Machines: The Place of Print at Facebook
scottboms
264
13k
WebSockets: Embracing the real-time Web
robhawkes
59
7.4k
Why You Should Never Use an ORM
jnunemaker
PRO
53
9k
Build The Right Thing And Hit Your Dates
maggiecrowley
32
2.3k
Six Lessons from altMBA
skipperchong
26
3.4k
Robots, Beer and Maslow
schacon
PRO
157
8.2k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
43
6.5k
How to Think Like a Performance Engineer
csswizardry
17
1k
Making the Leap to Tech Lead
cromwellryan
131
8.9k
How to name files
jennybc
77
99k
The Pragmatic Product Professional
lauravandoore
31
6.2k
The Art of Programming - Codeland 2020
erikaheidi
51
13k
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