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

今だからこそ語れる Swift の魅力

サポーターズ
January 31, 2017
170

今だからこそ語れる Swift の魅力

サポーターズ

January 31, 2017
Tweet

Transcript

  1. 今だからこそ語れる
    Swift の魅力
    2017/1/31 サポーターズ勉強会@京都
    漆原 明博 (@U_Akihir0)

    View Slide

  2. 自己紹介
    ● 社会人三年目
    – サーバーエンジニア@京都
    ● Java with Spring boot
    – 趣味で iOS アプリの開発
    ● TheWorld for iOS (Twitter クライアント)
    ● Binder (SNS アプリ like 2ch)
    – 電気通信大学大学院卒 (‘14)
    ● 研究 : JavaScript AOT JIT Compiler (with LLVM)
    – 就活ではサポーターズさんのお世話に!
    @U_Akihir0 uakihir0

    View Slide

  3. 何故今 Swift なのか?
    ● 非常にポテンシャルの高い言語
    – 記述力、実行速度、堅牢性等
    ● 破壊的な言語仕様の変更が一段落
    – 2016/9 に Swift 3.0 がリリース
    ● 勉強がしやすい環境が整っている
    – Web、書籍 等様々なコンテンツが存在
    – 年末のアドベントカレンダーを終えてさらに充実!

    View Slide

  4. Swift の記述力
    ● スクリプト言語のような簡潔な記述が可能

    View Slide

  5. Swift の記述力
    ● スクリプト言語のような簡潔な記述が可能
    – 型推論
    ● 案外これが様々な箇所に効いてくる
    ● 変数定義の際に右辺の型は推論される

    View Slide

  6. Swift の記述力
    ● スクリプト言語のような簡潔な記述が可能
    – クロージャ
    ● 簡潔な記述が可能で見通しの良いコードに
    参考 : Objective-C (Blocks)

    View Slide

  7. Swift の記述力
    ● スクリプト言語のような簡潔な記述が可能
    – 型推論+クロージャ

    View Slide

  8. Swift の記述力
    ● スクリプト言語のような簡潔な記述が可能
    – 型推論+クロージャ

    View Slide

  9. Swift の記述力
    ● スクリプト言語のような簡潔な記述が可能
    – 型推論+クロージャ

    View Slide

  10. Swift の記述力
    ● スクリプト言語のような簡潔な記述が可能
    – 型推論+クロージャ

    View Slide

  11. Swift の記述力
    ● スクリプト言語のような簡潔な記述が可能
    – 型推論+クロージャ

    View Slide

  12. Swift の記述力
    ● スクリプト言語のような簡潔な記述が可能
    – 演算子オーバーロード
    ● 演算をカプセル化してコードをシンプルに
    e.g., 後置演算子を定義する例

    View Slide

  13. Swift の記述力
    ● スクリプト言語のような簡潔な記述が可能
    – エクステンション
    ● 自然な形で欲しい機能の拡張が可能
    e.g., 配列から特定の要素を削除

    View Slide

  14. Swift の実行速度
    ● Swift は正しく書けば非常に高速に動作
    – コンパイラバックエンドに LLVM を採用 (ObjC も同様)
    ● 様々な既存の最適化技術を適用可能
    (例)

    View Slide

  15. Link Time Optimization
    ● リンク時に不要コードを検出して排除
    – プログラム全体の最適化が可能に

    View Slide

  16. Link Time Optimization
    ● リンク時に不要コードを検出して排除
    – プログラム全体の最適化が可能に

    View Slide

  17. Link Time Optimization
    ● リンク時に不要コードを検出して排除
    – プログラム全体の最適化が可能に

    View Slide

  18. Link Time Optimization
    ● リンク時に不要コードを検出して排除
    – プログラム全体の最適化が可能に

    View Slide

  19. Profile Guided Optimization
    ● 実行結果をもとに最適な制御グラフを構築
    – 無駄な実行を減らすことができる

    View Slide

  20. Profile Guided Optimization
    ● 実行結果をもとに最適な制御グラフを構築
    – 無駄な実行を減らすことができる

    View Slide

  21. LLVM
    ● 任意の言語に対応可能なコンパイラ基盤 (‘04)
    – Swift の作者が以前に作成していたもの
    ● 現在は Apple からテスラモーターズに転職
    ● LLVM-IR という中間内部表現
    – Single Static Assignment (SSA) : 静的単一代入
    – 多様で高度な様々な最適化パス

    View Slide

  22. Swift のコンパイラアーキテクチャ
    ● Swift コードは多段階にコンパイルされる
    Swift
    SIL
    LLVM-IR
    Objective-C
    Binary

    View Slide

  23. SIL と LLVM-IR
    ● SIL : Swift コンパイラにおける中間言語表現
    – LLVM-IR と非常に似ている言語仕様
    ● LLVM-IR + Swift の構文要素という雰囲気
    ● 多段階の最適化を実施
    – SIL : Swift の言語に依存する最適化
    – LLVM-IR : プログラミング言語全般における最適化

    View Slide

  24. Swift の堅牢性
    ● Swift は正しく書けばバグが出にくい言語

    View Slide

  25. Swift の堅牢性
    ● Swift は正しく書けばバグが出にくい言語
    – Null 安全
    ● Null が言語仕様上基本的に許容されていない
    ● 近年 Null 安全の言語が急激に増えている
    – Swift, Kotlin, TypeScript (2.0), Hack, Rust ...
    ● 様々な記事が出ているのでそこを参照
    – null安全でない言語はもはやレガシー言語だ (2016/11)
    ● http://qiita.com/koher/items/e4835bd429b88809ab33

    View Slide

  26. Swift の堅牢性
    ● Swift は正しく書けばバグが出にくい言語
    – 型に非常に厳密
    ● 型の暗黙的変換が存在せず意識的に記述する必要
    – 変数がどの型かを意識してコーディングする必要

    View Slide

  27. Swift 3.0
    ● 最後の大規模破壊的変更として 2016/9 に公開
    – Swift らしい記述へ各種 API の インターフェースが変更
    – 各種文法的記法について変化が見られる箇所がある

    View Slide

  28. Swift の勉強環境
    ● コミュニティの充実
    – 京都でももっとこういう機会があればいいな
    ● 書籍やネットの情報も充実
    – アドベントカレンダーは良い情報共有の機会
    – 詳解 Swift 第3版 が昨年末
    に出たので読もう

    View Slide

  29. しかし. . .

    View Slide

  30. 導入の前に
    ● Swift は銀の弾丸ではない
    – 現状採用を見送っている会社も多い
    ● ではまだ Objective-C が現役
    ● 仕様の不安定さが主な理由?

    View Slide

  31. 導入の前に
    ● Swift は銀の弾丸ではない
    – 現状採用を見送っている会社も多い
    ● ではまだ Objective-C が現役
    ● 仕様の不安定さが主な理由?
    Swift 3.0 の登場により状況は好転

    View Slide

  32. Swift の学習コスト
    ● 学習コストは決して安くない (私見)
    – プログラミング言語切り替えの丁度最中にいる
    ● Swift のような言語仕様が今後もっと一般的になる?
    – 他言語に慣れている故の難しさもある
    – 他言語からの移植コストも安くはない

    View Slide

  33. Swift の学習コスト
    ● 学習コストは決して安くない (私見)
    – プログラミング言語切り替えの丁度最中にいる
    ● Swift のような言語仕様が今後もっと一般的になる?
    – 他言語に慣れている故の難しさもある
    – 他言語からの移植コストも安くはない
    場合によっては導入しない決断も必要

    View Slide

  34. ここがツラいよ Swift さん
    ● Null 安全
    – Null 安全のプログラムを書くこと
    ≒ Null の可能性を全部考慮したものを書く
    → しっかりこなすことが案外簡単ではない
    – 副次的なイニシャライザについての制約
    ● プロパティーの変数をすべて埋めないといけない

    View Slide

  35. ここがツラいよ Swift さん
    ● プロトコル指向
    – 機能面からオブジェクトを特徴付けする
    – 適当に言えば Java の Interface で特徴付けする
    – これ自体は習得に時間がかかるものではないが. . .

    View Slide

  36. ここがツラいよ Swift さん
    ● プロトコル指向
    – 機能面からオブジェクトを特徴付けする
    – 適当に言えば Java の Interface で特徴付けする
    – これ自体は習得に時間がかかるものではないが. . .
    UIKit と一緒に使うとパラダイムが混同
    (iOS 開発だと避けられない宿命)

    View Slide

  37. ここがツラいよ Swift さん
    ● コンパイラへのヒント
    – コンパイル、実行速度の面からプログラム中に
    コンパイラへのヒントを追加するパターンが多い
    ● Xcode でエラーになるし一見不要にも見える
    – let, var ぐらいは自動で判定して欲しい?
    – mutating、@escape、convenience . . .

    View Slide

  38. ここがツラいよ Swift さん
    ● GC への理解
    – Swift ではメモリ管理の仕組みを知ることが必須
    ● Java とかではそこまで強く意識する必要はない
    ● Objective-C でも同様なので Swift 固有の話ではない
    – 参照カウント GC
    ● 循環参照にならないように弱い参照を使う必要
    – プログラマが意識的に使用する必要がある
    – どんなパターンで起こるかを知っておく必要

    View Slide

  39. Swift の実装スタイル問題
    ● 自由ゆえに実装者によってスタイルが異なる
    – データ定義に クラス? 構造体? 列挙体?

    View Slide

  40. Swift の実装スタイル問題
    ● 自由ゆえに実装者によってスタイルが異なる
    – データ定義に クラス? 構造体? 列挙体?
    – 複数の値の返り値に タプル? 構造体?

    View Slide

  41. Swift の実装スタイル問題
    ● 自由ゆえに実装者によってスタイルが異なる
    – データ定義に クラス? 構造体? 列挙体?
    – 複数の値の返り値に タプル? 構造体?
    – オブジェクト指向? プロトコル指向?

    View Slide

  42. Swift の実装スタイル問題
    ● 自由ゆえに実装者によってスタイルが異なる
    – データ定義に クラス? 構造体? 列挙体?
    – 複数の値の返り値に タプル? 構造体?
    – オブジェクト指向? プロトコル指向?
    – どこまで機能拡張を許容する?
    ● エクステンション、演算子オーバーロード

    View Slide

  43. Swift の実装スタイル問題
    ● 自由ゆえに実装者によってスタイルが異なる
    – データ定義に クラス? 構造体? 列挙体?
    – 複数の値の返り値に タプル? 構造体?
    – オブジェクト指向? プロトコル指向?
    – どこまで機能拡張を許容する?
    ● エクステンション、演算子オーバーロード
    チーム開発の場合はまずルール作りを!

    View Slide

  44. Swift の未来

    View Slide

  45. 広がる Swift の世界
    ● Swift はシステム言語を目指している
    – 決して Apple デバイス専用言語ではない!
    – オープンソース化 (2015/12)
    ● Mac だけでなく Linux でも動作をサポート
    ● IBM が率先的に Swift で新しい試みを実施

    View Slide

  46. サーバーサイド Swift
    ● 色々な実装が出てきており戦国状態
    – Rails みたいなコレだというものはまだない
    – Kitura (IBM)
    – Vapor
    – Perfect
    – Swift 公式から上記の実装者集め公式に SS Swift
    の実装を進めていこうとする動きもある

    View Slide

  47. まとめ
    ● Swift はまだ発展途上だが、モダンで魅力的な
    機能を多様に備えた勉強する価値のある言語
    – みんなで Swift を盛り上げていきましょう!

    View Slide