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

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

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for サポーターズ サポーターズ
January 31, 2017
210

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

Avatar for サポーターズ

サポーターズ

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 の実装を進めていこうとする動きもある