Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

Wei Wang

June 21, 2019
Tweet

More Decks by Wei Wang

Other Decks in Technology

Transcript

  1. 在分歧中发展
    2019,我们能⽤用 Swift 做什什么
    王 巍 (@onevcat)
    LINE ⾼高级软件⼯工程师

    View Slide

  2. ⾃自我介绍
    王 巍,@onevcat

    iOS Developer - 2010~

    Swift - 2014~

    Kingfisher,ObjC 中国组织

    LINE Corp ⾼高级软件开发⼯工程师

    负责开发者关系及开源事业相关 (私下是全栈⼲干⼯工程师)

    View Slide

  3. WWDC 2014

    View Slide

  4. LLVM
    Chris Lattner

    View Slide

  5. View Slide

  6. Objective-C = iOS/macOS

    View Slide

  7. Swift = iOS/macOS?

    View Slide

  8. ⽬目录 为什什么是⼀一⻔门好语⾔言

    当前的处境和变化

    在 Apple 平台以外的使⽤用

    未来啊,你在哪⾥里里

    View Slide

  9. ⽬目录 为什什么是⼀一⻔门好语⾔言

    当前的处境和变化

    在 Apple 平台以外的使⽤用

    未来啊,你在哪⾥里里

    View Slide

  10. Fast Modern Safe

    View Slide

  11. 快速、现代、安全,但…为什什么?
    知其然,更更要知其所以然

    View Slide

  12. 最主要原因:有个好爹
    软件开发,特别是编程语⾔言开发,已经进⼊入了了拼爹时代

    View Slide

  13. 专⻔门的编译优化
    词法分析 语义分析
    AST
    Objective-C 编译器器
    LLVM
    IR

    View Slide

  14. 专⻔门的编译优化
    词法分析 语义分析 SIL ⽣生成
    AST
    Swift 编译器器
    SIL
    未加⼯工
    SIL
    标准型
    LLVM
    IR
    Swift Intermediate Language
    快速

    View Slide

  15. 专⻔门的编译优化
    SIL ⽣生成 SIL
    未加⼯工
    SIL
    标准型
    Swift Intermediate Language
    • 强制内联 (mandatory inline)

    • 基于 protocol 的泛型特化 (specification)

    • class 和 protocol 的去虚拟化 (devirtualization)

    • 编译时的边界检查

    • ….
    快速

    View Slide

  16. Value Type 和 Immutable 安全

    View Slide

  17. Copy on Write 快速
    friends

    View Slide

  18. Copy on Write 快速
    sayHello(to: friends)
    friends
    guests

    View Slide

  19. Copy on Write 快速
    sayHello(to: friends)
    friends
    guests

    View Slide

  20. Copy on Write 快速
    sayHello(to: friends)
    friends
    guests
    Copy

    View Slide

  21. 现代
    ⾼高效的函数式编程

    View Slide

  22. 现代
    ⾼高效的函数式编程
    运⾏行行时间 (s)
    0 0.375 0.75 1.125 1.5
    函数式
    命令式
    上⻚页代码以及等同的命令式程序对⽐比,循环 100,000 次,-O 编译

    View Slide

  23. 图⽚片来源:知乎⽤用户 题叶

    View Slide

  24. 完全避免 nil 崩溃 安全

    View Slide

  25. 完全避免 nil 崩溃 安全
    It was the invention of the null reference in 1965.

    I call it my billion-dollar mistake.
    查尔斯·安东尼·理理查德·霍尔爵⼠士:

    View Slide

  26. Swift 是⼀一⻔门优秀的语⾔言吗?
    毫⽆无疑问

    View Slide

  27. ⽬目录 为什什么是⼀一⻔门好语⾔言

    当前的处境和变化

    在 Apple 平台以外的使⽤用

    未来啊,你在哪⾥里里

    View Slide

  28. View Slide

  29. 我这⼏几年年每年年都学了了⼀一⻔门新语⾔言,它们分别是

    Swift 1,Swift 2,Swift 3,Swift 4…

    View Slide

  30. Swift 版本变迁
    2014
    Swift ß
    2015 2016 2017 2018 2019
    Swift 1 Swift 2 Swift 3 Swift 4 Swift 5
    ! ⼆二进制不不兼容 = 需要重新编译才能运⾏行行
    源码不不兼容 = 需要修改源码才能编译
    ! ! ! !
    公开

    View Slide

  31. Swift 5 ABI 稳定
    Application Binary Interface
    不不再会改动

    View Slide

  32. Swift 5 ABI 稳定
    iOS 12.1 或以前 iOS 12.2 或以后
    App Size 改善 ~10MB

    View Slide

  33. Apple ⾃自⼰己可以使⽤用 Swift 开发系统框架

    第三⽅方开发者可以发布⼆二进制框架 (Swift 5.1)

    App 下载尺⼨寸减⼩小

    加载速度变快…
    ABI 稳定的意义

    View Slide

  34. 数据来源: https://www.benfrederickson.com/ranking-programming-languages-by-github-users/
    GitHub Swift vs Objective-C

    View Slide

  35. 虽然⽤用的是 Swift
    但写出来的是 Objective-C

    View Slide

  36. Swift 的编程范式应该是怎样的

    View Slide

  37. Swift 的编程范式应该是怎样的

    View Slide

  38. SwiftUI

    View Slide

  39. UIKit

    View Slide

  40. 完全区别于 UIKit 的全新范式
    UIKit SwiftUI
    基本思维 命令式 声明式
    数据流 Target-Action
    Notification
    Binding
    Reactive
    基础类型 UIView class View protocol
    常⻅见架构 MVC DSL 描述

    View Slide

  41. View Slide

  42. Swift in LINE
    年年度 2018/05 2019/05
    语⾔言 40% Swift

    60% Objective-C
    60% Swift

    40% Objective-C
    Commit 12 万 14 万
    代码⾏行行数 120 万 150 万
    开发者⼈人数 ~100 ~100
    * 以上数据均为概算

    View Slide

  43. Swift in App
    Idea Demo Believer Application

    View Slide

  44. Swift in App
    Idea Demo Believer Application

    View Slide

  45. View Slide

  46. ⽬目录 为什什么是⼀一⻔门好语⾔言

    当前的处境和变化

    在 Apple 平台以外的使⽤用

    未来啊,你在哪⾥里里

    View Slide

  47. Swift on Server

    View Slide

  48. Swift ⼜又快⼜又安全,
    只做客户端是不不是太浪费?

    View Slide

  49. Swift Server Work Group (SSWG)
    SoS 项⽬目组

    View Slide

  50. 项⽬目 负责
    SwiftNIO Apple
    Logging API Apple
    Metrics API Apple
    Postgres Client Vapor
    Redis Client N/A
    HTTP Client SSWG
    APNS Clinet Vapor
    SoS 官⽅方筹划项⽬目

    View Slide

  51. SwiftNIO
    Netty for Swift
    • 异步事件驱动

    • ⾮非阻塞 IO

    • 基础的⽹网络底层协议实现

    • Apple 开源

    View Slide

  52. 基于 SwiftNIO 的⽹网络框架
    SwiftNIO
    Kitura-NIO
    Perfect-NIO

    View Slide

  53. Real World SoS
    objc.io

    View Slide

  54. Real World SoS
    vapor.code

    View Slide

  55. Real World SoS
    mxcl/Canopy

    View Slide

  56. 开发效率
    重构信⼼心
    内存占⽤用
    崩溃率
    周边⽣生态
    部署⼯工具
    开发者数
    现象级 app
    SoS 与其他⽅方案的优劣对⽐比

    View Slide

  57. Swift on Server
    Idea Demo Believer Application

    View Slide

  58. Swift on Web

    View Slide

  59. ⼩小孩⼦子才做选择,
    前端后端
    我全都要

    View Slide

  60. 任何可以使⽤用 JavaScript 来编写的应⽤用

    最终会由 JavaScript 编写
    — Atwood 定律律, 2007

    View Slide

  61. 将 Swift 编译成 JavaScript 有任何优势吗?

    View Slide

  62. Swift → JavaScript
    词法分析 语义分析 SIL ⽣生成
    AST
    Swift 编译器器
    SIL
    未加⼯工
    SIL
    标准型
    LLVM
    IR
    Swift Intermediate Language

    View Slide

  63. Swift → JavaScript
    词法分析 语义分析 SIL ⽣生成
    AST
    Swift 编译器器
    SIL
    未加⼯工
    SIL
    标准型
    JS
    Swift Intermediate Language

    View Slide

  64. • 已有成熟类似⽅方案 (TypeScript 等)

    • 运⾏行行速度难堪重任

    • 难以利利⽤用编译器器优化

    • 缺乏 Swift 标准库
    可⾏行行,但是...

    View Slide

  65. 软件开发也进⼊入了了拼爹时代

    View Slide

  66. Apple Microsoft Google Mozilla

    View Slide

  67. WebAssembly
    Apple
    Microsoft
    Google
    Mozilla

    View Slide

  68. 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

    View Slide

  69. WebAssembly 是什什么
    C
    C++
    Rust
    Binary Web

    View Slide

  70. WebAssembly 驱动的⾼高性能项⽬目

    View Slide

  71. WebAssembly 驱动的⾼高性能项⽬目

    View Slide

  72. WebAssembly 驱动的⾼高性能项⽬目
    3D 游戏 在线编译 ⾳音视频处理理 加密/解密 AR/VR

    View Slide

  73. WebAssembly 驱动的⾼高性能项⽬目
    3D 游戏
    在线编译
    ⾳音视频处理理
    加密/解密
    AR/VR
    Windows/macOS/Linux

    View Slide

  74. WebAssembly 是什什么
    C
    C++
    Rust
    Binary Web

    View Slide

  75. 将 LLVM bitcode 编译为
    WebAssembly (.wasm)

    View Slide

  76. 词法分析 语义分析
    AST LLVM
    IR
    C/C++ Emscripten wasm
    Clang 前端
    LLVM
    BC
    emscripten 后端

    View Slide

  77. WebAssembly 是什什么
    C
    C++
    Rust
    Binary Web

    View Slide

  78. WebAssembly 是什什么
    Binary Web

    View Slide

  79. Swift → WebAssembly
    词法分析 语义分析 SIL ⽣生成
    AST
    Swift 前端
    SIL
    未加⼯工
    SIL
    标准型
    LLVM
    IR
    Swift Intermediate Language

    View Slide

  80. Swift → WebAssembly
    词法分析 AST
    Swift 前端
    LLVM
    IR
    Emscripten wasm
    LLVM
    BC
    emscripten 后端
    ……

    View Slide

  81. 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

    View Slide

  82. https://github.com/apple/swift/pull/24684
    [Swift+WASM] initial support for compiling Swift to WebAssembly
    swiftwasm.org

    View Slide

  83. ⽤用 Swift 操作 DOM?

    View Slide

  84. Swift DSL on HTML

    View Slide

  85. Swift on Web
    Idea Demo Believer Application

    View Slide

  86. Swift on AI

    View Slide

  87. View Slide

  88. View Slide

  89. 灵活易易学,⽣生态丰富
    动态解释,难以优化

    View Slide

  90. 灵活易易学,“⽣生态丰富”
    静态编译,“深层优化”

    View Slide

  91. Python 协作

    View Slide

  92. Call xxx from Swift
    @dynamicMemberLookup
    @dynamicCallable
    C API
    (Python, Ruby,
    etc…)
    .
    .
    .

    View Slide

  93. 性能考虑
    Graph Program Extraction

    Cloud TPU

    Google Colab Swift ⽀支持

    View Slide

  94. Swift on AI
    Idea Demo Believer Application

    View Slide

  95. Swift on IoT

    View Slide

  96. View Slide

  97. Swift on ARM, Linux
    https://github.com/uraimo/buildSwiftOnARM

    View Slide

  98. CPU:Cortex-A53 1.4GHz

    内存:1GB

    存储:SDCard 16GB+

    系统:Linux
    价格:¥300
    86x54 mm

    View Slide

  99. 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

    View Slide

  100. - Swift 编译器器“应该”是不不可能的

    - Swift 标准库也需要极度简化

    - Swift 业务代码在 LLVM IR 后

    与 C (Clang) 得到的驱动 link 后进⾏行行部署
    Swift on IoT
    Ref: Swifty Things: Programming the Internet of Things with Swift

    View Slide

  101. Swift on IoT

    View Slide

  102. Swift on IoT
    Idea Demo Believer Application

    View Slide

  103. ⽬目录 为什什么是是⼀一⻔门好语⾔言

    当前的处境和变化

    在 Apple 平台以外的使⽤用

    未来啊,你在哪⾥里里

    View Slide

  104. Swift 是⼀一⻔门通⽤用语⾔言
    App 开发
    新特性
    SwiftUI
    ABI 稳定
    周边⽣生态

    View Slide

  105. Swift 在分歧中发展
    脚本
    IoT
    AI
    ⽹网⻚页
    服务器器 …
    App 开发

    View Slide

  106. View Slide

  107. 道路路千万条,app 第⼀一条

    ⻋车道请选好,逆⾏行行两⾏行行泪

    View Slide

  108. THANKS!
    THANKS!
    THANKS

    View Slide