[#28] Jaguar でAppleScriptが速くなったその理由
待ちに待っていた「Mac OS X v10.2」(以下、Jaguar)が出た。インターフェースと動作速度が徐々に成熟度を増してきた感のあるMac OS Xも、ようやくこのJaguarでひとまず完成か?というところまで来たと思う。JaguarはメインのOSとして十分に使える。
もちろん、前から述べている Finderの抱える問題点は相変わらず残っている。でもツールとして冷静に見れば、JaguarのFinderも十分実用に堪え得ると思う。
その理由の1つは、以前感じられていたチグハグ感がだいぶなくなったことだ。「新しいFinderをどう使っていったらいいのか」というユーザーの迷いを、アップルが正しく認識できてきたのではないか?とにかく、ツールとしてよくまとまってきたという印象だ。
ま、昔のFinderに相当するものは自分で作ればいーや、なんて考えていたわけだし、普通のユーザーにとってみれば今のFinderがそれこそFinderなわけだ。それが使いやすくなるに越したことはない。今回のFinderの進歩にはとりあえず拍手を送ろう。
Jaguarには、ほかにも気に入ったところがいろいろある。前回、インストーラーの文句を書いたが、なんと直っている [*1](笑)。カーソルに影が付いたのもうれしい。視認性がだいぶ増した感じがする。あと、アプリが反応しないときに表示されるレインボーカーソルが、落ち着きのあるものに改善されたのも好印象。前のって、なんか神経質そうにぐるぐる回る感じでとても嫌いだったのだ。
……なんて、細かいことを書いていたらページが足りなくなるだろうから早速本題に移ろう。Jaguarに搭載された「AppleScript 1.9」は、これまでのAppleScriptに比べて内部構造が大きく変わっている。正確にいうと、AppleScript の仕組みを支える「AppleEvent」の内部構造が一新されたのだ。詳しい情報はあまり表に出てきていないが、変更点を推察してみることにしよう。
まず、これまでは「ハンドル [*2]」ベースのメモリー管理をしてきたが、これをより効率的な「ポインター」ベースのものに変えたようだ。これは、前々から「いつかするぞ!」と予告されてきた改良点である。Mac OS Xでは、ポインターを作るのはハンドルに比べて容易なので、素早く作成できる。また、Machの仮想記憶システムの性能をフルに引き出すことが可能なため、システム全体のスループットが上がるというメリットがある。
データの使い方も効率が向上している感じだ。例えば、これまでのApple Eventでは、イベントを送るアプリと送られるアプリの双方に必ずデータのコピーを作っていた。今回からは、必要でなければコピーを作らずにイベントを使い回して、アプリケーション間で共有するようになったようだ。大きなデータがくっついたイベントを処理する場合には、メモリー上でコピーしてしまうので具合が悪かったが、この改善によって速度の面でも効率の面でも効果があるように思う。
さらに、これまではイベントの一部分だけが欲しい場合に、すべてを取得したあとに一部を自分で切り出す必要があった。この点も、イベントの一部分だけを直接抜き出すことができるように、新しいAPIの追加によって改善された。これも、不必要なメモリーアクセスを減らす効果があるだろう。
こうして見てみると、Apple Eventはずいぶんとちまちました改良が施されたように思えるが、そうではない。クロック周波数が速くなった現在のマシンでは、速いと思われていたメモリーアクセスでさえ全体の速度を落とす原因になる。特にキャッシュの効率的な使い方は、アプリケーションのプログラマーといえども工夫してプログラミングしないといけないほどシビアな問題だ。こうした問題を認識してシステムの中枢の1つであApple Eventに改良が施されれば、AppleScript だけではなくシステム全体の処理速度が上がるわけである。
ところで、OSの裏側の仕組みがこのくらい大幅に変わってしまうと、開発者は対応するのにひと苦労するはずだ。普通は、裏側の変更というのはそれくらい大変なことなのである。だが、Jaguarにアップデートしたことでトラブルを起こしたアプリの話はあまり聞かない [*3]。なぜなのだろうか?
実はアップルと開発者は、この日のために数年前から準備をしていたのだ。「Carbon API」が登場したときにとても面倒で大変だった作業の1つに、Apple Event系APIの更への対応があった。それまではイベントの内部データをAppleScriptが直接触っていたのだが、「システムが用意するAPI経由でしかイベントにアクセスしちゃだめだよ」ということになったからだ。プログラマーには面倒くさがり屋が多く、データに直接触らせてもらえたほうがコードを書くのが楽だ。でも、将来にわたっての互換性を維持するためには必須な変更ということがわかっていたので、プログラマーは仕方なく従った。
しかし、アップルは内部の仕組みをすぐには変えなかった。初の正式版 Mac OS Xv10.0でもパフォーマンスチューニングされたv10.1 でも、Apple Eventは昔のまま動いていたのだ。これは、システムの中枢の1つであるApple Eventの変更が大変な作業であったことを物語っている。またアップルは、互換性に関しても細心の注意を払いながら調査してきたのではないだろうか。ともかく、数年に及ぶアップルとサードパーティーの開発者たちの努力により、トラブルもなくJaguarで内部の仕組みを入れ替えることに成功したのだ。
こうしたシステム内部の変更は過去にも何度かあったが、特に今回のJaguarでは、Apple Event以外の部分でもドラマチックに仕組みが変わった。これだけ思いきって変更した例も少ないだろう。次回は、もう1つの大掛かりな改良点でありながら、あまり語られることがない「HIView」について見ていきたいと思う。
バスケ
今年の夏は、思いっきり自転車に乗っています。ダイエットのため(笑)だったんだけど、そんなことを忘れて自転車にはまっています。自分で整備するのも楽しいんだって思えてきました。もっともっと乗りますぞー。しかし、「ことえり3」は使い物になるなぁ。
[*1] なんと直っている - 権限を設定するダイアログが自動で出るようになったのだ。
[*2] ハンドル - Mac OSのメモリー管理構造では移動可能なメモリーのこと。移動可能であるぶん、メモリーアクセスも管理も多少煩雑になる。
[*3] あまり聞かない - システムの中枢にかかわるプログラムなどは話が別だ。
編集・三村晋一