Objective-Cを哲学する。
[レイヤー構造について]

 

Objective-Cは「オブジェクト指向言語」の一つである。このオブジェクト指向言語の源流はゼロックス社のSmalltalkにまで遡ることが出来る。70年代、Smalltalkは全てが革新的で、従来のC言語的な記述からかけ離れたスタイルを提示していた。しかしながら、本当にこれが画期的だったのならば、どうして私たちはこのSmalltalkを現在使用していないのか。その理由は、ゼロックス社がこれを商用にする気がなかったこと、そして実際に使い物にならなかったからである。Smalltalkは展示会の「コンセプトカー」だった。設計思想やデザインは来たるべき未来を指し示していたが、いざこれで公道に出るやいなやエンジンパワーが全く足りない。Smalltalkは理念の産物であり、現実の街中では小回りが効かず、高速もノロノロと走ることしか出来ないコンセプトカーそのものだった。それはあくまでもゼロックスの「社会派SF」であって、未来のコンピューティングは「いつかこうなる」ということを物語ったにすぎなかった。

しかし、このSFを真に受けて”Just now”「今でしょ」と言ったかどうかはしらないが、これの商用化を企んだ婆娑羅者がいた。スティーブ・ジョブスである。驚くべきことに、アップル社は「コンセプトカー」をまともに走らせて見せたのだ。もちろん重すぎるSmalltalkは採用しない。実用上、それっぽい挙動をすれば「それでよし」とした。初期MacのOSがPascalで書かれていたことにも、その一端をうかがうことができる。アップルといえば「完璧を求める企業」というイメージが強いが、それは見栄えやユーザビリティに関してであって、技術レベルに関する企業理念はあくまでも「うまくいくなら、その手段はなんでもよい」という妥協や折衷案を好む傾向がある。それは現代でも変わらないと思う。

90年代後半、コンピュータが16bitから32bitへ以降しつつあったあの時代ですら、アップル社はSmalltalk(あるいはこれに準ずる純粋なオブジェクト指向言語)を採用しなかった。代わりに採用されたのはObjective-Cである。Objective-Cとは、古典的なC言語をSmalltalk風にラッピングしたものである。いくら事実上のジョブスの言語(彼のNextStepはObjective-Cだった)とはいえ、すでにObjective-Cは先進的なものではなかった。また、この頃のアップル社の技術的課題は「旧世代との互換性」だったので、C++からわざわざ中途半端なオブジェクト指向言語であるObejective-Cへの転換は、プログラマーからも疑問視された。しかし、商品として重要なのは見た目であり、そしてそのイメージを裏切らない実用性である。冒頭の愛らしい新生iMacはあらゆる層に飛ぶように売れただけでなく、洗練された文房具として実用に耐えること証明したのだった。

ユーザーにとってはなんでもないような挙動が、実は高速なプロセス処理の賜であるケースが存在する。そのような場合、Objective-Cの中途半端さがむしろ強力な武器となる。タスクが明確で重い処理はC言語で、軽めの処理はオブジェクト指向で、といった使い分けが単一言語内でシームレスにできるからだ。複雑な機能の連携で何が出来るのかを探るのはオブジェクト指向で、それが明確になった時点でC言語でリライトしより高速にする、という応用もあり得る。そして、この特徴がより明確になった事件がiPhoneのブレイクだろう。周知の通り、現代のコンピューター市場は、屋内用とモバイル用の性質の異なる二つの条件が併走している。これは言い換えれば、最新のハード環境と周回遅れのハード環境がパラレルに存在していて、後者はソフトウェア面でタイトな設計を強いられ続けることを意味している。

もしアップルの基幹言語がSmalltalkやJavaだったなら、当時のiPhoneはあんなにスムーズに動かなかっただろう。また、もしC++のままだったら、Smalltalk譲りのアプリ開発の柔軟性は得られなかっただろう。この意味で、実はObjective-Cというのは「中途半端な言語」なのではない。Objective-Cは、技術用語としてのラッパー言語という性格以上に「一つの言語体系内で目的に応じて二つのレイヤーを使い分ける言語」と見なすことができる。この仕様は、現代のプログラミング環境として極めて重要な「機能」と見なしてよいだろう。思えばOSX自体もUNIXとGUIのレイヤー構造を持っているではないか。

余談だが、以上の考察は自然言語にも適用できるかもしれない。他の言語に比べて、日本語はかなりレイヤー構造を意識した言語仕様ではないか。例えば、”rumor”の意味は「噂」だが、「うわさ」、「ウワサ」ではそれぞれにニュアンスが異なるだろう。また「流言」や「風説」という表現では、主体はその渦中にいない客観的な立場にあることを暗に含んでいる。その言語が使用される文脈(話題の深刻さや信憑性など)を予期して、言語使用者が事前にレイヤーを使い分ける必要がある。どこの国の言語でも多かれ少なかれこういうところはあるだろうが、相対的に日本語はこの傾向が強いのではないだろうか。事実、私の文体が日によってころころ変わるように。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください