Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
今だからこそ語れる Swift の魅力
Search
サポーターズ
January 31, 2017
0
190
今だからこそ語れる Swift の魅力
サポーターズ
January 31, 2017
Tweet
Share
More Decks by サポーターズ
See All by サポーターズ
ざっくり理解するクラウドの基礎
supporterz_kyoto
0
220
Featured
See All Featured
Typedesign – Prime Four
hannesfritz
40
2.5k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
160
15k
Measuring & Analyzing Core Web Vitals
bluesmoon
5
190
What's in a price? How to price your products and services
michaelherold
244
12k
Writing Fast Ruby
sferik
628
61k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
1.2k
GraphQLの誤解/rethinking-graphql
sonatard
68
10k
Six Lessons from altMBA
skipperchong
27
3.5k
Agile that works and the tools we love
rasmusluckow
328
21k
Embracing the Ebb and Flow
colly
84
4.5k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.8k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
Transcript
今だからこそ語れる Swift の魅力 2017/1/31 サポーターズ勉強会@京都 漆原 明博 (@U_Akihir0)
自己紹介 • 社会人三年目 – サーバーエンジニア@京都 • Java with Spring boot
– 趣味で iOS アプリの開発 • TheWorld for iOS (Twitter クライアント) • Binder (SNS アプリ like 2ch) – 電気通信大学大学院卒 (‘14) • 研究 : JavaScript AOT JIT Compiler (with LLVM) – 就活ではサポーターズさんのお世話に! @U_Akihir0 uakihir0
何故今 Swift なのか? • 非常にポテンシャルの高い言語 – 記述力、実行速度、堅牢性等 • 破壊的な言語仕様の変更が一段落 –
2016/9 に Swift 3.0 がリリース • 勉強がしやすい環境が整っている – Web、書籍 等様々なコンテンツが存在 – 年末のアドベントカレンダーを終えてさらに充実!
Swift の記述力 • スクリプト言語のような簡潔な記述が可能
Swift の記述力 • スクリプト言語のような簡潔な記述が可能 – 型推論 • 案外これが様々な箇所に効いてくる • 変数定義の際に右辺の型は推論される
Swift の記述力 • スクリプト言語のような簡潔な記述が可能 – クロージャ • 簡潔な記述が可能で見通しの良いコードに 参考 :
Objective-C (Blocks)
Swift の記述力 • スクリプト言語のような簡潔な記述が可能 – 型推論+クロージャ
Swift の記述力 • スクリプト言語のような簡潔な記述が可能 – 型推論+クロージャ
Swift の記述力 • スクリプト言語のような簡潔な記述が可能 – 型推論+クロージャ
Swift の記述力 • スクリプト言語のような簡潔な記述が可能 – 型推論+クロージャ
Swift の記述力 • スクリプト言語のような簡潔な記述が可能 – 型推論+クロージャ
Swift の記述力 • スクリプト言語のような簡潔な記述が可能 – 演算子オーバーロード • 演算をカプセル化してコードをシンプルに e.g., 後置演算子を定義する例
Swift の記述力 • スクリプト言語のような簡潔な記述が可能 – エクステンション • 自然な形で欲しい機能の拡張が可能 e.g., 配列から特定の要素を削除
Swift の実行速度 • Swift は正しく書けば非常に高速に動作 – コンパイラバックエンドに LLVM を採用 (ObjC
も同様) • 様々な既存の最適化技術を適用可能 (例)
Link Time Optimization • リンク時に不要コードを検出して排除 – プログラム全体の最適化が可能に
Link Time Optimization • リンク時に不要コードを検出して排除 – プログラム全体の最適化が可能に
Link Time Optimization • リンク時に不要コードを検出して排除 – プログラム全体の最適化が可能に
Link Time Optimization • リンク時に不要コードを検出して排除 – プログラム全体の最適化が可能に
Profile Guided Optimization • 実行結果をもとに最適な制御グラフを構築 – 無駄な実行を減らすことができる
Profile Guided Optimization • 実行結果をもとに最適な制御グラフを構築 – 無駄な実行を減らすことができる
LLVM • 任意の言語に対応可能なコンパイラ基盤 (‘04) – Swift の作者が以前に作成していたもの • 現在は Apple
からテスラモーターズに転職 • LLVM-IR という中間内部表現 – Single Static Assignment (SSA) : 静的単一代入 – 多様で高度な様々な最適化パス
Swift のコンパイラアーキテクチャ • Swift コードは多段階にコンパイルされる Swift SIL LLVM-IR Objective-C Binary
SIL と LLVM-IR • SIL : Swift コンパイラにおける中間言語表現 – LLVM-IR
と非常に似ている言語仕様 • LLVM-IR + Swift の構文要素という雰囲気 • 多段階の最適化を実施 – SIL : Swift の言語に依存する最適化 – LLVM-IR : プログラミング言語全般における最適化
Swift の堅牢性 • Swift は正しく書けばバグが出にくい言語
Swift の堅牢性 • Swift は正しく書けばバグが出にくい言語 – Null 安全 • Null
が言語仕様上基本的に許容されていない • 近年 Null 安全の言語が急激に増えている – Swift, Kotlin, TypeScript (2.0), Hack, Rust ... • 様々な記事が出ているのでそこを参照 – null安全でない言語はもはやレガシー言語だ (2016/11) • http://qiita.com/koher/items/e4835bd429b88809ab33
Swift の堅牢性 • Swift は正しく書けばバグが出にくい言語 – 型に非常に厳密 • 型の暗黙的変換が存在せず意識的に記述する必要 –
変数がどの型かを意識してコーディングする必要
Swift 3.0 • 最後の大規模破壊的変更として 2016/9 に公開 – Swift らしい記述へ各種 API
の インターフェースが変更 – 各種文法的記法について変化が見られる箇所がある
Swift の勉強環境 • コミュニティの充実 – 京都でももっとこういう機会があればいいな • 書籍やネットの情報も充実 – アドベントカレンダーは良い情報共有の機会
– 詳解 Swift 第3版 が昨年末 に出たので読もう
しかし. . .
導入の前に • Swift は銀の弾丸ではない – 現状採用を見送っている会社も多い • ではまだ Objective-C が現役
• 仕様の不安定さが主な理由?
導入の前に • Swift は銀の弾丸ではない – 現状採用を見送っている会社も多い • ではまだ Objective-C が現役
• 仕様の不安定さが主な理由? Swift 3.0 の登場により状況は好転
Swift の学習コスト • 学習コストは決して安くない (私見) – プログラミング言語切り替えの丁度最中にいる • Swift のような言語仕様が今後もっと一般的になる?
– 他言語に慣れている故の難しさもある – 他言語からの移植コストも安くはない
Swift の学習コスト • 学習コストは決して安くない (私見) – プログラミング言語切り替えの丁度最中にいる • Swift のような言語仕様が今後もっと一般的になる?
– 他言語に慣れている故の難しさもある – 他言語からの移植コストも安くはない 場合によっては導入しない決断も必要
ここがツラいよ Swift さん • Null 安全 – Null 安全のプログラムを書くこと ≒
Null の可能性を全部考慮したものを書く → しっかりこなすことが案外簡単ではない – 副次的なイニシャライザについての制約 • プロパティーの変数をすべて埋めないといけない
ここがツラいよ Swift さん • プロトコル指向 – 機能面からオブジェクトを特徴付けする – 適当に言えば Java
の Interface で特徴付けする – これ自体は習得に時間がかかるものではないが. . .
ここがツラいよ Swift さん • プロトコル指向 – 機能面からオブジェクトを特徴付けする – 適当に言えば Java
の Interface で特徴付けする – これ自体は習得に時間がかかるものではないが. . . UIKit と一緒に使うとパラダイムが混同 (iOS 開発だと避けられない宿命)
ここがツラいよ Swift さん • コンパイラへのヒント – コンパイル、実行速度の面からプログラム中に コンパイラへのヒントを追加するパターンが多い • Xcode
でエラーになるし一見不要にも見える – let, var ぐらいは自動で判定して欲しい? – mutating、@escape、convenience . . .
ここがツラいよ Swift さん • GC への理解 – Swift ではメモリ管理の仕組みを知ることが必須 •
Java とかではそこまで強く意識する必要はない • Objective-C でも同様なので Swift 固有の話ではない – 参照カウント GC • 循環参照にならないように弱い参照を使う必要 – プログラマが意識的に使用する必要がある – どんなパターンで起こるかを知っておく必要
Swift の実装スタイル問題 • 自由ゆえに実装者によってスタイルが異なる – データ定義に クラス? 構造体? 列挙体?
Swift の実装スタイル問題 • 自由ゆえに実装者によってスタイルが異なる – データ定義に クラス? 構造体? 列挙体? –
複数の値の返り値に タプル? 構造体?
Swift の実装スタイル問題 • 自由ゆえに実装者によってスタイルが異なる – データ定義に クラス? 構造体? 列挙体? –
複数の値の返り値に タプル? 構造体? – オブジェクト指向? プロトコル指向?
Swift の実装スタイル問題 • 自由ゆえに実装者によってスタイルが異なる – データ定義に クラス? 構造体? 列挙体? –
複数の値の返り値に タプル? 構造体? – オブジェクト指向? プロトコル指向? – どこまで機能拡張を許容する? • エクステンション、演算子オーバーロード
Swift の実装スタイル問題 • 自由ゆえに実装者によってスタイルが異なる – データ定義に クラス? 構造体? 列挙体? –
複数の値の返り値に タプル? 構造体? – オブジェクト指向? プロトコル指向? – どこまで機能拡張を許容する? • エクステンション、演算子オーバーロード チーム開発の場合はまずルール作りを!
Swift の未来
広がる Swift の世界 • Swift はシステム言語を目指している – 決して Apple デバイス専用言語ではない!
– オープンソース化 (2015/12) • Mac だけでなく Linux でも動作をサポート • IBM が率先的に Swift で新しい試みを実施
サーバーサイド Swift • 色々な実装が出てきており戦国状態 – Rails みたいなコレだというものはまだない – Kitura (IBM)
– Vapor – Perfect – Swift 公式から上記の実装者集め公式に SS Swift の実装を進めていこうとする動きもある
まとめ • Swift はまだ発展途上だが、モダンで魅力的な 機能を多様に備えた勉強する価値のある言語 – みんなで Swift を盛り上げていきましょう!