08/11/21 23:18
古くて新しいObjective-C

古くからあるC++と並ぶオブジェクト指向言語。MS-CもTurbo-CもまだC++に対応していなかったころ、SunOSの仕事で初めてC++を使うことになり楽しみにしていました。ところがC++は本当のオブジェクト指向言語とはいえない、といわれ当時よく理解できなかったことを思い出しました。その本物であるSmallTalkに近いといわれるObjective-Cですが、今MacやiPhoneの開発に使われ注目されています。
AppleStoreで販売されるiPhoneのソフトは無料・有料問わず、かなりの数量が出回るようになり、私もよく購入していますが、シンプルなものが多く、このくらいなら自分もほしいツールを作って見たいと思うようになり、Objective-Cの勉強を始めました。開発ツールはすべて無料でそろうので、とりかかりは簡単ですが、この言語かなり癖があるため、なれるのにちょっと時間がかかります。まだWindows3.1が出る前、Think-Cと呼ばれるツールで初めてGUIのプログラムをMacで組んだことがありますが、そのときも、Macの独自性にかなり戸惑った覚えがあります。そのときはMS-DOSからMacというあまりにも違う環境だったせいもありますが、環境よりもその思想に衝撃をうけました。その代表的なものとして、リソースフォークというテキストや画像を別ファイルで管理するというものでした。すでに販売されている完成されたアプリケーションでもリソースエディタというツールを使えば、簡単にカスタマイズでき、例えば英語版のソフトを日本語版にするといったことが簡単にできました。Macのファイルシステムもこれに准じているため、MS-DOSにもってくると何かと注意が必要になりました。今では珍しくありませんが、ビジュアルとコードを分けて管理するという思想は新鮮で、現在のMacもこういった思想は受け継がれており、よりアグレッシブになってオブジェクト指向言語の中にうまくとりいえられています。

ダイナミックObjective-C http://journal.mycom.co.jp/column/objc/index.html

今回このサイトをよく参考にしましたが、大変高度な内容をわかりやすく解説してあり、とてもお勧めです。参考に購入した本も偶然この筆者が執筆しているのを知りました。特にRuntimeAPI, AspectCocoa, CoreFundationの記事は興味津々に読みました。一言で言えば、すべてが「ダイナミックバインディング」という思想になっているということでしょうか。このあたりが実にMacらしくそそられるところです。しかし記事の中にあるリンクも切れていたりで(ハッキングできてしまうから?)、なかなか情報が少ないです。
アプリを作る以上に、この言語のダイナミックバインディングの仕様には、興味がつきないのですが、現在の中間言語レイヤーで守られた実行環境の言語に比べ、かなり危険な仕様でもあります。しかし昔からCを親しんできた身としては、「よく見える」点で好みです。アプリがとぷこともなれていますし。。MacアプリがWindowsに比べて体感的に早く感じるのもこの仕様によるところなのでしょう。慣れてくると、Cに異質な文法を取り入れているように見えて違和感があったのが、伝統的なCと違う部分が、分離して見えるようになり、逆に見やすく思えるようになってきました。

まずはiPhoneの前にcocoaでいくつかツールを作ってみたいと思っています。