(Translated by https://www.hiragana.jp/)
Swift (プログラミング言語) - Wikipedia コンテンツにスキップ

Swift (プログラミング言語げんご)

出典しゅってん: フリー百科ひゃっか事典じてん『ウィキペディア(Wikipedia)』
Swift
Swift
Swiftのロゴ
パラダイム 関数かんすうがたプログラミング命令めいれいがたプログラミングオブジェクト指向しこうプログラミング、マルチパラダイムプログラミング、block-structured programming、宣言せんげんがたプログラミング ウィキデータを編集
登場とうじょう時期じき 2014ねん6がつ2にち (2014-06-02)
開発かいはつしゃ クリス・ラトナー、Apple ウィキデータを編集
最新さいしんリリース 5.10.1 / 2024ねん6がつ5にち[1]
型付かたつ つよ静的せいてき型付かたつかた推論すいろん
影響えいきょうけた言語げんご RustHaskellRubyObjective-CPythonC SharpCLUC++JavaScalaSmalltalkGroovyD言語げんご ウィキデータを編集
プラットフォーム macOSiOSLinuxMicrosoft Windows 10iPadOStvOSwatchOSMicrosoft WindowsvisionOS ウィキデータを編集
ライセンス Apache-2.0、Apache License ウィキデータを編集
ウェブサイト
拡張子かくちょうし swift ウィキデータを編集
テンプレートを表示ひょうじ

Swift(スウィフト)は、AppleiOSおよびmacOSLinuxWindows利用りよう出来できプログラミング言語げんごである。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ねんLLVMClang始祖しそであるChris Lattner英語えいごばんによって開発かいはつはじめられた。ChrisはSwiftについて「Objective-CRustHaskellRubyPythonC#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になるまえ最後さいごのリリースである。

特徴とくちょう[編集へんしゅう]

AppleはSwiftの発表はっぴょうさいして「モダン、安全あんぜん[22]高速こうそく、インタラクティブ」をおおきな特徴とくちょうとしてげた[2]

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

クレイグ・フェデリギは、Swiftの発表はっぴょうに「C言語げんご荷物にもつのないObjective-C」と表現ひょうげんしている[2]

サンプルコード[編集へんしゅう]

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提供ていきょうされる。また、キャプチャリストを使用しようして、クラスないのクロージャにおけるつよ参照さんしょうサイクルを回避かいひすることができる[23]

相互そうご運用うんようせい[編集へんしゅう]

SwiftはCocoaObjective-Cをシームレスに使つかえるように設計せっけいされている[24]。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でかれたかのように参照さんしょうできる[25]。Objective-Cがわでは、自動じどう生成せいせいヘッダーファイルをインポートすることでSwiftコードを利用りようできる[26]。なお、SwiftでかれたクラスをObjective-Cがわでサブクラスすることはできない[27]

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ひとしおおくのディストリビューションが追加ついかされている[28]

Swiftがオープンソースされたことにより、環境かんきょう移植いしょくされることが期待きたいされている[29]Webフレームワークとしては、IBMによるKitura英語えいごばんVapor英語えいごばんひとしがすでに存在そんざいする。また、Appleによって公式こうしきの「Server APIs」ワークグループも開始かいしされており、Swiftの開発かいはつメンバーが中心ちゅうしんてき役割やくわりになっている[30]

Android利用りよう可能かのう非公式ひこうしきツールチェーン存在そんざいする[31]

2020ねん5がつ29にちAWS LambdaでSwiftを利用りよう可能かのうにする「Swift AWS Lambda Runtime」が公開こうかいされた[32]

注釈ちゅうしゃく[編集へんしゅう]

出典しゅってん[編集へんしゅう]

  1. ^ 出典しゅってんURL: https://github.com/apple/swift/releases/tag/swift-5.10.1-RELEASE, 出版しゅっぱん: 2024ねん6がつ5にち
  2. ^ a b c Williams, Owen (2014ねん6がつ2にち). “Apple announces Swift, a new programming language for iOS”. The Next Web. 2014ねん6がつ2にち閲覧えつらん
  3. ^ Protocol-oriented Programming in Swift. Apple Inc. YouTube.
  4. ^ Introducing Swift”. Apple. 2014ねん6がつ2にち閲覧えつらん
  5. ^ Chris Lattner's Homepage (2020ねん6がつ24にち)
  6. ^ Swift Has Reached 1.0 - Swift Blog - Apple Developer
  7. ^ Swift Playgrounds、App Storeで提供ていきょう開始かいし
  8. ^ Swift Playgrounds、さらに5かこく対応たいおう
  9. ^ Swift 3.1 Released! - swoft.org (2017ねん3がつ27にち)
  10. ^ [swift-evolution Update on the Swift Project Lead] - Chris Lattner (2017ねん1がつ10日とおか)
  11. ^ Swift 4.0 Released! - Ted Kremenek (2017ねん9がつ19にち)
  12. ^ 「Xcode」をMac App Storeで”. Mac App Store. 2018ねん4がつ2にち閲覧えつらん
  13. ^ 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にち閲覧えつらん
  14. ^ Swift.org - Swift 5 Released!” (英語えいご). 2020ねん3がつ18にち閲覧えつらん
  15. ^ Introducing SwiftUI: Building Your First App - WWDC 2019 - Videos - Apple Developer” (英語えいご). 2020ねん3がつ23にち閲覧えつらん
  16. ^ Swift.org - Swift 5.1 Released!” (英語えいご). 2020ねん11月2にち閲覧えつらん
  17. ^ Swift.org - Swift 5.2 Released!” (英語えいご). 2020ねん11月25にち閲覧えつらん
  18. ^ Swift.org - Swift 5.3 released!” (英語えいご). 2021ねん4がつ13にち閲覧えつらん
  19. ^ Introducing Swift on Windows” (英語えいご). 2020ねん11月2にち閲覧えつらん
  20. ^ Hudson, Paul (2021ねん6がつ6にち). “What's new in Swift 5.5?”. HackingWithSwift.com. Hacking with Swift. 2021ねん7がつ29にち閲覧えつらん
  21. ^ Swift.org - Swift 5.10 Released” (英語えいご). 2024ねん4がつ11にち閲覧えつらん
  22. ^ kojima (1970ねん1がつ1にち). “Swiftとは?フリーランスの仕事しごと内容ないよう年収ねんしゅう案件あんけん獲得かくとくするための方法ほうほう解説かいせつ”. xhours - フリーランスエンジニアけの求人きゅうじん案件あんけん検索けんさくサイト. 2023ねん12月28にち閲覧えつらん
  23. ^ Automatic Reference Counting — The Swift Programming Language (Swift 5.2)” (英語えいご). 2020ねん5がつ25にち閲覧えつらん
  24. ^ Using Swift with Cocoa and Objective-C” (HTML). Apple Inc.. 2014ねん9がつ2にち閲覧えつらん
  25. ^ Importing Objective-C into Swift”. Apple Inc.. 2020ねん6がつ22にち閲覧えつらん
  26. ^ Importing Swift into Objective-C”. Apple Inc.. 2020ねん6がつ22にち閲覧えつらん
  27. ^ Migrating Your Objective-C Code to Swift”. Apple Inc.. 2020ねん6がつ22にち閲覧えつらん
  28. ^ Swift.org - Download Swift”. 2020ねん11月2にち閲覧えつらん
  29. ^ IBM brings Swift to the cloud, releases web framework Kitura written in Apple’s programming language”. 2020ねん3がつ23にち閲覧えつらん
  30. ^ Inc., Apple. “Server APIs Work Group”. Swift.org. https://swift.org/blog/server-api-workgroup/ 2020ねん5がつ25にち閲覧えつらん 
  31. ^ Swift for Android: Our Experience and Tools”. 2021ねん3がつ24にち閲覧えつらん
  32. ^ “Swift.org - Introducing Swift AWS Lambda Runtime”. https://swift.org/blog/aws-lambda-runtime/ 2020ねん9がつ24にち閲覧えつらん 

外部がいぶリンク[編集へんしゅう]