ウェブがデフォルトの開発プラットフォームとなるとともに、我々はブラウザ技術 (参考記事)の大変な革新(参考記事) (参考記事)を目の当たりにしている。そんなご時勢の中、Opera はコードネーム Carakan (リンク)と呼ばれる「史上最速の JavaScript エンジン(リンク)」の計画を発表し、また Apple はさまざまな新機能の追加と改良が施された Safari 4 のパブリックベータ版(リンク)をリリースした。
Opera の従来のエンジンである Futhark に対する Carakan VM の大きな技術的な改良点の1つは、スタック型のバイトコード命令セットを取りやめ、レジスタ型を採用したことである(リンク)。
我々は新エンジンでレジスタ型のバイトコード命令セットを採用しました。レジスタ型のマシンでは、可変長の値のスタックの代わりに「レジスタ」と呼ばれる固定長の値のブロックが存在します。レジスタ型のマシンでは、可変長の値のスタックの代わりに「レジスタ」と呼ばれる固定長の値のブロックが存在します。各命令はスタックの先頭の値だけを参照する代わりに、どのレジスタにもアクセスすることができます。実行時にスタックの先頭に値を積んだり取り出したりする必要がないため、実行する命令数もコピーが必要なデータ量も少なくて済みます。
また Carakan はネイティブコード生成(リンク)もサポートする。
我々の新エンジンのバイトコード命令セットは非常に高速なバイトコード実行エンジンの実装を可能としてはいますが、バイトコードのインタープリタにはまだ例えば整数演算のループのような単純な ECMAScript のコードの実行に伴う大きなオーバーヘッドが存在します。このオーバーヘッドを克服するため、我々は ECMAScript のプログラムおよび関数の全体あるいは一部をネイティブコードにコンパイルする機能を実装しています。
もう1つの改良部分は JavaScript オブジェクトの表現に関するものである。
新しいエンジンでは、例えばプロトタイプやいくつかのあるいは全てのプロパティの順序および名称といった、オブジェクトに関するさまざまな情報を収集するクラスが各オブジェクトに割り当てられます。ECMAScript が非常に動的な言語であるがゆえにクラスの割り当ても必然的にとても動的なのですが、同じプロトタイプや同じプロパティ集合を持つオブジェクトには同じクラスが割り当てられるように分類されます。
この表現方法によってオブジェクトのプロパティを表現する複雑な構造の大部分がクラスに格納され、それらが同じクラスに属する他の全てのオブジェクトで共有されるため、個々のオブジェクトの記憶域を圧縮することが可能になります。実際のプログラムでは同じクラスに属する多数のオブジェクトを扱うため、これによって大量のメモリを節約することができます。
これらの機能強化によって現時点の Carakan は Opera 10 のアルファ版で利用しているエンジンより2.5倍高速であると Opera は主張している。まだリリース日は明らかにされていないが、NetApplications による調査で2009年1月の段階で0.70%の市場シェアを持つ(リンク) Opera ブラウザの人気がこれらの改良によって高まるのかどうか、興味深いところだ。
一方で、Apple もまた Nitro という新しい JavaScript エンジン(リンク)を搭載した Safari 4 のベータ版をリリースした。
業界最先端のベンチマークテスト、iBench と SunSpider によると、Safari は新しい Nitro Engine を利用して、Internet Explorer 7 の最大30倍、Firefox 3 の3倍以上も高速で動作します。
この Safari の新バージョンは、以下のようないくつかの先進的かつ新しい技術をサポートする(リンク)。
- CSS アニメーション
- CSS エフェクト
- CSS 3Web フォント
- CSS Canvas
- HTML 5 マルチメディア機能のサポート
- HTML 5 オフライン機能のサポート
- Acid 3 準拠 (このテストをパスした唯一のブラウザ)
- 投機的読み込み
また Safari は以下のようないくつかの新機能の搭載および UI の改良が行われている(リンク)。
- Tabs on Top
- Cover Flow
- Full History Search
- Windows そのままの見た目と使い心地
- Smart Address Field
- Full-Page Zoom
- Smart Search Field
- フィッシングとマルウェアの防止
デスクトップ、モバイル両バージョンの Safari 用のアプリケーション開発でこれらの新機能を利用する方法について、より詳しいことは Apple の Safari Dev Center を参照されたい (リンク)。
Paul Stamatiou 氏は少しまとまった時間で新しいベータ版を使用してみて思ったことを以下のように伝えている(リンク)。
もしこれが本当のレビューで Safari 4 ベータをワタクシ的に採点するとすれば、その安定性とスピードに重点を置いてだいたい10点中6.5~7点くらいでしょうか。で、Safari 4 は何のためのものか?ウェブをブラウズするためのもので、いじるためのものではありません。で、Safari 4 は何のためのものか?ウェブをブラウズするためのもので、いじるためのものではありません。Safari がプライベートブラウジングモード(あれだよ、あれ)の王様だということを忘れないように… まぁいずれ Firefox 3.1 もネイティブにサポートしますが(リンク)。
もしあなたが Safari 4 ベータを使っているならば、例えばタブバーを元の場所に戻すなどの隠し設定(OS X のみ)(リンク)を調べてみてください。
主要なブラウザベンダがエンジンの改良を別個に作業していることについて、Dion Almaer 氏は彼らが協働したほうがよいのではないか(リンク)と考えている。
楽しみですね。そしてブラウザが彼らの VM の成果を共有しない(あるいはできない?)のは興味深いです。各ブラウザがそれぞれ新しい VM の実装を進めています。 もし彼らが取り組みを分担できたら良くないでしょうか?
lliad 氏は Dion 氏の疑問に返答した(リンク)。
もし彼らが VM エンジンを共有すれば、競争がなくなり、より有用でより高速な実装を推進する動機が失われます。そんなわけで彼らはお互いに競い合いを続けるし、それで良いじゃないですか。
ブラウザ(参考記事リンク)、JavaScript(参考記事リンク)、そしてリッチインターネットアプリケーション(参考記事リンク)(RIA) に関する更に詳しい情報はまさにここ InfoQ で得ることができる。