Swift (プログラミング言語)

Appleが開発しているプログラミング言語

Swift(スウィフト)は、アップルiOSおよびmacOSLinuxで利用出来るプログラミング言語である。Worldwide Developers Conference (WWDC) 2014で発表された。アップル製OS上で動作するアプリケーションの開発に従来から用いられていたObjective-CやObjective-C++、C言語と共存できるように、共通のObjective-Cランタイムライブラリが使用されている[3]

Swift
パラダイム 関数型プログラミング命令型プログラミングオブジェクト指向プログラミング、マルチパラダイムプログラミング、block-structured programming ウィキデータを編集
登場時期 2014年6月2日 (2014-06-02)
開発者 クリス・ラトナー、アップル ウィキデータを編集
最新リリース 5.4 / 2021年4月26日[1][2]
型付け 強い静的型付け型推論
影響を受けた言語 RustHaskellRubyObjective-CPythonC SharpCLU ウィキデータを編集
プラットフォーム macOSiOSLinuxMicrosoft Windows 10 ウィキデータを編集
ライセンス Apache-2.0 ウィキデータを編集
ウェブサイト
拡張子 swift ウィキデータを編集
テンプレートを表示

カテゴリ / テンプレート

Swiftは、動的ディスパッチ英語版動的バインディング等のObjective-Cの特長を受け継いでいる一方で、Objective-Cより「安全」にバグを捕捉できることも意図している。また、タイプや構造体クラスに適用可能なプロトコルによるシステムの拡張性の概念は「プロトコル指向プログラミング」と呼ばれる[4]

Swiftは、マルチパラダイムのコンパイラプログラミング言語であるが、XcodeのPlaygroundsの上やターミナルでインタラクティブにデバッグする事が可能である。

LLVMコンパイラが使われており、ライブコーディングに対応していることが特徴[5]

歴史編集

Swiftは2010年にLLVMClangの始祖であるChris Lattner英語版によって開発が始められた。ChrisはSwiftについて「Objective-CRustHaskellRubyPythonC#CLU、その他多くの言語からアイデアを得た」と述べている[6]

その後アップル社内での4年間の開発期間を経て、2014年のWWDCにおいて一般に発表され、同時にアップルに開発者登録している開発者に対してベータ版の提供が開始された。

2014年9月9日、SwiftはXcode 6.0ゴールデンマスター版でマイルストーン1.0に到達した[7]

2015年12月3日、SwiftはApache 2.0ライセンスのもとでオープンソース化され、プロジェクトのホストとして Swift.org が作成された。

WWDC 2016の基調講演で、アップルはSwiftでのコード作成方法を教えることを目的とした、Swift Playgroundsという名称のiPad専用アプリ開発を発表した。2016年9月にリリースされた[8]このアプリは3Dビデオゲームのようなインタフェースで表示され、コードの行が特定の順序で配置され実行されたときにフィードバックを提供する。2017年3月21日、Swift 3.1に対応し、日本語を含め5カ国語に対応したことを発表[9]。Swift 3.1は、2017年3月27日にリリースされた[10]

2017年現在、Project Leadは、Chris Lattner同様にLLVMとClangの開発者である、AppleのTed Kremenekである[11]

2017年9月19日、Xcode 9.0とともにSwift 4がリリースされた[12]。組み込みのクラスやデータ構造に変更が加えられている。Swift 3で書かれたソースコードはXcodeに搭載された移行機能を使って更新できる。その後、2018年3月29日に、Xcode 9.3とともにSwift 4.1が[13]、2018年6月4日にXcode 10 betaとともにSwift 4.2がリリースされた[14]

2019年3月25日、Xcode 10.2とともにSwift 5がリリースされた。バイナリインタフェースの安定化が図られ、アップルが提供するOSにSwiftランタイムが標準で含まれることになる[15]。ソースコードはSwift 4.xと互換性がある。

WWDC 2019にて、アップルのプラットフォーム向けの新しいフレームワークとしてSwiftUIが提唱された[16]

2019年9月20日、Xcode 11.0とともにSwift 5.1がリリースされた。モジュールの安定化が図られ、Swiftの将来のバージョンで機能するバイナリフレームワークの作成、共有が可能になる[17]

2020年3月24日、Xcode 11.4とともにSwift 5.2がリリースされた[18]

2020年9月16日、Swift 5.3がリリースされ[19]、その約1週間後の9月22日、Windowsが公式にサポートされた[20]

特徴編集

アップルはSwiftの発表に際して「モダン、安全、高速、インタラクティブ」を大きな特徴として挙げた[3]

モダン
クロージャタプルジェネリックプログラミングOptional型英語版の採用などが挙げられる。
安全
静的な型チェック、変数の初期化の強制、数値型のオーバーフローの検査、自動参照カウント英語版によるメモリ管理などが挙げられる。
また、if文のブレースの省略禁止、switch-case文は明示的に指定されない限りフォールスルーしないなど、既存のプログラミング言語において記述ミスによるバグが発生しやすかった部分を文法的に解決している。
インタラクティブ
Swiftはコンパイラ言語でありながら、インタプリタとしてスクリプトを実行することも可能で、対話実行環境 (REPL) も用意されている。
Swiftと同時に発表されたXcodeバージョン6では、コードの実行結果をグラフィカルに確認しながら開発できるPlaygroundsが実装された。

クレイグ・フェデリギは、Swiftの発表時に「C言語の荷物のないObjective-C」と表現している[3]

サンプルコード編集

Hello World編集

print( "Hello, World!" )  // これだけで動いて、Hello, World! と出力される。

編集

/* 
 * コメントはCスタイルの複数行コメントと…
 */
// C++スタイルの一行コメントの双方をサポートしている

// var name: Type = value でType型の変数nameを宣言し、valueで初期化する
var explicitDouble: Double = 70 // 70.0
 
/// 型が省略された場合は、型推論により初期値の型が適用される
var implicitInteger = 70    // Int
var implicitDouble = 70.0   // Double
 
// let name:Type = value でType型の定数nameにvalueを設定する。
// 型推論可能な場合、型の表記は省略できる。
let theAnswer = 42

// 識別子にはたいていのUnicode文字を用いることができる。
let リンゴの数 = 3
let みかんの数 = 5

// 文字列リテラル"..."の中にある\(expr)には、式exprの内容が展開される
let リンゴ説明 = "私は\(リンゴの数)個のリンゴを持っている。"  // ”私は3個のリンゴを持っている。"
let 果物説明 = "私は\(リンゴの数 + みかんの数)個の果物を持っている。" //"私は8個の果物を持っている。"

// Swiftでは辞書も組み込みでサポートされている。
// 以下は Dictionary<String, Int> 型の定数辞書の定義の一例である。
let people = ["Anna": 67, "Bety": 8, "Jack": 33, "Sam": 25]

// 辞書の内容の列挙は for (key, value) in dict { ... }
for (name, age) in people {
    print("\(name) is \(age) years old.")
}

// メソッドや関数は "func"文法を使って宣言する。
// パラメータ名の付け方に注意。-> で戻り値の型を宣言する
func sayHello(to personName: String) -> String {
    let greeting = "こんにちは、" + personName + "さん"
    return greeting
}
// "こんにちは、サーバーさん"を出力
print(sayHello(to: "サーバー"))

メモリ管理 (Automatic Reference Counting)編集

Swiftでは自動参照カウント (Automatic Reference Counting) ARCでアプリが使うメモリを追跡管理する。ARCはクラスインスタンスが使われなくなった時に自動的にそれが使っていたメモリを開放する。Objective-Cで参照カウント方式を使用する場合のように、明示的にreleaseretainを記述する必要はなく、そもそも記述することができない。

循環参照を回避する方法として、Swiftでは弱い参照を示す修飾子weakunownedが提供される。また、キャプチャリストを使用して、クラス内のクロージャにおける強い参照サイクルを回避することができる[21]

相互運用性編集

SwiftはCocoaObjective-Cをシームレスに使えるように設計されている[22]。SwiftとObjective-Cの間はどちらのAPIからでもお互いに使う事が出来る。

モジュールとしてアクセス可能などんなObjective-Cフレームワーク(又はCライブラリ)でもSwiftに直接インポートできる。

import Foundation

初期化の例

Objective-C
UITableView *myTableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];
Swift
let myTableView: UITableView = UITableView(frame: .zero, style: .Grouped)

Xcode 6以降では、Objective-CとSwiftの相互利用のためのブリッジヘッダーを生成する機能が提供される。ブリッジヘッダーファイルが生成された時点で、Swift側ではObjective-C側で定義された型、関数、変数を、Swiftで書かれたかのように参照できる[23]。Objective-C側では、自動生成ヘッダーファイルをインポートすることでSwiftコードを利用できる[24]。なお、Swiftで書かれたクラスをObjective-C側でサブクラス化することはできない[25]

C言語APIとの互換編集

SwiftからLibcを呼ぶ例

puts("Hello from libc")
let fd = open("/tmp/scratch.txt", O_WRONLY|O_CREAT, 0o666)

if fd < 0 {
    perror("could not open /tmp/scratch.txt")
} else {
    let text = "Hello World"
    write(fd, text, strlen(text))
    close(fd)
}

その他の実装、開発編集

Swift 2.2から、Ubuntuディストリビューション向けの公式ダウンロードが利用可能である。さらに、Swift 5.2.4からはCentOSAmazon Linux等の多くのディストリビューションが追加されている[26]

Swiftがオープンソース化されたことにより、他環境に移植されることが期待されている[27]Webフレームワークとしては、IBMによるKitura英語版Vapor英語版等がすでに存在する。また、アップルによって公式の「Server APIs」ワークグループも開始されており、Swiftの開発メンバーが中心的な役割を担っている[28]

Androidで利用可能な非公式のツールチェーンも存在する[29]

2020年5月29日、AWS LambdaでSwiftを利用可能にする「Swift AWS Lambda Runtime」が公開された[30]

出典編集

  1. ^ 出典URL: https://swift.org/blog/swift-5-4-released/, 閲覧日: 2021年4月26日, 題名: Swift 5.4 Released!, 出版日: 2021年4月26日
  2. ^ 出典URL: https://github.com/apple/swift/releases/tag/swift-5.4-RELEASE, 閲覧日: 2021年4月26日, 題名: Release 5.4, 出版日: 2021年4月26日
  3. ^ a b c Williams, Owen (2014年6月2日). “Apple announces Swift, a new programming language for iOS”. The Next Web. 2014年6月2日閲覧。
  4. ^ Protocol-oriented Programming in Swift. Apple Inc. YouTube.
  5. ^ Introducing Swift”. Apple. 2014年6月2日閲覧。
  6. ^ Chris Lattner's Homepage (2020年6月24日)
  7. ^ Swift Has Reached 1.0 - Swift Blog - Apple Developer
  8. ^ Swift Playgrounds、App Storeで提供開始
  9. ^ Swift Playgrounds、さらに5か国語に対応
  10. ^ Swift 3.1 Released! - swoft.org (2017年3月27日)
  11. ^ [swift-evolution Update on the Swift Project Lead] - Chris Lattner (2017年1月10日)
  12. ^ Swift 4.0 Released! - Ted Kremenek (2017年9月19日)
  13. ^ 「Xcode」をMac App Storeで” (日本語). Mac App Store. 2018年4月2日閲覧。
  14. ^ Xcode 10 includes Swift 4.2, which compiles your software more quickly, helps you deliver faster apps, and generates even smaller binaries. Xcode 10” (英語). Developer. 2018年6月12日閲覧。
  15. ^ Swift.org - Swift 5 Released!” (英語). 2020年3月18日閲覧。
  16. ^ Introducing SwiftUI: Building Your First App - WWDC 2019 - Videos - Apple Developer” (英語). 2020年3月23日閲覧。
  17. ^ Swift.org - Swift 5.1 Released!” (英語). 2020年11月2日閲覧。
  18. ^ Swift.org - Swift 5.2 Released!” (英語). 2020年11月25日閲覧。
  19. ^ Swift.org - Swift 5.3 released!” (英語). 2021年4月13日閲覧。
  20. ^ Introducing Swift on Windows” (英語). 2020年11月2日閲覧。
  21. ^ Automatic Reference Counting — The Swift Programming Language (Swift 5.2)” (英語). 2020年5月25日閲覧。
  22. ^ Using Swift with Cocoa and Objective-C (HTML)”. Apple Inc.. 2014年9月2日閲覧。
  23. ^ Importing Objective-C into Swift”. Apple Inc.. 2020年6月22日閲覧。
  24. ^ Importing Swift into Objective-C”. Apple Inc.. 2020年6月22日閲覧。
  25. ^ Migrating Your Objective-C Code to Swift”. Apple Inc.. 2020年6月22日閲覧。
  26. ^ Swift.org - Download Swift”. 2020年11月2日閲覧。
  27. ^ IBM brings Swift to the cloud, releases web framework Kitura written in Apple’s programming language”. 2020年3月23日閲覧。
  28. ^ Inc., Apple. “Server APIs Work Group”. Swift.org. https://swift.org/blog/server-api-workgroup/ 2020年5月25日閲覧。 
  29. ^ Swift for Android: Our Experience and Tools”. 2021年3月24日閲覧。
  30. ^ “Swift.org - Introducing Swift AWS Lambda Runtime”. https://swift.org/blog/aws-lambda-runtime/ 2020年9月24日閲覧。 

外部リンク編集