$30 off During Our Annual Pro Sale. View Details »

Swift code in Swift

Swift code in Swift

JTF: July Tech Festa 2014
2014-06-22

KOYAMA Hiroshi

June 27, 2014
Tweet

More Decks by KOYAMA Hiroshi

Other Decks in Technology

Transcript

  1. JTF: July Tech Festa 2014

    View Slide

  2. 経歴
    •  現職:  産業技術⼤大学院⼤大学(40歳:  2008/4-­‐)  
    ª 
    情報アーキテクチャ専攻  教授    
    •  実践⼥女女⼦子⼤大学(36歳:  2004/4-­‐2008/3)  
    ª 
    ⼈人間社会学部  助教授・准教授  (情報リテラシ教育)  
    •  (株)ノーザンライツコンピュータ(33歳:  2000/10-­‐2004/2)
    (株)テンアートニ(2002/01:  合併のため社名変更更)  
    ª 
    Vice  President,CTO・研究開発本部⻑⾧長,執⾏行行役員・事業部⻑⾧長  
    •  国際⼤大学GLOCOM(31歳:  1998/8-­‐2004/3)  
    ª 
    研究員,助⼿手、講師  
    •  C++,Perl,Linux,Unix,TCP/IP,Tcl/Tk等の黎黎明期の著書・訳
    書多数(18冊)  
    2

    View Slide

  3. 昔の写真
    3

    View Slide

  4. 王者  ⿅鹿鹿島アントラーズ    魂のサポータ  
     
    4

    View Slide

  5. SwiF
    •  WWDC  2014で発表されたOS  X及びiOSの新しい公式開発⾔言語  
    ª 
    hKp://www.apple.com/apple-­‐events/june-­‐2014/  
    ª 
    現在の公式開発⾔言語はObjecTve-­‐C  
    •  特徴  
    ª 
    Fast  
    ª 
    Modern  
    ª 
    Safe  
    ª 
    InteracTve  
     
    5

    View Slide

  6. ObjecTve-­‐C
    •  1983:  Brad  J.  Cox  →  Stepstone社  
    •  Object  Oriented  Programming:  An  EvoluTonary  Approach  
    ª 
    Brad  J.  Cox,  Addison-­‐Wesley  Publishing  Company,  1986  
    ª 
    (邦題:「オブジェクト指向のプログラミング」)  
    •  C  &  Object  System  
    ª 
    インラインでSmalltalkのコードが書けるC(若若⼲干浮いている)  
    ª 
    C⾔言語上位互換(ポインタ等のあらゆる仕様を継承)  
    •  事実上、OS  X及びiOSの専⽤用⾔言語  
    ª 
    1995:  NeXT社がObjecTve-­‐C関連の権利利を買い取っている。  
    •  cf.  C++  
    ª 
    旧名:  C  with  Classes  
    ª 
    別名:  beKer  C  →  C89 6

    View Slide

  7. Brad  Cox's  Object  Oriented  Programming

    View Slide

  8. ObjecTve-­‐C
    8
    #import    
    #import    
     
    @interface  Coord:  Object  {  
           int  x,  y;  
    }  
    -­‐  (void)set:(int)nx  int:  (int)ny    
    @end  
     
    @implementaTon  Point  
    -­‐  (void)set:(int)nx  int:(int)ny  {  
     x  =  nx;  y  =  ny;  
    }  
    @end  
     
    int  main()  {  
           center  =  [Coord  alloc]  
           [center  set  10,  int  5]  
    }

    View Slide

  9. プログラミング⾔言語の歴史
    古典⾔言語 オブジェクト指向 スクリプト⾔言語
    1957:  FORTRAN  
    1972:  K&R  C  
    1977:  FORTRAN  77 1980:  SmallTalk  
    1983:  ObjecTve-­‐C、C++  
     
    1989:  C89  
    1990:  FOTRAN  90  
     
    1996:  Java  1  
    1998:  C++98  
     
     
     
     
     
    2004:  Java  5  
    2007:  ObjecTve-­‐C  2.0
    1987:  Perl  
    1988:  Tcl/Tk  
    1991:  Python  
    1993:  Ruby  
    1994:  Perl  5.0  
    1995:  PHP  1.0、JavaScript  
    2000:  Python  2.0  
    2004:  PHP  5.0  
    2007:  Ruby  1.9  
    2008:  Python  3.0  
    2009:  ECMAScript  5  
    2013:  Ruby  2.0
    9

    View Slide

  10. スクリプト⾔言語
    •  第1世代:  シェルスクリプト(1977年年)、旧AWK(1977年年)  
    ª 
    ソフトウェアツールの実現、パイプライン・リダイレクトの活⽤用
    ª 
    最低限の制御構造、変数
    •  第2世代:  新AWK(1985年年)、Perl(1987年年)  
    ◎  あらゆる⽬目的で活⽤用出来るだけの機能及び仕様  
    ª 
    独⽴立立したプログラミング⾔言語としての体裁  
    ª 
    ファイル処理理、システムコール  
    ◎  時代の趨勢  
    ª 
    ⽂文字列列処理理、正規表現  
    •  第3世代:  Python、Ruby、JavaScript、PHP  
    ª 
    Perlの影響を受け、独⾃自の発展  
    ª 
    Webアプリケーションで積極的に活⽤用される。 10

    View Slide

  11.   SwiF
    •  2010/7:  Chris  LaKner⽒氏らが開発を始める。  
    ª 
    hKp://www.nondot.org/sabre/  
    •  ObjecTve-­‐C  without  the  C  
    ª 
    Cからの脱却  
    •  スクリプト⾔言語らしさ  
    ª 
    インタープリタ型の処理理系あり  
    •  -­‐iオプション  
    •  Playground(運動場)  
    ª 
    ⽂文字列列処理理  ←  FORTRANは数値計算、Cはバイト処理理の⾔言語  
    ª 
    短いコード  ←  main()等無し    
    11

    View Slide

  12. Hello,  swiF
    hello.swift:  
     
       
    コンパイラ  
     
     
     
     
     
     
    インタプリタ  
    12
    println("Hello,  swift")
    $  swift  hello.swift  
    -­‐rwxr-­‐xr-­‐x    1  koyama    staff    35892    6  22  02:38  hello  
    -­‐rw-­‐r-­‐-­‐r-­‐-­‐    1  koyama    staff          25    6  22  02:38  hello.swift  
    $  ./hello  
    Hello,  swift  
    $  
    $  swift  –i  hello.swift  
    Hello,  swift  
    $  

    View Slide

  13. Fast
    WWDC  2014によれば・・・  
    •  Cよりは遅いがObjecTve-­‐Cよりは速いらしい。  
     
    C  >>  SwiF  >  ObjecTve-­‐C  
    •  オブジェクトのソートでは、PythonよりObjecTve-­‐Cは2.8倍速
    く、SwiFは3.9倍速いらしい。RC4暗号では、Pythonより
    ObjecTve-­‐Cは127倍速く、SwiFは220倍速いらしい。  
     
    C  >>  SwiF  >  ObjecTve-­‐C  >>  Python  
    13

    View Slide

  14. ⾔言語の差
    Brian  W.  Kernighan,  Rob  Pike:  The  PracTce  of  Programming  
    Markov:  英⽂文⽣生成プログラム(マルコフ連鎖のアルゴリズム)  
     
    •  今度度、時間があるとき、SwiFで測ってみますw
    14
    R10000  
    250MHz
    Irix(UNIX)
    PenTum  II  
    400MHz
    Windows  NT  
    Core  i7  Quad  Core  
    2.7GHz  
    MacOS  X  10.8.3  
    ソースコー
    ドの⾏行行数
    C   0.36s   0.30s   0.032s   150  
    Java   4.9s   9.2s   ー   100  
    C++ 1.7s   1.5s   ー   70  
    AWK   2.2s   2.1s   ー   20  
    Perl   1.8s   1.0s   0.093s   18  
    Python   ー   ー   0.078s   23  

    View Slide

  15. Modern
    •  25年年前に設計されたObjecTve-­‐Cよりは今⾵風である。  
    •  今⾵風である19の⾔言語仕様が例例⽰示され、以下が特に強調された。  
    ª 
    Closures  
    ª 
    Generics  
    ª 
    Type  inference  
    ª 
    MulTple  return  types  
    ª 
    Namespaces(いまだに相当機能が発⾒見見出来無いw)  
    15

    View Slide

  16. 型推論論  /  Type  Inference
    var  city:  String  =  "Tokyo"
         //  変数  
    let  pi:  Double  =  3.14        //  定数  
     
    var  city  =  "Tokyo"          //  型推論論String型  
    let  pi  =  3.14
                 //  型推論論Double型  
     
    var  year  =  2014  
    var  name  =  "JTF"  
    var  event  =  name  +  year      //  error  
    var  event  =  name  +  String(year)  
    16

    View Slide

  17. ⽂文字列列処理理
    //  ObjecTve-­‐C  
    NSString  *name  =  @"JTF";  
    NSString  *year  =  @"2014";  
    NSString  *event    =  [event  stringByAppendingString:year];  
    NSString  *longName  =  @"July  Tech  Festa";  
    NSString  *message      =  [NSString  stringWithFormat:@"%@:    %@",  name,  longName];  
     
    //  SwiF  
    var  name  =  "JTF"  
    var  year  =  "2014"  
    var  event  =  name  +  year          //  JTF2014  
    var  longName  =  "July  Tech  Festa"  
    var  message  =  "\(name):  \(longName)"    //  JTF:  July  Tech  Festa  
     
    let  x  =  10,  y  =  3  
    let  result  =  "\(x)  /  \(y)  =  \(x  /  y)"        //  10  /  3  =  3
    17

    View Slide

  18. 配列列処理理
    var  names  =  ["Alice",  "Bob"]        
    names  +=  "Carol"          //  Alice,  Bob,  Carol  
     
    println(names[1])          //  Bob  
    names[1]  =  "Dave"        //  Alice,  Dave,  Carol  
    names[1..2]  =  ["Ellen",  "Frank"]  //  Alice,  Ellen,  Frank,    Carol,    
                   //  1..2は1番⽬目から2番⽬目の直前までの要素  
                   //  1...2は1番⽬目から2番⽬目までの要素  
                     
    18

    View Slide

  19. switch
    •  何故かswitchはいろいろ拡張されている。  
    ª 
    breakを書く必要が無い。  
    ª 
    defaultは必須である。  
    ª 
    whereで細かい条件を制御できる。  
    ª 
    扱うことが出来るデータが多様である。  
     switch  num  {  
     case  0:  println("0")  
     case  1,  2,  3:  println("1,  2,  3")  
     case  4...6:  println("4,  5,  6")  
     case  let  n  where  n  %  2  =  0  &&  n  <  10:  
       println("8")    
     default:  println("other");    
     }    
    19

    View Slide

  20. 総称型  /  Genenic
    struct  Queue  {  
     //  ...  
    }  
     
    var  q  =  Queue()
    20

    View Slide

  21. ほか
    •  繰り返しでは、Cのwhile、do-­‐while、for以外にスクリプト⾔言語
    で流流⾏行行のfor-­‐in(通称foreach)が利利⽤用できる。    
    •  関数では、デフォルト引数、複数の戻り値が利利⽤用できる。  
    •  メソッド呼び出しを.で表現するので、メソッド接続が利利⽤用で
    きる。
    21

    View Slide

  22. Safe
    •  ObjecTve-­‐C  without  the  C  
    •  取り除かれた⾔言語仕様及び問題  
    ª 
    goto  
    ª 
    ポインタ  
    ª 
    バッファーオーバーフロー  
    ª 
    初期設定を忘れた変数  
    ª 
    書式付き⽂文字列列の問題  
    22

    View Slide

  23. OpTonal  Value
    •  ObjecTve-­‐Cはnilでの初期設定を許していた。  
     
     var  str:  String  =  ""
             //  ok  
     var  str:  String  =  nil        //  error  
     var  str:  String?  =  nil        //  ok  
     
    •  !でもOpTonal  Valueを指定できるが、!を付けた場合はnilが実
    ⾏行行時エラーを引き起こす。  
    •  関数の引数及び戻り値でも?あるいは!によるOpTonal  Valueを
    利利⽤用できる。  
     
     
    23

    View Slide

  24. InteracTve
    •  Playground:  新しい実⾏行行環境(運動場・インタープリタ)
    24

    View Slide

  25. 参考資料料
    •  [SwiF  -­‐  Apple  Developer]  
    ª 
    hKps://developer.apple.com/swiF/  
    •  Xcode  beta  
    ª 
    hKps://developer.apple.com/xcode/downloads/  
    •  IntroducTon  to  SwiF  (Video)  
    ª 
    hKps://developer.apple.com/videos/wwdc/2014/?id=402  
    •  The  SwiF  Programming  Language  (iBooks  Store)  
    ª 
    hKps://itunes.apple.com/us/book/the-­‐swiF-­‐programming-­‐language/
    id881256329?mt=11  
    •  Using  SwiF  with  Cocoa  and  ObjecTve-­‐C  (iBooks  Store)  
    ª 
    hKps://itunes.apple.com/us/book/using-­‐swiF-­‐cocoa-­‐objecTve/
    id888894773?mt=11  
    •  Qiita  
    ª 
    hKp://qiita.com/tags/swiF 25

    View Slide