3/2 SwiftのPointy Bits #tryswiftconf
try!Swiftのセッションまとめシリーズです。Nate Cookさんの「Swift’s Pointy Bits」についての記事になります。
資料
スライド共有サービスには上がっていないようです。try!Swift2017のslackの#slideには上がっているので、そちらをご参照ください。
内容
- いろんなポインタがあって、どのように機能するのかの話
- Swiftを安全にしているのは何なのか
- 安全はどういう意味?
- 絶対にクラッシュしないこと?
- オプショナルが大きな役割を果たしている
- 安全はどういう意味?
let ages = [13.3, 17.5, 18.9, 21.2] let firstPlusOne = ages.first! + 1
- 上記の場合の安全策は?
- 配列が空だとクラッシュする
- force unwrapするとクラッシュする
- 数値を0で割るとクラッシュする
let ages = [13.3, 17.5, 18.9, 21.2] let last = ages[4]
- 上記のコードの場合、存在しないindexを参照しているのでクラッシュする
- こんな言語が安全なのか?
- Swiftの安全性はクラッシュから守るという意味ではないのか、では何なのか
- 逆に、クラッシュしないとどうなるか
- プログラムに問題が発生してもわからない
- つまり、Swiftの安全性とは予期せぬふるまいから守ってくれること
- 他の形で安全性を担保したい時
- Unsafeを使用する
- 言語が提供する安全性を放棄して自分で書く
- unsafeが付いているとイラッとするけど諦めて自分で責任を追う
- まずメモリそのものをみてみる
- メモリは型と関数で占められる
- 1と0でいっぱいになってしまうので8ずつのグループにする16新法へ
- 各行は8バイト、もしくは64ビット
- メモリの全ての場所には値がある
- アドレスも16進数
- 各行は+8になっている
- unsafeポインタをを使うと値そのものではなくアドレスへの参照をする
- ポインタは値そのものではない
- 4つのポインタ型がある
- UnsafePointerTypeをどのような時に使うか
- CのAPIを使う
- ※スライド参照
- バブルソート
- パフォーマンスを得ることができる
- ポインタの誤用例
- ポインタをエスケープする
- Inplicit versionなしで使用しない
Q&A
その他このトークに関する情報源
- SwiftのPointy Bits | try! Swift Tokyo 2017 #tryswiftconf Day1-3 聞き起こし - niwatakoのはてなブログ
- [速報レポート] try! Swift TOKYO 2017 1日目 午前II #tryswiftconf | Developers.IO
- try! Swift 2017 Tokyo に参加してきた - 2. 1日目 - My Favorite Things - Coding or die.