Swift code in Swift

Swift code in Swift

JTF: July Tech Festa 2014
2014-06-22

C0bb4ea64703d1886a53d639cdb30d96?s=128

KOYAMA Hiroshi

June 27, 2014
Tweet

Transcript

  1. JTF: July Tech Festa 2014

  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
  3. 昔の写真 3

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

  5. SwiF •  WWDC  2014で発表されたOS  X及びiOSの新しい公式開発⾔言語   ª  hKp://www.apple.com/apple-­‐events/june-­‐2014/   ª 

    現在の公式開発⾔言語はObjecTve-­‐C   •  特徴   ª  Fast   ª  Modern   ª  Safe   ª  InteracTve     5
  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
  7. Brad  Cox's  Object  Oriented  Programming

  8. ObjecTve-­‐C 8 #import  <stdio.h>   #import  <objc/Object.h>     @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]   }
  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
  10. スクリプト⾔言語 •  第1世代:  シェルスクリプト(1977年年)、旧AWK(1977年年)   ª  ソフトウェアツールの実現、パイプライン・リダイレクトの活⽤用 ª  最低限の制御構造、変数 • 

    第2世代:  新AWK(1985年年)、Perl(1987年年)   ◎  あらゆる⽬目的で活⽤用出来るだけの機能及び仕様   ª  独⽴立立したプログラミング⾔言語としての体裁   ª  ファイル処理理、システムコール   ◎  時代の趨勢   ª  ⽂文字列列処理理、正規表現   •  第3世代:  Python、Ruby、JavaScript、PHP   ª  Perlの影響を受け、独⾃自の発展   ª  Webアプリケーションで積極的に活⽤用される。 10
  11.   SwiF •  2010/7:  Chris  LaKner⽒氏らが開発を始める。   ª  hKp://www.nondot.org/sabre/   • 

    ObjecTve-­‐C  without  the  C   ª  Cからの脱却   •  スクリプト⾔言語らしさ   ª  インタープリタ型の処理理系あり   •  -­‐iオプション   •  Playground(運動場)   ª  ⽂文字列列処理理  ←  FORTRANは数値計算、Cはバイト処理理の⾔言語   ª  短いコード  ←  main()等無し     11
  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   $  
  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
  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  
  15. Modern •  25年年前に設計されたObjecTve-­‐Cよりは今⾵風である。   •  今⾵風である19の⾔言語仕様が例例⽰示され、以下が特に強調された。   ª  Closures  

    ª  Generics   ª  Type  inference   ª  MulTple  return  types   ª  Namespaces(いまだに相当機能が発⾒見見出来無いw)   15
  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
  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
  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
  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
  20. 総称型  /  Genenic struct  Queue<T>  {    //  ...  

    }     var  q  =  Queue<Dounle>() 20
  21. ほか •  繰り返しでは、Cのwhile、do-­‐while、for以外にスクリプト⾔言語 で流流⾏行行のfor-­‐in(通称foreach)が利利⽤用できる。     •  関数では、デフォルト引数、複数の戻り値が利利⽤用できる。   • 

    メソッド呼び出しを.で表現するので、メソッド接続が利利⽤用で きる。 21
  22. Safe •  ObjecTve-­‐C  without  the  C   •  取り除かれた⾔言語仕様及び問題  

    ª  goto   ª  ポインタ   ª  バッファーオーバーフロー   ª  初期設定を忘れた変数   ª  書式付き⽂文字列列の問題   22
  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
  24. InteracTve •  Playground:  新しい実⾏行行環境(運動場・インタープリタ) 24

  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