Swift (プログラミング言語)
Swift(スウィフト)は、AppleのiOSおよびmacOS、Linux、Windowsで利用出来るプログラミング言語である。Worldwide Developers Conference (WWDC) 2014で発表された。Apple製OS上で動作するアプリケーションの開発に従来から用いられていたObjective-CやObjective-C++、C言語と共存できるように、共通のObjective-Cランタイムライブラリが使用されている。
Swiftは、動的ディスパッチや動的バインディング等のObjective-Cの特長を受け継いでいる一方で、Objective-Cより「安全」にバグを捕捉できることも意図している。また、タイプや構造体、クラスに適用可能なプロトコルによるシステムの拡張性の概念は「プロトコル指向プログラミング」と呼ばれる 。
Swiftは、マルチパラダイムのコンパイラプログラミング言語であるが、XcodeのPlaygroundsの上やターミナルでインタラクティブにデバッグする事が可能である。
LLVMコンパイラが使われており、ライブコーディングに対応していることが特徴。
Swiftは2010年にLLVMとClangの始祖であるChris Lattnerによって開発が始められた。ChrisはSwiftについて「Objective-C、Rust、Haskell、Ruby、Python、C#、CLU、その他多くの言語からアイデアを得た」と述べている。
その後Apple社内での4年間の開発期間を経て、2014年のWWDCにおいて一般に発表され、同時にAppleに開発者登録している開発者に対してベータ版の提供が開始された。
2014年9月9日、SwiftはXcode 6.0ゴールデンマスター版でマイルストーン1.0に到達した。
2015年12月3日、SwiftはApache 2.0ライセンスのもとでオープンソース化され、プロジェクトのホストとして Swift.org が作成された。
WWDC 2016の基調講演で、AppleはSwiftでのコード作成方法を教えることを目的とした、Swift Playgroundsという名称のiPad専用アプリ開発を発表した。2016年9月にリリースされたこのアプリは3Dビデオゲームのようなインタフェースで表示され、コードの行が特定の順序で配置され実行されたときにフィードバックを提供する。2017年3月21日、Swift 3.1に対応し、日本語を含め5カ国語に対応したことを発表。Swift 3.1は、2017年3月27日にリリースされた。
2017年、Project Leadは、Chris Lattner同様にLLVMとClangの開発者である、AppleのTed Kremenekである。
2017年9月19日、Xcode 9.0とともにSwift 4がリリースされた。組み込みのクラスやデータ構造に変更が加えられている。Swift 3で書かれたソースコードはXcodeに搭載された移行機能を使って更新できる。その後、2018年3月29日に、Xcode 9.3とともにSwift 4.1が、2018年6月4日にXcode 10 betaとともにSwift 4.2がリリースされた。
2019年3月25日、Xcode 10.2とともにSwift 5がリリースされた。バイナリインタフェースの安定化が図られ、Appleが提供するOSにSwiftランタイムが標準で含まれることになる。ソースコードはSwift 4.xと互換性がある。
WWDC 2019にて、Appleのプラットフォーム向けの新しいフレームワークとしてSwiftUIが提唱された。
2019年9月20日、Xcode 11.0とともにSwift 5.1がリリースされた。モジュールの安定化が図られ、Swiftの将来のバージョンで機能するバイナリフレームワークの作成、共有が可能になる。
2020年3月24日、Xcode 11.4とともにSwift 5.2がリリースされた。
2020年9月16日、Swift 5.3がリリースされ、その約1週間後の9月22日、Windowsが公式にサポートされた。
2021年のWWDCで、Appleから正式に発表された Swift 5.5 は、同時実行と非同期コードの言語サポートを大幅に拡張し、特に独自のバージョンのアクターモデルを導入している 。
AppleはSwiftの発表に際して「モダン、安全、高速、インタラクティブ」を大きな特徴として挙げた。
クロージャやタプル、ジェネリックプログラミング、Optional型の採用などが挙げられる。
静的な型チェック、変数の初期化の強制、数値型のオーバーフローの検査、自動参照カウントによるメモリ管理などが挙げられる。 また、if文のブレースの省略禁止、switch-case文は明示的に指定されない限りフォールスルーしないなど、既存のプログラミング言語において記述ミスによるバグが発生しやすかった部分を文法的に解決している。
Swiftはコンパイラ言語でありながら、インタプリタとしてスクリプトを実行することも可能で、対話実行環境 (REPL) も用意されている。 Swiftと同時に発表されたXcodeバージョン6では、コードの実行結果をグラフィカルに確認しながら開発できるPlaygroundsが実装された。
クレイグ・フェデリギは、Swiftの発表時に「C言語の荷物のないObjective-C」と表現している。
Swiftでは自動参照カウント (Automatic Reference Counting) ARCでアプリが使うメモリを追跡管理する。ARCはクラスインスタンスが使われなくなった時に自動的にそれが使っていたメモリを開放する。Objective-Cで参照カウント方式を使用する場合のように、明示的にrelease、retainを記述する必要はなく、そもそも記述することができない。
循環参照を回避する方法として、Swiftでは弱い参照を示す修飾子weak、unownedが提供される。また、キャプチャリストを使用して、クラス内のクロージャにおける強い参照サイクルを回避することができる。
SwiftはCocoaやObjective-Cをシームレスに使えるように設計されている。SwiftとObjective-Cの間はどちらのAPIからでもお互いに使う事が出来る。
モジュールとしてアクセス可能などんなObjective-Cフレームワーク(又はCライブラリ)でもSwiftに直接インポートできる。
Objective-C
Swift
Xcode 6以降では、Objective-CとSwiftの相互利用のためのブリッジヘッダーを生成する機能が提供される。ブリッジヘッダーファイルが生成された時点で、Swift側ではObjective-C側で定義された型、関数、変数を、Swiftで書かれたかのように参照できる。Objective-C側では、自動生成ヘッダーファイルをインポートすることでSwiftコードを利用できる。なお、Swiftで書かれたクラスをObjective-C側でサブクラス化することはできない。
Swift 2.2から、Ubuntuディストリビューション向けの公式ダウンロードが利用可能である。さらに、Swift 5.2.4からはCentOS、Amazon Linux等の多くのディストリビューションが追加されている。
Swiftがオープンソース化されたことにより、他環境に移植されることが期待されている。Webフレームワークとしては、IBMによるKitura、Vapor等がすでに存在する。また、Appleによって公式の「Server APIs」ワークグループも開始されており、Swiftの開発メンバーが中心的な役割を担っている。
Androidで利用可能な非公式のツールチェーンも存在する。
2020年5月29日、AWS LambdaでSwiftを利用可能にする「Swift AWS Lambda Runtime」が公開された。