BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Swift 4.1でジェネリクス、コンパイラ最適化、Package Managerが強化された

Swift 4.1でジェネリクス、コンパイラ最適化、Package Managerが強化された

ブックマーク

原文(投稿日:2018/03/30)へのリンク

読者の皆様へ:ノイズを減らすための一連の機能を開発しました。関心のあるトピックについて電子メールとWeb通知を受け取ることができます新機能の詳細をご覧ください。

Swift 4.1が正式に利用可能になり、新しい言語機能、ビルドオプション、Swift Package ManagerとFoundationに対するいくつかの拡張機能が導入された。

InfoQがこれまでに報告したように、Swift 4.1がXcode 9.3ベータ版で事前に利用可能になったとき、言語レベルで最も重要な新機能は条件付き適合であった。条件付き適合によって、開発者は、型パラメータが所定の要件を満たす場合にのみ、ジェネリック型がプロトコルに準拠することを指定できる。これはジェネリックアダプタ型を定義する可能性を考慮すると重要である。ジェネリックアダプタ型とは、コンポーネント型のAPIの一部を公開するコレクション型などの、複合型の機能を反映するジェネリック型である。

Swift 4.1におけるジェネリック型のもう一つの強力な拡張は、関連型に対して再帰の制約を指定できることである。Swiftの関連型は、プロトコル仕様では、知らない型のプレースホルダとして使用され、代わりにプロトコルが適合するときに提供される。たとえば、Item関連型を使用するContainerプロトコルを次に示する。

protocol Container {
    associatedtype Item
    mutating func append(_ item: Item)
    var count: Int { get }
    subscript(i: Int) -> Item { get }
}

オプションとして、Itemは、特定の型またはプロトコルに制約されてもよい。例を次に示す。

protocol Container {
    associatedtype Item : Bar
    ...
}

Swift 4.1より前のバージョンでは、関連型の型制約あるいはプロトコル制約は、定義されているプロトコルを再帰的に参照できなかった。Swift 4.1ではその制限が解除され、次の再帰的なプロトコルが可能になる。

protocol Container {
    associatedtype Item : Container
    ...
}

Swift 4.1の他の新しい言語機能には次のようなものがある。

コンパイラフロントでは、既にサポートされている速度最適化に加えて、Swift 4.1がコードサイズ最適化モードをサポートするようになった。新しい最適化オプションは、モジュール全体でもシングルファイルコンパイルモードでも動作し、前者は最適な結果を提供する。Appleによると、これによって、あるプロジェクトではコードサイズが5%から30%に縮小される可能性がある。

最後に、Swift 4.1ではPackage Managerの機能が強化された。つまり、sshhttpなどの異なるプロトコルを使用するパッケージグラフの依存関係を正しく解決するようになった。さらに、共有されている依存関係の処理が高速になった。

Swift 4.1はmacOSのXcode 9.3で利用でき、公式のバイナリはUbuntuで利用可能である

 
 

Rate this Article

Adoption Stage
Style
 
 

この記事に星をつける

おすすめ度
スタイル

BT