AppleがWWDCでサプライズ発表した新プログラミング言語、Swiftの開発は、Objective Cの地位を維持するための取り組みと並行して4年前に開始されました。Swiftは現在、iOSとOS Xにおける最新のCocoa開発において、Objective Cを迅速に置き換えることを目指しています。
2005年からAppleで働いているこの新しい言語の考案者、クリス・ラトナー氏(下記)によると、Swiftはまったく新しい「ベータ」アイデアではなく、2010年の夏に開発が始まったとのことだ。ラトナー氏はおそらく、ワイバーンドラゴンのマスコット(上記)を配した低レベル仮想マシンコンパイラ基盤プロジェクト、LLVMで最もよく知られているだろう。
LLVM: Objective C 用の新しいコンパイラ
LLVM は、2000 年にイリノイ大学アーバナ・シャンペーン校の学生だった Lattner の研究プロジェクトとして始まりました。2003 年にバージョン 1.0 として初めて公開されました。2004 年、Lattner は Microsoft Research で夏季インターンとして働き、Phoenix コンパイラ インフラストラクチャに携わり、LLVM で .NET コードをコンパイルして実行できるように取り組んでいました。
ラトナー氏は、Appleのobjc-languageメーリングリストにObjective-Cに関する質問を投稿したことで、Appleの注目を集めました。Appleは2005年にラトナー氏のLLVMオープンソースプロジェクトへの貢献を開始し、その後ラトナー氏を雇用して彼の研究に資金提供を開始しました。
2007 年、LLVM プロジェクトは、メモリ使用量が少なく高速なコンパイル、表現力豊かな診断、モジュール式ライブラリ ベースのアーキテクチャ、Apple の Xcode などの IDE との緊密な統合を提供することを目的とした Objective C/C/C++ のフロントエンド コード パーサーである Clang をリリースしました。
ラトナー氏は、「純粋な」LLVM Clang プロジェクトに加えて、高度なコード最適化機能とコード生成機能を備えた新しい LLVM を既存の GCC (GNU C コンパイラ) に統合し、Apple の OS X などの Unix オペレーティングシステムの開発ツールの中核要素として長い間機能してきた標準 GCC コンポーネントに欠けている「積極的なループ、標準スカラー、プロシージャ間最適化およびプロシージャ間分析」の最新手法を追加することも提案しました。
Apple の OS X Cocoa (およびその歴史的な前身である NeXTStep) の主要開発言語である Objective C に対する GCC のサポートは停滞していたため、Apple が Clang と LLVM-GCC の両方のオープン開発に資金を提供する動機には、Mac の Objective C を言語として重要なものとして維持することが含まれていました。
Apple は OS X で LLVM を積極的に使用し始め、以前の GCC に基づくワークフローに大幅な変更を加えることなく、新しい LLVM コンパイラへのアクセスを提供し、コード最適化のメリットを享受できるようにするために、Mac 開発者に LLVM-GCC を提供しました。
同社はまた、2006 年に OS X 10.5 Leopard の OpenGL スタックに LLVM を統合し、2005 年初頭の Mac の Intel への移行、および 2007 年の iPhone の ARM アーキテクチャへの移行に LLVM を活用しました。
2012年のOS X Mountain LionとiOS 6のリリースまでに、AppleはLLVM-GCCとGCCを放棄し、Clangに完全に移行しました。LLVMはAppleのソフトウェアを支えるだけでなく、A6およびA7アプリケーションプロセッサを含むAppleのカスタムシリコンの開発にも密接に統合されています。
LLVM は、LLDB デバッガーから、iOS 上の高性能グラフィックス用の Apple の新しいレイヤーである Metal を含む新しい API まで、他の Apple テクノロジーでも重要な役割を果たしています。Metal は、最新の A7 のグラフィックス機能を最小限のオーバーヘッドで公開し、より汎用的な OpenGL を使用する場合よりも大幅なパフォーマンスの向上を実現します。
Swift: LLVMのための新しい言語
2010 年までに、GCC の停滞した Objective C サポートに対する LLVM のソリューションにより、LLVM が Objective C に簡単に追加できるよりも多くの機能をサポートできるという新しいシナリオが生まれました。Lattner 氏はその夏に新しいプログラミング言語の開発に着手し、1 年後には「他の数人の (素晴らしい) 人々」が加わりました。
2013年7月までに、ラトナー氏は新しいSwiftプロジェクトが「Appleの開発ツールグループの主要な焦点」になったと指摘しました。このプロジェクトは翌年まで非公開のままでした。ラトナー氏は履歴書の中で、2013年初頭に「Appleの開発ツール部門全体の管理とリーダーシップを引き継いだ」と述べています。
ラトナー氏は、「コンパイラや低レベルツールに加えて、Xcode IDE、Instrumentsパフォーマンス分析ツール、Apple Javaリリース、そして様々な社内ツールも担当しています。Xcode 5はこれらの取り組みの最初の成果ですが、機能の計画と実装の大部分は私が引き継ぐ前に完了していました。私は統合を推進し、WWDCでリリースされたいくつかの主要機能を定義しました」と述べています。
ラトナー氏は、新しいSwift言語は「言語の専門家、ドキュメンテーションの達人、コンパイラ最適化の達人、そしてアイデアの洗練と実戦テストに役立つフィードバックを提供してくれた非常に重要な社内ドッグフーディンググループのたゆまぬ努力の成果です。もちろん、この分野の他の多くの言語が苦労して得た経験からも大きな恩恵を受けており、Objective-C、Rust、Haskell、Ruby、Python、C#、CLUなど、数え切れないほど多くの言語からアイデアを得ています」と述べています。
Apple の Swift に関する無料 iBook でも、「Swift は何年もかけて開発されてきた」と述べられており、「Apple は既存のコンパイラ、デバッガ、フレームワーク インフラストラクチャを進化させることで、Swift の基礎を築いた」と付け加えている。
自動参照カウント(ARC)によってメモリ管理を簡素化しました。FoundationとCocoaという堅牢な基盤の上に構築されたフレームワークスタックは、全体的に近代化と標準化が図られています。Objective-C自体もブロック、コレクションリテラル、モジュールをサポートするように進化し、フレームワークに最新の言語技術をスムーズに導入できるようになりました。こうした基盤のおかげで、Appleのソフトウェア開発の未来に向けた新たな言語を導入できるようになりました。Swiftは、スクリプト言語と同等の表現力と楽しさを備えた、業界初のシステムプログラミング言語です。
同社はまた、Swift は「初心者プログラマーにとって親しみやすい言語です。スクリプト言語と同等の表現力と楽しさを備えた、業界初のシステムプログラミング言語です」と述べている。
AppleはSwiftとLLVMの統合にも注目しており、この新言語は「現代の言語思想の最良の部分と、Appleの幅広いエンジニアリング文化の知恵を組み合わせたものだ。コンパイラはパフォーマンスに最適化され、言語は開発に最適化されており、どちらにも妥協はない」と述べている。
Swift のインタラクティブ プレイグラウンドと REPL
Lattner 氏は、Swift に関連する 2 つの新機能、Xcode の新しい Playgrounds (下記) と REPL (Read-Eval-Print-Loop) デバッグ コンソールについてもコメントしました。
「Xcode Playgrounds機能とREPLは、プログラミングをよりインタラクティブで親しみやすいものにするという私の個人的な情熱の源でした」とラトナー氏は述べた。「XcodeとLLDBチームは、奇抜なアイデアを真に素晴らしいものに変えるという素晴らしい仕事を成し遂げました。」
「プレイグラウンドは、ブレット・ビクターのアイデア(カーン・アカデミーのプログラミング学習オンライン環境のインスピレーションとして挙げられている)、ライト・テーブル(コードやプログラムの動作に関するリアルタイムのフィードバックを提供するように設計されたオープンソースのIDE)、その他多くのインタラクティブ・システムから大きな影響を受けています。」
「プログラミングをもっと身近で楽しいものにすることで、次世代のプログラマーにアピールし、コンピュータサイエンスの教え方を再定義することに貢献できればと思っています」とラトナー氏は述べた。
AppleのSwiftのプレゼンテーションでは、「プレイグラウンドを使うと、Swiftのコードを書くのが驚くほどシンプルで楽しくなります。コードを1行入力するだけで、結果がすぐに表示されます。ループなど、コードが時間の経過とともに実行される場合は、タイムラインアシスタントで進行状況を確認できます。タイムラインは変数をグラフで表示し、ビューを構成する際に各ステップを描画し、アニメーション化されたSpriteKitシーンを再生できます。プレイグラウンドでコードを完成させたら、そのコードをプロジェクトに移動するだけです」と説明されています。
同社によれば、Xcode の Playground を使用すると、ユーザーは「新しいアルゴリズムを設計し、その結果を段階ごとに確認したり、新しいテストを作成してテスト スイートに組み込む前に動作を確認したり、新しい API を試して Swift のコーディング スキルを磨いたりできる」という。
Apple は、Xcode の REPL デバッグ コンソールには「Swift 言語のインタラクティブ バージョンが組み込まれています。Swift 構文を使用して実行中のアプリを評価および操作したり、新しいコードを記述してスクリプトのような環境でどのように動作するかを確認したりできます」と述べています。
Appleは、開発者のニーズと機能の要望に応じてSwiftを急速に進化させる計画だと述べている。
メンター主導のプログラミング教育に重点を置く教育スタートアップ企業 Thinkful は、7 月 16 日から始まるプログラムで Swift での開発コースを提供する計画をすでに発表している。