2014年06月03日 22:00 [Edit]

why(matters(Swift) > matters(Yosemite + iOS[8]))

新HWの発表ゼロ!?」なんて言っている場合じゃない。

YosemiteiOS 8も、さらに次のヴァージョンが出るまで、高々1年半かそこらの問題だけど、Swiftは少なくとも向こう10年、いや言語というものの性格からして何十年に及ぶことなのだから。


Swiftってどんな言語?

とりあえず、なるべくわざとらしく書いたFizzBuzzの例。

struct Fizz {
    subscript(n:Int) -> String { return n % 3 == 0 ? "Fizz" : "" }
}
struct Buzz {
    subscript(n:Int) -> String { return n % 5 == 0 ? "Buzz" : "" }
}
let fizzbuzz = { (n:Int) -> String in
    let (f, b) = (Fizz(), Buzz())
    var fb = f[n] + b[n]
    if fb.isEmpty { fb = "\(n)" }
    return fb
}
for n in 1...30 {
    println(fizzbuzz(n))
}
  • ざっと表面をなでた限りで、一番近いのはrust。次に近いのがScala。そこからやや距離をおいて、Goと印象。
  • だけどSwiftには、rustにもScalaにもgoにもない、重大な特長が一つある。それはmain()が不要だということ。これはむしろスクリプト言語の特徴ではないか。本当の一行野郎one-linerもこれで書ける。
  • それでは複数ソースファイルに分かち書きされたプログラムのエントリーポイントをどう決めているのかというと、少なくともXcode上ではmain.swiftというファイル名で決めているようだ。これは実に懸命なやり方だ。これなら何百万行におよぶOSやブラウザークラスの巨大プロジェクトから、前述の一行野郎までカヴァーできる。
  • それにも勝る特徴が、「親言語」に相当する言語の「しまった」をさりげなく直しているところ。0..3[0,1,2][0,1,2,3]0...3と書くところとか、case文でbreakをいちいち書かずともbreakして、させない場合はfallthroughと書くところだとか、{key:value}でなく[key:value]で、{}はブロック専用なところだとか。
  • しかし一番の特長は、親言語のいいとこ取りに徹していて、「これぞSwift!」という特徴に欠いているところ。「イケメンのツラは特徴に乏しくて覚えられない」という旨の台詞が出てきたのは「Cryingフリーマン」だったっけ。普通の醤油ラーメンの味。激辛エスニックフード好きにはむしろ物足りないかも知れない。

そして最後の特長こそが、Appleの秘めた野望の発露に私には感じられる。これまでのApple発言語というのは、HyperTalk - WikipediaにせよAppleScriptにせよ、一目見て「あれだ!」とわかる体裁をしていた。好き嫌いがはっきり別れる、「激辛エスニック」だったのである(dylanは論評できるほど使ってないけど)。

Swiftはそれと真逆だ。C(++)?erもJava(Scrip)?erもLisperもPerl MongerもPythonistaもRubyistも、はじめてなのによく知っているcompletely new but instantly familiarという気持ちになるのではないか。

Appleの狙い。それはプログラムという所行を、未来にある普通のことにすることだ。

えー?

App Storeでユーザーもデベロッパーもがっちがちに囲い込んでるAppleが、まっさかー!

正直その考えに及んだ時、私ですらそう思ったし、やっぱりAppleは未来永劫ホテル・カリフォルニアにユーザーを閉じ込めておくつもりだという「常識」が正しい可能性は低くない。

しかし我々はインターネットを通して学んでもいるのである。

「裸の自由」に耐えられる人は、ほとんどいないことを。

コードというのは、ヤバイものなのである。正の方向にも邪の方向にも。

Unixを生み育んで来た人々は、それをこう表現している。「Unixには自分の足を撃つ自由がある」、と。

しかし、憲法修正第2条を要する米国でさえ、武器の所持はなにもかも自由というわけではない。

そして悲しいかな、一旦解禁された自由を再び禁じるのは無理ゲーに限りなく近いのだ。

その結果が、これだ。

This is particularly important for Android which dominates the mobile malware market

AndroidはデスクトップOS主導のインターネット普及の教訓を活かすことで普及した一方、負の教訓を活かす機会を逸してしまったのである。

iOS 8では、いろいろなものが解禁される。ExtensionsにCustom Keyboards…Androidユーザーからしたら「いまさらIntent?」「いまさらキーボード?」でもある。しかしもしたとえば黎明期にこれらが解禁されていて、Simeji for iOSが出ていたら一体どうなっていたか?最悪Sacco di App Storeである。

今回の発表で、今はAppleと契約した魔法少年少女のみの特権であるアプリのリリースを、将来どのように一般ユーザーに開放していくのかが見えたように思う。一般ユーザーアプリはiCloud Driveにおかれ、そのDriveにひも付けされたApple IDによってコードサイニングされてはじめて一般アクセス可能になるという形態を取るのだろう。

今回発表された「βテスター用ストア」からそこまでは、わずか半歩。

そこで用いられる言語として、Objective-Cというのは荒野のガンマンすぎる。

JavaScriptも、しかり。

私自身は、まだインターネットがWild WestどころかTerra Incognitaだった頃からの住人である。実のところ20世紀終盤はMicrosoftの、そして21世紀初頭はGoogleの、物事の進め方の方こそ自然に感じるし、だからこそ完全クラウド化には踏み切れずにいる。いざとなったら自らの城は自ら銃を取って守らればならないと今でも強く感じているし、城が堕ちても逃げ道がなくならないよう気遣っている。

だからこそ、それに耐えられる人がマイノリティであることも痛感してもいる。

プログラムを書く人の絶対人口は増えた。しかしプログラムを書くユーザーの割合はむしろ減ったというのもまた事実ではないか。確かに"There's an app for that"が成立する確率が上がり、自ら書く必要が減ったのも大きな理由だ。もしプログラムというものの存在意義が、仕事を片付けるGetting the Job Doneことにしかないのであれば、それは喜ぶべきことであれ悲しむべきことではない。

しかし、プログラミングというのは楽しいことでもあるのだ。そしてかつ、危険なことでもある。スポーツがそうであるように。

今は真剣でチャンバラするしかないこの世界にAppleがもたらそうとしているのは、道場playgroundなのかも知れない。

Dan, an Ordinary Coder


この記事へのトラックバックURL