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

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

サポーターズ
January 31, 2017
180

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

サポーターズ

January 31, 2017
Tweet

Transcript

  1. 自己紹介 • 社会人三年目 – サーバーエンジニア@京都 • Java with Spring boot

    – 趣味で iOS アプリの開発 • TheWorld for iOS (Twitter クライアント) • Binder (SNS アプリ like 2ch) – 電気通信大学大学院卒 (‘14) • 研究 : JavaScript AOT JIT Compiler (with LLVM) – 就活ではサポーターズさんのお世話に! @U_Akihir0 uakihir0
  2. 何故今 Swift なのか? • 非常にポテンシャルの高い言語 – 記述力、実行速度、堅牢性等 • 破壊的な言語仕様の変更が一段落 –

    2016/9 に Swift 3.0 がリリース • 勉強がしやすい環境が整っている – Web、書籍 等様々なコンテンツが存在 – 年末のアドベントカレンダーを終えてさらに充実!
  3. LLVM • 任意の言語に対応可能なコンパイラ基盤 (‘04) – Swift の作者が以前に作成していたもの • 現在は Apple

    からテスラモーターズに転職 • LLVM-IR という中間内部表現 – Single Static Assignment (SSA) : 静的単一代入 – 多様で高度な様々な最適化パス
  4. SIL と LLVM-IR • SIL : Swift コンパイラにおける中間言語表現 – LLVM-IR

    と非常に似ている言語仕様 • LLVM-IR + Swift の構文要素という雰囲気 • 多段階の最適化を実施 – SIL : Swift の言語に依存する最適化 – LLVM-IR : プログラミング言語全般における最適化
  5. Swift の堅牢性 • Swift は正しく書けばバグが出にくい言語 – Null 安全 • Null

    が言語仕様上基本的に許容されていない • 近年 Null 安全の言語が急激に増えている – Swift, Kotlin, TypeScript (2.0), Hack, Rust ... • 様々な記事が出ているのでそこを参照 – null安全でない言語はもはやレガシー言語だ (2016/11) • http://qiita.com/koher/items/e4835bd429b88809ab33
  6. Swift 3.0 • 最後の大規模破壊的変更として 2016/9 に公開 – Swift らしい記述へ各種 API

    の インターフェースが変更 – 各種文法的記法について変化が見られる箇所がある
  7. Swift の学習コスト • 学習コストは決して安くない (私見) – プログラミング言語切り替えの丁度最中にいる • Swift のような言語仕様が今後もっと一般的になる?

    – 他言語に慣れている故の難しさもある – 他言語からの移植コストも安くはない 場合によっては導入しない決断も必要
  8. ここがツラいよ Swift さん • Null 安全 – Null 安全のプログラムを書くこと ≒

    Null の可能性を全部考慮したものを書く → しっかりこなすことが案外簡単ではない – 副次的なイニシャライザについての制約 • プロパティーの変数をすべて埋めないといけない
  9. ここがツラいよ Swift さん • プロトコル指向 – 機能面からオブジェクトを特徴付けする – 適当に言えば Java

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

    の Interface で特徴付けする – これ自体は習得に時間がかかるものではないが. . . UIKit と一緒に使うとパラダイムが混同 (iOS 開発だと避けられない宿命)
  11. ここがツラいよ Swift さん • コンパイラへのヒント – コンパイル、実行速度の面からプログラム中に コンパイラへのヒントを追加するパターンが多い • Xcode

    でエラーになるし一見不要にも見える – let, var ぐらいは自動で判定して欲しい? – mutating、@escape、convenience . . .
  12. ここがツラいよ Swift さん • GC への理解 – Swift ではメモリ管理の仕組みを知ることが必須 •

    Java とかではそこまで強く意識する必要はない • Objective-C でも同様なので Swift 固有の話ではない – 参照カウント GC • 循環参照にならないように弱い参照を使う必要 – プログラマが意識的に使用する必要がある – どんなパターンで起こるかを知っておく必要
  13. Swift の実装スタイル問題 • 自由ゆえに実装者によってスタイルが異なる – データ定義に クラス? 構造体? 列挙体? –

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

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

    複数の値の返り値に タプル? 構造体? – オブジェクト指向? プロトコル指向? – どこまで機能拡張を許容する? • エクステンション、演算子オーバーロード チーム開発の場合はまずルール作りを!
  16. 広がる Swift の世界 • Swift はシステム言語を目指している – 決して Apple デバイス専用言語ではない!

    – オープンソース化 (2015/12) • Mac だけでなく Linux でも動作をサポート • IBM が率先的に Swift で新しい試みを実施
  17. サーバーサイド Swift • 色々な実装が出てきており戦国状態 – Rails みたいなコレだというものはまだない – Kitura (IBM)

    – Vapor – Perfect – Swift 公式から上記の実装者集め公式に SS Swift の実装を進めていこうとする動きもある