べにやまぶろぐ

技術寄りの話を書くつもり

JTF2014「Swift code in Swift」の聴講メモ #techfesta

インフラの話が大多数を占めていた JTF2014 の中にあって若干異彩を放っていたのがこちらの swift セッションでした。個人的には swift 名前しかワカンネ状態だったのでこれはとばかりに飛び込んでみたら今回の会場だった産業技術大学院大学の教授の講演で驚きました。終始ノリの良い楽しいセッションでした。

個人的に響いたこと
  • Hack での PHP 拡張と Swift の機能強化で似ている点が結構ある
    • nil を許すかどうか ? などで明示する optional value や Generics など
  • Unity に慣れているとどうも cocos2d-x や swift でのゲーム作りに敷居を感じてしまう
    • 自分で境界領域を計算して collider はらないといけないとか
  • とりあえず swift 触るときは FlappySwift) 使ってみる
講演メモ
  • Swift : Fast/Modern/Safe/Interactive
  • Objective-C は 25年前の言語
    • Brad J.Cox et al 『オブジェクト指向のプログラミング』
    • 一方 C++ といえば
      • C++ の旧名 C with Classes (オブジェクト指向なんて言ってない)
      • C++ の別名 better C -> C89
    • C の中で smalltalk をインラインでかけるが若干浮いている
    • ある意味、これまでは古典言語も使って iOS 開発をしなくてはならなかったと言える
  • それまでのスクリプト言語では足りなかった機能を全部備えて現れたのが Perl
    • C はバイトを扱える、文字の配列と文字列はちょっと違う
      • 終端文字を意識しなくてはいけない、書式付き文字列変換など
    • Perl は正規表現を始めとして文字列操作に強い
  • Swift は 2010 年に Chris Lattner らが開発を始めた
    • 『Objective-C without the C』 : Objective-C の良いところを残して C からの脱却を実現
    • インタープリタ型の処理系、文字列操作を拡張し、main() などを排除
  • Fast
    • C よりは遅いが Objective-C よりは速いらしい
    • ちなみに Python よりも Objective-C が速く、Swift はそれよりさらに速い
  • Modern
    • Closures, Generics, Type inference, Multiple return types, Namespaces... などをサポート
    • Switch
      • break を書く必要がない
      • where で細かい条件を制御できる
      • perl/python にはそもそも switch はない
    • Safe
      • バグの原因になりやすい C の仕様が削除された
        • goto, ポインタ, バッファーオーバーフロー, 初期化忘れ変数, 書式付き文字列など
      • ! ? で nil の許可不許可を指定(optional value)
  • Playground

    • インタラクティブにデバッグしながら開発できる
  • 後半は株式会社あくしゅの山崎氏が二日でゲームを作ってみたというお話

    • 初学には FlappyBird もどきのサンプル (FlappySwift) が良かった
      • SpriteKit というゲームエンジンを使っている
        • シーングラフとイベントベースの制御エンジン
        • OpenGL を現在動かない
        • update でコマ落ちなどすると変位が大きくなってしまう (Unity で言うところの fixedUpdate はない?)
    • Ruby に近い気がする
    • オプションがあることでコンパイルとランタイムでのコードチェックの役割がとても良い感じ
    • 自分で衝突境界・領域を定義しなければならない