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. ⾃自我介绍 王 巍,@onevcat iOS Developer - 2010~ Swift - 2014~

    Kingfisher,ObjC 中国组织 LINE Corp ⾼高级软件开发⼯工程师 负责开发者关系及开源事业相关 (私下是全栈⼲干⼯工程师)
  2. 专⻔门的编译优化 SIL ⽣生成 SIL 未加⼯工 SIL 标准型 Swift Intermediate Language

    • 强制内联 (mandatory inline) • 基于 protocol 的泛型特化 (specification) • class 和 protocol 的去虚拟化 (devirtualization) • 编译时的边界检查 • …. 快速
  3. 现代 ⾼高效的函数式编程 运⾏行行时间 (s) 0 0.375 0.75 1.125 1.5 函数式

    命令式 上⻚页代码以及等同的命令式程序对⽐比,循环 100,000 次,-O 编译
  4. 完全避免 nil 崩溃 安全 It was the invention of the

    null reference in 1965. I call it my billion-dollar mistake. 查尔斯·安东尼·理理查德·霍尔爵⼠士: “
  5. Swift 版本变迁 2014 Swift ß 2015 2016 2017 2018 2019

    Swift 1 Swift 2 Swift 3 Swift 4 Swift 5 ! ⼆二进制不不兼容 = 需要重新编译才能运⾏行行 源码不不兼容 = 需要修改源码才能编译 ! ! ! ! 公开
  6. 完全区别于 UIKit 的全新范式 UIKit SwiftUI 基本思维 命令式 声明式 数据流 Target-Action

    Notification Binding Reactive 基础类型 UIView class View protocol 常⻅见架构 MVC DSL 描述
  7. Swift in LINE 年年度 2018/05 2019/05 语⾔言 40% Swift 60%

    Objective-C 60% Swift 40% Objective-C Commit 12 万 14 万 代码⾏行行数 120 万 150 万 开发者⼈人数 ~100 ~100 * 以上数据均为概算
  8. 项⽬目 负责 SwiftNIO Apple Logging API Apple Metrics API Apple

    Postgres Client Vapor Redis Client N/A HTTP Client SSWG APNS Clinet Vapor SoS 官⽅方筹划项⽬目
  9. SwiftNIO Netty for Swift • 异步事件驱动 • ⾮非阻塞 IO •

    基础的⽹网络底层协议实现 • Apple 开源
  10. Swift → JavaScript 词法分析 语义分析 SIL ⽣生成 AST Swift 编译器器

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

    SIL 未加⼯工 SIL 标准型 JS Swift Intermediate Language
  12. 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
  13. Swift → WebAssembly 词法分析 语义分析 SIL ⽣生成 AST Swift 前端

    SIL 未加⼯工 SIL 标准型 LLVM IR Swift Intermediate Language
  14. 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
  15. 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
  16. - Swift 编译器器“应该”是不不可能的 - Swift 标准库也需要极度简化 - Swift 业务代码在 LLVM

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