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

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

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

カテゴリ / テンプレート

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

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

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

歴史

Swiftは2010年にLLVMClangの始祖であるChris Lattner英語版によって開発が始められた。ChrisはSwiftについて「Objective-CRustHaskellRubyPythonC#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 は、Async/awaitの言語サポートを大幅に拡張し、また独自のバージョンのアクターモデルを導入している 。

2024年3月5日、Swift 5.10がリリースされた。言語の並行処理モデルが改善され、データ競合回避のために完全にデータ分離を行うことが可能になっている。これはSwift 6になる前の最後のリリースである。

特徴

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

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

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

サンプルコード

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 型の定数辞書の定義の一例である。 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が提供される。また、キャプチャリストを使用して、クラス内のクロージャにおける強い参照サイクルを回避することができる。

相互運用性

SwiftはCocoaObjective-Cをシームレスに使えるように設計されている。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で書かれたかのように参照できる。Objective-C側では、自動生成ヘッダーファイルをインポートすることでSwiftコードを利用できる。なお、Swiftで書かれたクラスをObjective-C側でサブクラス化することはできない。

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等の多くのディストリビューションが追加されている。

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

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

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

注釈

出典

外部リンク

Tags:

プログラミング言語 Swift 歴史プログラミング言語 Swift 特徴プログラミング言語 Swift サンプルコードプログラミング言語 Swift メモリ管理 (Automatic Reference Counting)プログラミング言語 Swift 相互運用性プログラミング言語 Swift その他の実装、開発プログラミング言語 Swift 注釈プログラミング言語 Swift 出典プログラミング言語 Swift 外部リンクプログラミング言語 SwiftAppleC言語IOSLinuxMacOSMicrosoft WindowsObjective-CWorldwide Developers Conferenceオペレーティングシステムプログラミング言語ランタイムライブラリ

🔥 Trending searches on Wiki 日本語:

ダンワールド荻野目洋子Instagramオナニー野村麻純中田正子埼玉西武ライオンズ竜星涼全裸監督魔法使いの夜五福星田中みな実月が導く異世界道中花澤香菜名探偵コナン ハロウィンの花嫁愛してたって、秘密はある。清原果耶ブルーロック森香澄CLANNAD (ゲーム)エミューキム・スヒョン (1988年生の俳優)床田寛樹緒方耕一急性動脈閉塞症天野浩成長徳の変戸田恵梨香橋本淳 (俳優)千葉雄大木戸大聖坂本龍馬必殺シリーズ石橋静河坂本勇人黒羽快斗YouTube新田真剣佑ダルビッシュ有キム・ジウォン山路和弘日本黒柳徹子壱番屋桂由美河北彩伽南後杏子ガールズバンドクライニコール・キッドマン川崎市登戸通り魔事件仲村宗悟ザ・プラン9東京都区部コシノジュンコデーブ・ロバーツ (外野手)菊池こころスカイレールサービス広島短距離交通瀬野線三浦春馬BABYMONSTER愛新覚羅溥儀島崎遥香田中真美子藤圭子出口夏希神戸連続児童殺傷事件マダックス (記録)明治天皇十倉雅和若葉克実SEVENTEEN (音楽グループ)チエ・カジウラ悠木碧片山萌美アメリカ同時多発テロ事件与謝野晶子岡本綾QRコード🡆 More