【コラム】
この連載はObjective-Cという言語を「動的」というキーワードをもとに紹介している。ここまでで、クラスの型、クラスとメソッドの調査、ターゲット/アクションパラダイム、セレクタ、カテゴリ、プロトコル、非形式プロトコル、ポージング、といった機能を解説してきた。
これで言語仕様のうち動的な特徴を持つものは、ほとんど出そろった感はある。もともと、Objective-CはC言語に最低限のオブジェクト機能を付加したものなので、あまり言語仕様は大きくないのだ。
だが、まだ一番大事なものへの言及が不足している。それは、メッセージの送信についてである。Objective-Cの様々な動的な特徴を調べていくと、結局のところそれらを実現しているのはメッセージの送信である、ということに気づく。メッセージングシステムを理解しない限り、Objective-Cの真の姿は見えてこない。
メッセージ送信は、概念だけを語るならば簡単である。「あるオブジェクトから、あるオブジェクトへ、メッセージを投げる」。これだけである。これだけならば、C言語での関数呼び出しや、C++におけるメンバ関数呼び出しと変わらない。Objective-Cでは、ここに呼び出された側でメッセージを処理するためのメソッドを動的に探す、動的束縛を伴う、という点が決定的に違う。
この仕組みを明らかにするために、Objective-Cランタイムの解説を行いたい。言語仕様やクラスの実装の仕方ではない。Objective-Cのコードをコンパイルして実際に動かす、ランタイムライブラリである。いわば、Objective-Cのエンジン部である。
ランタイムの解説は、そのソースコードをもとにして行っていこう。この連載は、Objective-Cの内部へと、さらに深く潜り込んでいく。
とはいうものの、ランタイムの解説まで行うことを、疑問に感じる方もいるかもしれない。「ランタイムは言語仕様ではないから、ここで語るのは不適当」という意見もあるだろう。また、「ランタイムの仕組みは複雑すぎるのでは」と思うかもしれない。
だが実は、Objective-Cにおいては、ランタイムはそれほど遠い存在ではない。まず、Objective-CのランタイムはC言語で書かれている(一部アセンブリ言語)。そして、Objective-Cは、C言語のスーパーセットであり、C言語を完全に内包している。つまり、Objective-Cからは、ランタイムのすべてを直接操作できるのだ。
事実、Mac OS Xで使われているランタイムは、APIドキュメントが公開されている。ランタイムAPI込みでObjective-Cの仕様のようなものだ。熟練のObjective-Cプログラマならば、もっともスマートな解法を得るために、積極的にランタイムAPIを利用しているだろう。ランタイムAPIを利用すると、動的なサブクラスの作成や実行中にメソッドの実装をすげ替えるなどの、高度な操作が行える。ほとんど何でもありである。
第二に、ランタイムのソースコードは公開されている。この連載で取り上げるのは、Mac OS XでのObjective-Cランタイムであるが、そのソースコードはAppleのDarwinプロジェクトとして公開されている。さらに、そのコードサイズは小さい。十分に追いかけることのできる量である。
メッセージ送信についての議論を行う時に、その概念や理念から始めることは大事だ。だが、依って立つところが明確でないと、議論は迷走しがちになる。この連載では、「いま動いている環境」を大事にしたい。実装を解き明かすことから始めよう。ランタイムのソースコードを眺めることで、メッセージン送信のベールをはがしていき、「裸のオブジェクト指向」の姿が見えるだろう。
ソースコードの中に闇雲に飛び込んでいっても何もつかめない。道筋をきちんと確認しよう。
最初の目的は、メッセージ送信を理解することだ。そこで、Objective-Cでのメッセージ送信をおさらいしよう。
|
|
メッセージ送信 |
この一連の流れが、どのように行われているのか、さらに詳しく知りたいのだ。
そこで、次回以降、ここに登場している用語の一つ一つを、解き明かしていこう。
これらが明らかになったとき、メッセージ送信を理解できるだろう。
【コラム】ライトニングJava 第25回 Generic Java(6) - Genericを使ってAPIを作成する その3
【コラム】ライトニングJava 第24回 Generic Java(5) - Genericを使ってAPIを作成する その2
| トマトを食べれば痩せられる!? -京大ら、新発見の成分で肥満改善効果を実証 [21:00 2/10] |
| JAXA、液体シリコン中に残存する共有結合を観察 -大口径ウェハの実現に期待 [20:11 2/10] |
| NEDOなど、熱膨張が小さな樹脂複合材料ペレットの量産化に成功 [19:22 2/10] |
| 理研、一般顕微鏡を蛍光顕微鏡に強化できるアダプタを試作して性能を実証 [19:15 2/10] |
| 天の川のブラックホールが小惑星を飲み込んでいる - NASAが発表 [18:08 2/10] |
|
TVアニメ『ソードアート・オンライン』、7月放送開始! キービジュアル公開 [21:58 2/10] ホビー |
|
CP+2012 各社ブースレポート集 [21:48 2/10] 家電 |
|
ソニエリ、「Xperia NX」の展示イベント開催 - 東京・名古屋・大阪で実施 [21:40 2/10] 携帯 |
|
【レポート】CP+2012 - 「EOS-1D X」展示や吉高由里子のトークショーに人だかりが - キヤノン [21:35 2/10] 家電 |
|
「エウレカセブンAO」オリジナル物語をニュータイプA連載 [21:35 2/10] ホビー |