EY-Office ブログ

EY-Officeの吉田裕美が、まだ Ruby on RailsやiPhone開発を行ってない技術者や技術系マネージャー向けに、技術や教育に付いて書いています。

2014-08-25 Swiftプログラミング言語に付いて思うこと

今年のWWDC(Appleの開発者向け大規模なカンファレンス)での大きな話題は、Appleが開発した新しいプログラミング言語 SWift ではないでしょうか。

従来、iPhone,iPad (iOS) や Mac (OS X)アプリの開発は主に Objective-C 言語で行われていましたが、これ補完する、または置き換える新しい言語として Swift が登場しました。

https://developer.apple.com/swift/

そもそも Objective-C 言語とは

なぜ Apple が新しい言語を発表(開発)していたのかを知るためには、まず現在使われている Objective-Cに付いて少し書きたいと思います。

Objective-Cは1983年にブラッド・コックス氏によって開発されました。そして、Appleを去ったスティーブ・ジョブズが起こしたNeXT社が開発したコンピューター NeXT Computer のOS NextSTEP の主要開発言語として採用されました。やがてNeXT社は Appleに買収され、現在の Mac のOS、 OS X のベースになりました。 iPhone, iPad のOSである iOSOS X をベースに作られています。
このような歴史から、iPhone, iPadのアプリを開発するには主にObjective-Cが使われています。

Objective-Cを簡単に説明すると、C言語の上にSmalltalk由来の動的なオブジェクト指向を乗せた言語です。C言語をご存知の方は多いとおもいます、コンピューターに最適な性能の高いプログラムが開発でき、現在でもOS、プログラミング言語や、組み込み機器などで使われています。性能の高いプログラムが出来る反面、ポインター等のコンピューターの都合に合わせたプログラミングが必要で、バグの少ないプログラムを作るのに手間のかかる言語です。

ただし、Objective-CにはSmalltalk由来でRubyでも採用されている柔軟なオブジェクトシステムと優れたクラスライブラリーがあり、高度なUIアプリケーションを比較的容易に構築出来るようになっていました。

Objective-C言語の詳細は WikipediaのObjective-C を参照下さい。

Objectve-Cの弱点

iPhoneが大ヒットし、たくさんの開発者がiOSアプリ開発のためにObjectve-Cを使うようになりました。 Appleは少しずつですが Objectve-Cを改良してきましたが、いかんせん30年前に設計された言語です。

その後、JavaやPerl,Python,Rubyといった言語があらわれ、ソフトウェア開発の主流になって来ました。またHaskellのような、新しい概念やアイデアをもつ言語も使われるようになって来ました。

Objectve-Cは、C言語をベースにしているのでC言語と同様に安全なバグの少ないプログラムを作るのに手間のかかる言語です。また、学習コストも高いと思います。iPhoneと比較されるAndroidは、Javaを主力言語に選びプログラミングの学習コストが低いのとは対照的です。

Swift

Swift言語の詳細に付いては WikipediaのSwift(プログラミング言語) や Appleのドキュメントをご覧下さい。

特徴を上げると

  • いろいろな言語の良いところを取り入れた今風な言語
  • JavaやPerl,Python,Rubyといった言語を使ってきたプログラマーが容易に学習出来る言語
  • 安全なプログラムが書きやすい強い型付けの静的言語、変数に値が無い状態(nil, null)を安全に扱えるOptionalの導入
  • Lisp, Python, Rubyではおなじみのインタラクティブにコードを試せる便利なREPLを開発環境に実装

といった、今風な言語だと思います。また学習コストもそれほど高くないと思います。

Swiftを使った感想

Swiftを使って簡単なアプリを書てみました その感想は、Swiftは上に書いたように非常に良い言語だと思います。

ただし、iOSやOS X用のアプリを Swift で書くには、ライブラリーであるCocoa(Foundation, UIKit AppKit…)を使う必要があります、Cocoaは当然Objective-Cで書かれています、Objective-Cの動的なオブジェクト指向に深く根ざしたライブラリーです。

SwiftはC++, Javaのようにクラス定義や継承関係、プロトコル(インターフェース)といった宣言的な情報をもとにメソッド呼出を行います(呼出コードを生成する)。一方動的なオブジェクト指向では、実行時にオブジェクトに呼出すメソッドを探し、あれば実行します。

SwiftでiOSやOS X用のアプリを書くと、言語とライブラリーの設計思想の間を埋めるためのコードが必要になってきます。
このコードは小さなものですし、開発ツールのXcodeが指摘してくれるので難しい作業ではありませんが、プログラマーはこの違いを熟知していないと対応出来ません。

Swiftは現時点で完成した言語ではありませんし、今後も改良・発展が続いて行くと思います。是非こののギャップを埋める良いアイデアが現れる事に期待しています。