Swift (プログラミング言語)
Swift(スウィフト)は、AppleのiOSおよびmacOS、Linux、Windowsで利用出来るプログラミング言語である。Worldwide Developers Conference (WWDC) 2014で発表された。Apple製OS上で動作するアプリケーションの開発に従来から用いられていたObjective-CやObjective-C++、C言語と共存できるように、共通のObjective-Cランタイムライブラリが使用されている[2]。 Swiftは、動的ディスパッチや動的バインディング等のObjective-Cの特長を受け継いでいる一方で、Objective-Cより「安全」にバグを捕捉できることも意図している。また、タイプや構造体、クラスに適用可能なプロトコルによるシステムの拡張性の概念は「プロトコル指向プログラミング」と呼ばれる[3] 。 Swiftは、マルチパラダイムのコンパイラプログラミング言語であるが、XcodeのPlaygroundsの上やターミナルでインタラクティブにデバッグする事が可能である。 LLVMコンパイラが使われており、ライブコーディングに対応していることが特徴[4]。 歴史Swiftは2010年にLLVMとClangの始祖であるChris Lattnerによって開発が始められた。ChrisはSwiftについて「Objective-C、Rust、Haskell、Ruby、Python、C#、CLU、その他多くの言語からアイデアを得た」と述べている[5]。 その後Apple社内での4年間の開発期間を経て、2014年のWWDCにおいて一般に発表され、同時にAppleに開発者登録している開発者に対してベータ版の提供が開始された。 2014年9月9日、SwiftはXcode 6.0ゴールデンマスター版でマイルストーン1.0に到達した[6]。 2015年12月3日、SwiftはApache 2.0ライセンスのもとでオープンソース化され、プロジェクトのホストとして Swift.org[※ 1] が作成された。 WWDC 2016の基調講演で、AppleはSwiftでのコード作成方法を教えることを目的とした、Swift Playgroundsという名称のiPad専用アプリ開発を発表した。2016年9月にリリースされた[7]このアプリは3Dビデオゲームのようなインタフェースで表示され、コードの行が特定の順序で配置され実行されたときにフィードバックを提供する。2017年3月21日、Swift 3.1に対応し、日本語を含め5カ国語に対応したことを発表[8]。Swift 3.1は、2017年3月27日にリリースされた[9]。 2017年、Project Leadは、Chris Lattner同様にLLVMとClangの開発者である、AppleのTed Kremenekである[10]。 2017年9月19日、Xcode 9.0とともにSwift 4がリリースされた[11]。組み込みのクラスやデータ構造に変更が加えられている。Swift 3で書かれたソースコードはXcodeに搭載された移行機能を使って更新できる。その後、2018年3月29日に、Xcode 9.3とともにSwift 4.1が[12]、2018年6月4日にXcode 10 betaとともにSwift 4.2がリリースされた[13]。 2019年3月25日、Xcode 10.2とともにSwift 5がリリースされた。バイナリインタフェースの安定化が図られ、Appleが提供するOSにSwiftランタイムが標準で含まれることになる[14]。ソースコードはSwift 4.xと互換性がある。 WWDC 2019にて、Appleのプラットフォーム向けの新しいフレームワークとしてSwiftUIが提唱された[15]。 2019年9月20日、Xcode 11.0とともにSwift 5.1がリリースされた。モジュールの安定化が図られ、Swiftの将来のバージョンで機能するバイナリフレームワークの作成、共有が可能になる[16]。 2020年3月24日、Xcode 11.4とともにSwift 5.2がリリースされた[17]。 2020年9月16日、Swift 5.3がリリースされ[18]、その約1週間後の9月22日、Windowsが公式にサポートされた[19]。 2021年のWWDCで、Appleから正式に発表された Swift 5.5 は、Async/awaitの言語サポートを大幅に拡張し、また独自のバージョンのアクターモデルを導入している [20]。 2024年3月5日、Swift 5.10がリリースされた[21]。言語の並行処理モデルが改善され、データ競合回避のために完全にデータ分離を行うことが可能になっている。これはSwift 6になる前の最後のリリースである。 2024年9月17日、Swift 6.0がリリースされた[22]。 特徴AppleはSwiftの発表に際して「モダン、安全[23]、高速、インタラクティブ」を大きな特徴として挙げた[2]。
クレイグ・フェデリギは、Swiftの発表時に「C言語の荷物のないObjective-C」と表現している[2]。 サンプルコードHello Worldprint( "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で参照カウント方式を使用する場合のように、明示的に 循環参照を回避する方法として、Swiftでは弱い参照を示す修飾子 相互運用性
SwiftはCocoaやObjective-Cをシームレスに使えるように設計されている[25]。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で書かれたかのように参照できる[26]。Objective-C側では、自動生成ヘッダーファイルをインポートすることでSwiftコードを利用できる[27]。なお、Swiftで書かれたクラスをObjective-C側でサブクラス化することはできない[28]。 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からはCentOS、Amazon Linux等の多くのディストリビューションが追加されている[29]。 Swiftがオープンソース化されたことにより、他環境に移植されることが期待されている[30]。Webフレームワークとしては、IBMによるKitura、Vapor等がすでに存在する。また、Appleによって公式の「Server APIs」ワークグループも開始されており、Swiftの開発メンバーが中心的な役割を担っている[31]。 Androidで利用可能な非公式のツールチェーンも存在する[32]。 2020年5月29日、AWS LambdaでSwiftを利用可能にする「Swift AWS Lambda Runtime」が公開された[33]。 注釈出典
外部リンク
|
Portal di Ensiklopedia Dunia