BT

Ready for InfoQ 3.0? Try the new design and let us know what you think!

Apple、Swiftをオープンソース化

| 作者: Alex Blewitt フォローする 4 人のフォロワー , 翻訳者 笹井 崇司 フォローする 0 人のフォロワー 投稿日 2015年12月15日. 推定読書時間: 5 分 |

原文(投稿日:2015/12/03)へのリンク

WWDC 2015での約束通り、Appleがプログラミング言語Swiftをオープンソース化した。コードはAppleの新たに作られたGitHubリポジトリに、Apache licenseのもと公開されている。ソースコードはいくつかのリポジトリにわかれている。

SwiftパッケージマネージャSwiftビルドツールも別パッケージで提供され、これらを使ってSwiftコンパイラおよびSwift環境を構築することができる。パッケージマネージャには新しいパッケージマネージャのコミュニティ提案(オープンソースプロジェクトとして成功させようと、Appleがいかに熱心に取り組んでいるかがわかる)とともに詳しい情報がある。PackageDescriptionモジュールは新しい型 Package を導入する。これはバージョンや名前はもちろん、依存関係のリストに関するメタデータを表現する。依存関係がリモートGitリポジトリに対するソース依存関係として表現されている点において、実装はNPMに影響を受けているようだ。ビルド実行すると、依存関係のあるものがチェックアウトされ、静的リンクされたライブラリにコンパイルされ、アプリケーションに取り込まれる。パッケージは新しいswift buildコマンドで起動し、Package.swiftファイルに定義された依存関係のあるものをダウンロードする。依存関係にはセマンティックバージョニング今後強制されるかもしれない)が使われるが、厳密なパッケージバージョンあるいは単一バージョンを指定できるのかまだはっきりしない。ドキュメントのは次のようになっている。

import PackageDescription

let package = Package(
    name: "DeckOfPlayingCards",
    targets: [],
    dependencies: [
        .Package(url: "https://github.com/apple/example-package-fisheryates.git",
                 majorVersion: 1),
        .Package(url: "https://github.com/apple/example-package-playingcard.git",
                 majorVersion: 1),
    ]
)

SwiftはLLVMやClangといったツール上に構築されており、swift-llvmswift-clangswift-lldbswift-cmark(Swiftソースファイルのドキュメント生成に使われる)のフォークがある。AppleにあるSVNの複製とは違ってGitにホストされているおかげで、今後のメンテナンスは非常に簡単になるだろう。

Swiftはコントリビューションを受け入れることでコミュニティを作ろうとしている。新しいブログでは、Swiftの開発に関する情報を提供している。最終的に、これはAppleのメインウェブサイトにあるブログに取って代わるかもしれない。Community Code of Conductcontributor-covenant.orgで定義されているものに基づく)とswift-devswift-corelibs-devなど複数のメーリングリストも用意されている。プロジェクトが公開されてからまだ数時間しか経っていないにもかかわらず、すでに多数のプルリクエストがマージされている

Swiftライブラリは実行ファイルにコピーされるため、アプリケーションが帰属の提供なしに使えるよう、Apache Licenseにランタイムライブラリ例外が加えられている。

(参考訳)例外として、あなたが自分のソースコードをコンパイルするために本ソフトウェアを使い、結果として本ソフトウェアの一部がバイナリ製品に組み込まれる場合、ライセンスの条項4(a)、4(b)、4(d)により必要になるはずの帰属を提供することなく、あなたはその製品を再頒布することができます。

この文が標準のSwift Licenseの末尾に追加されている。このことは標準のApache Licenseに基づいているものの、法的再承認には検討が必要かもしれないことを意味している。こうしたランタイム例外という考え方は目新しいものではない。たとえばOracleはJavaをGPLでライセンスしているが、クラスパス例外が付いており、完全なGPLを使わずにコードをリンクすることを許している。

最後に、AppleによるSwiftのオープンソース化についてひとつ疑問がある。Swiftは他のOSで動くのだろうか。答えはイエスだ。LinuxポートがありSwift.orgのダウンロードページにはUbuntu用のプリビルドバイナリが置かれている。ただし、OSXポートほど機能はそろっていない。

Linux上のSwiftはObjective-Cランタイムに依存しておらず、それを含んでもいません。SwiftはObjective-Cが存在するときには密に連携するよう設計されましたが、Objective-Cランタムが存在しない環境でも動くように設計されました。

幸いにして、あなたはREPLを使ってSwiftアプリケーションをLinux上で実行、デバッグすることができ、LinuxとSwiftを簡単に始めることができる。ただし、欠けているものもいくつかある。たとえば、Objective-Cブリッジを必要とするもの(内部でNSStringの実装を使っている一部String APIや、@objcのマーク付きのクラスなど)は、今のところLinuxでは動かない。またAPI可変引数のサポートなど一般的なC APIとの断絶や、GitHubプロジェクトで取り組み中のlibdispatch機能の制限もある。

SwiftがAppleエコシステムの外でも使えるようになった今、あなたはSwiftを学ぶことに興味はあるだろうか。

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション
BT