swift.isOpenSource == true
今回はProtocol Oriented Programmingを紹介する予定でしたが、ここで緊急のお知らせです。と言ってもこれが記事に反映されるのは1ヵ月以上先ではあるのですが[1]、それを考慮しても予定を変更するだけの価値があるでしょう。Swiftにとってそれ自体のリリースの次に重要なニュースなのですから。
2015年12月3日(日本時間では翌4日)、Swiftはオープンソースとして公開されました。
[Swift is Open Source ]
- [Swift.org] ‒ a site dedicated to the opensource Swift community
- Public source code repositories at [github.com/apple]
- A new Swift package manager project for easily sharing and building code
- A Swift-native core libraries project with higher-level functionality above the standard library
- Platform support for all Apple platforms as well as Linux
抄訳すると、次のとおりです。
オープンソースSwift専用サイト、[Swift.org]の開設(図1)
GitHubにおけるソースコード公開(図2)
Swiftパッケージマネージャープロジェクト開始
Swiftネイティブ標準ライブラリ以上の高機能ライブラリプロジェクト開始
すべてのAppleデバイスに加え、Linuxのサポート
クリスマスを待たずして、公約は果たされたわけです。
Swift on Linux:Getting Started
オープンソースとなった意義はこの後じっくり吟味するとして、まずは実際に試してみましょう。もちろんオープンソースだけあって、図2のWebページの解説に従ってソースからビルドしても良いのですが、引数なしのデフォルトのutils/build-script
をそのまま実行すると、16GBのメモリ、64GB程度の空き容量が必要でした。仮想マシンだとちょっと荷が重い。-Rをつけてデバッギングシンボルなしのリリースビルドだとそこまでリソースは食わないのですが、幸いにしてビルド済みのbinary snapshotをAppleが用意してくれているので今回はそれを利用することにします。
用意するもの
64-bit版のUbuntu 14.04 LTSまたはUbuntu 15.10
いずれはもっと多くのプラットフォームでサポートさせるはずですが、執筆現在、Mac以外のプラットフォームで正式サポートされているのはLinuxそれもUbuntuだけです。とはいえオープンソースなプラットフォームとしては最も普及しているものでもあり、導入の敷居は低いでしょう。GUIは含まれていないのでデスクトップ版ではなくサーバ版でもかまいませんし、仮想マシンでもかまいません。筆者はVMware FusionでRAM 2GB、仮想ディスク16GBの仮想マシンで動かしています。
clangのアップデート(14.04 LTSのみ)
Ubuntu 15.10では不要のようです。
ダウンロード
あとは、図2のWebページからLatest Development Snapshotをダウンロードし、適当なところに解凍すれば準備完了です。ここでは配布物全体を̃/swift
に置いています。全部で90MB弱。clangなどが含まれていないとはいえ、意外とコンパクトです。
なお、Tarballは執筆現在のものであり、本稿が読者の皆さんに届くころには変わっている可能性があるのでご注意を。
REPL
それでは、早速ターミナルから、
と叩けば、REPLが起動します。フルパスが面倒なら、
などで̃/swift/usr/bin
をパスに追加しておけば、swift
だけでOKです。
Rubyにおけるirb
や引数なしのpython
を実行したのと同様に、対話的にSwiftを使うことができます(図3)。
Tips
このREPL、irb
やインタラクティブモードのpython
と比べると、少しモダンになっています。
関数/メソッド補完
そのひとつは、関数やメソッドを補完してくれることです。たとえば1.
と打った後で[Tab]を打つと……、
...Intのインスタンスメソッドが表示されますし、さらにsu
と打って[Tub]tを打つと、.successor()
まで補完してくれます。
ブロック編集のサポート
SwiftのREPLのヒストリーは、行単位ではなくブロック単位です。たとえば、
この状態で[↑]キーを押すと、3行に渡るこのブロックが丸ごと再表示されます。reduce(0)
をreduce(1)
に、$0 + $1を$0 * $1
に編集して、最後に}
の後ろまでカーソルを移動してから[Enter]キーを押すと……、
となります。ブロックの終了、つまり}
以前にリターンした場合、そのまま行挿入もできます。
import Glibc
Swiftは強力な言語です。しかしPerlやPythonやRubyなどのスクリプト言語と異なり、生のSwiftは三角関数を1つサポートしていません。
新規playgroundで、iOSならimport UIKit
、OS Xならimport Cocoa
という「呪文」が最初から入っているのは、そのためです。残念ながらLinux版のSwiftにはまだplaygroundはないのですが、Linuxでは何をインポートするのがそれに相当するのでしょうか?
import Glibc
だそうです。連載第7回で筆者が予想したimport POSIX
ではなく。
これを#if
と組み合わせると、クロスプラットフォームなSwiftコードが書けそうです。リスト1のコードは、Linuxと OS X双方でchmod+x
したうえでスクリプトとして実行可能で、swiftc pi.swift
でコンパイルしても動くことを確認しました。
あらためて、オープンソースであるということ
公約どおり、Swiftはオープンソースとなりました。ここで2つの疑問が湧いてきます。
- なぜ、オープンソースにしたのか?
- なぜ、はじめからオープンソースにしなかったのか?
この2つの疑問に対し、連載第7回時点の筆者はこう答えています。
食えなきゃ誰も食ってくれない。オープンでなければ、誰も食いつづけてくれない。
WWDC2014におけるデビューからわずか1年半、iOSとOS Xのリリースサイクルわずか1回分で、SwiftはiOSアプリ開発における第一言語となっています。オープンソースとなる前から、「食える言語」という地位は、すでに確立したわけです。しかし、Xcode以外の実装を持たなかったSwiftは、真の意味での汎用言語ではありませんでした。「どんなプログラムでも書ける」では汎用言語としては十分ではありません。「どんなプラットフォーム上でも」も成立して、はじめて汎用と呼べるのです。オープンソース化は、そのための最短距離でもあります。Apple自身はLinux、それもUbuntuしか現時点でサポートしていませんが、リリースから1日も経たずして、すでにGitHubでは他のプラットフォームへの移植が雨後の筍のように始まっています。「言語の普及競争において、Swiftほど高いオッズを持つ言語が見当たりません」と連載第7回時点で筆者は言いましたが、オープンソース化の公約を果たした今、オッズはさらに高まったのは確かでしょう。
Appleプラットフォームとは無縁だった読者も、今後本連載はスルーできなくなったのではないでしょうか。
- 第1特集
MySQL アプリ開発者の必修5科目
不意なトラブルに困らないためのRDB基礎知識
- 第2特集
「知りたい」「使いたい」「発信したい」をかなえる
OSSソースコードリーディングのススメ
- 特別企画
企業のシステムを支えるOSとエコシステムの全貌
[特別企画]Red Hat Enterprise Linux 9最新ガイド
- 短期連載
今さら聞けないSSH
[前編]リモートログインとコマンドの実行
- 短期連載
MySQLで学ぶ文字コード
[最終回]文字コードのハマりどころTips集
- 短期連載
新生「Ansible」徹底解説
[4]Playbookの実行環境(基礎編)