bbs
oopers.com
5456 OOPer: 2015-12-05 21:48:35 1
Open Source Swift
現地時間(Apple標準時はPST)の12/3(日本時間だと12/4になってしまっていたと思うのだが、まぁ、1分ごとにチェックを入れていたわけではないので詳細は不明)に、ついにOpen Source化されたSwiftが発表された。
Swift.org

詳細はリンクを辿ってもらうとして、日本語の情報もまだ少ないのであれこれ。

- ライセンスはApache 2.0 license with a Runtime Library Exception
※うちのサイトはリンクを入れるのが面倒なので、原文を見たい方は上のリンクから辿っていただきたい。そうわかりにくい場所ではない。(以下すべて同文。)

 基本はソースコードの公開が強制されるApache 2.0ライセンスだが、
「例外として、当ソフトウェアをソースコードのコンパイルに利用し、結果として最終的なバイナリー製造物に当ソフトウェアの一部が埋め込まれている場合には、そのような製造物をライセンスの節4(a), 4(b), 4(c)にて通常要求される付加項目を提供することなく再配布が可能であるものとする。」(ちなみに4の(a)(b)(c)は、それぞれ、ライセンスの表示、改変部分の表示、改変後のソースコードの提供義務を表す。)という付加事項が明記されている。
 ま、オープンソースのプログラミング言語(およびライブラリー)のライセンスにはいかにもありそうだが、自分でソースいじったコンパイラーでビルドしたアプリの配布に関して、ライセンス上の問題はないですよ、という宣言だな。あくまでも「ライセンス上の」であることに注意。

- SwiftがLinuxに移植されたからといってiOSアプリの開発がLinux上でできるわけではない

 App Storeに乗っけるためにはProvisioning Profileの取得やら、それを含めたCode Signingやらで、Appleの提供するツール(基本的には全部Xcodeに含まれている)をOS X上で実行することが必要になる。今後はLinux上でiOSアプリの開発ができるようになると勘違いしてはいけない。
 Linux版のSwift(言語を含むツールセットとライブラリー)を使えば、Linux上でLinuxをターゲットしたアプリがSwiftで開発できる、ま、Linux上の他の諸々の言語と変わらぬ位置づけなのである。PlaygroundこそないもののREPLは動くそう(今手元にUbuntuマシンがないのですぐには試せない…ビルド済みバイナリーは最新版(または最新LTS版)のUbuntuだけが対象、それ以外の方は自分で要ビルド、Clang/LLVMのビルド経験者ならそれほど苦労はないと思うがやったことはないので保証はできない)なので、スクリプト言語の感覚であれこれ試すことはできると思うぞ。

- Foundationに相当するフレームワークがCore librariesとして開発中

 SwiftアプリではArrayを必要に応じてNSArrayに変換して処理する、なんてことがちょくちょく行われる訳だが、Linux版ではどうするんだろうと思っていたら、Foundationに相当するCoreLibraryを全部Swiftで書き直して提供するという暴挙(or快挙)に出た。UIKitやAppKitの主要クラスが提供されるわけではないが、Foundation内のメジャーなクラスはほぼ網羅している。Objective-Cのランタイムは一切使用していないということなんで、細かい挙動ではあちこちさが出るだろうが、この動きはかなり興味深い。その気になれば、UIKit, AppKitのほとんどをObjective-C非依存にできるのではなかろうか…。ソースコードを見る限り、まだまだ完成度は低そうである。
 ちなみにiOS/OSXでコアOS機能を呼び出すためのフレームワークはDarwinだった(FoundationやUIKit/Cocoaなどをimportすると依存フレームワークとして自動的にimportされちゃうので、普通の人だけでなくシステムプログラムをSwiftで書こうなんて人間でさえめったに使わないが)が、Linux版ではGlibcだそうである。通常のANSIで標準化されたC言語ライブラリー(glibcには限らないみたい)のほとんどはimport Glibcで使えるようになるようだ。

- プリプロセッサ用のOS判定は、os(Linux)

 ePub版のSwift本がDLできるようになっていたのだが、この辺はまだ明記されていないんじゃないかと思う。(なんか読みにくいのでほとんどちゃんと見ていない。)
#if os(Linux)
//...
#else
//...
#endif

なんぞと記述することで、プラットフォーム別の処理を記述可能。
 そう遠くないうちにos(Windows)なんてのも追加されることになるだろうと思う。os(Android)の方が早いかもしれない。

- Swift Package Managerなる新プロジェクトが始動中

 PHPのPECLだのRubyのGemだの.NETのNuGetだの、Swiftを使うプロジェクト間でプラットフォームを横断して使えるパッケージマネージャーとして育てたいんだと思う。うまい方向に発展してくれれば良いのだが、どうもSwiftにコアメンバーの中には頭の固い原理主義者がいるようなんで、さて使い物になっていくのかどうか。とりあえず現時点では「プロジェクトを作ったよと宣言しただけ」と思った方が良い。

- 意見交換はmailing listにて

 古式ゆかしいオープンソースプロジェクトとしては普通なんだろうが…。あまりにも数が多いので、とりあえず以下の3つにだけ参加しておいた。
swift-user
Swiftって言語に興味を持つ一般向け
swift-dev
Swiftそのものの開発
swift-evolve
Swift言語への新機能の追加に関する議論

ちなみに最初に紹介したSwift.orgサイトは負荷が高すぎるのか、しょっちゅうアクセス不能になる。懲りずに数時間おきくらいにアクセスしてみていただきたい。