【レポート】
![]() |
Windows Internet Explorer 9 |
標準規約に準拠したアプリケーションを開発することは互換性という面で重要だが、それが必ずしも現実に則しているとは言いがたいこともある。また、標準規約に誤りがあり矛盾した記述がなされていることや、問題を先送りにして規約として説明していないもの、そもそも標準化されていないものなどもある。開発者はこうした「規約」と「現実」という2つの側面を見ながら、ほかのアプリケーションと互換性が高く標準規約へも準拠しつつ、さらに現実の問題に対処できる実装という「落とし所」を見つけなければならない。
IEBlogにおいてChakra: Interoperability Means More Than Just Standardsのタイトルのもと、IE9の新しいJavaScriptエンジンChakraを開発するにあたって、こうした標準規約と現実との乖離を加味しつつ、どういった決定をおこなって仕様が曖昧な部分や問題が発生する部分の実装方針を決定したかが紹介されている。どういった判断基準で開発を進めているのかがわかり参考になる。紹介されている事例は次の4つ。
ECMAScript 5 (ES5)仕様では次の表記の正規表現はエラーとして処理される。]の表記は\]のようにエスケープして使わなければならない。しかしほかのブラウザでは次の表記でも意図通りに動作する。先に[が記載されていない場合、]が[と組み合わせて使われる指定ではなく、]単体で使われることが明確にわかるためだ。
next = /]/.exec(buffer);
IE9ではほかのブラウザと同じように]単体の表記はエスケープしなくても利用できるように実装。こうした記述を採用したページが多く、ES5に従った実装を採用すると動作しなくなるサイトが多いためだと理由を紹介している。将来のバージョンのES5でこの記述が正式なものとして採用されるように働きかけていくと説明がある。
ES5以前ではゲッタメソッドとセッタメソッドの実装に__defineGetter__と__defineSetter__が使われている。TC39はこの表記をES5で採用するかどうか検討した結果、ゲッタメソッドとセッタメソッドは採用するものの、表記は別のものを採用することに決定した。これは__*__実装を標準規約にすると、規約の内容に準拠するためにブラウザの実装を変更する必要が生まれ、これまで__*__を使って動作していたコードが動作しなくなるため、これを防ぐ狙いがある。
IE9は__*__の実装は見送り、ES5で規定されるObject.definePropertyのみを採用。IE9における__*__メソッドの実装要望は多いが、将来の互換性を考えると現在完璧な互換性が実現していない__*__をサポートすることは将来に禍根を残すものとしてサポートしないとしている。
ES5では制御構文内における関数の定義をサポートしていない。制御構文の中で関数定義を実施すると、その結果としてさまざまな挙動が考えられ、実装に互換性を持たせることが難しいためだとしている。IE9はこの規約をそのまま取り込まずに、IE8以前と同じ実装のままにしておく方針を採用。これはすでに制御構文内で関数定義を実施しているJavaScriptコードが多すぎるためで、この機能をサポートしないと現実にサイトの多くが動作しなくなるためだという。規約に従うことは重要だが、すでにそこにあるものの方が優先されるわけで、これにはほとんど選択の余地がないと説明している。
ほかのブラウザは定数を宣言するためのconst指定をサポートしている。IE9ではこれをサポートしないことに決定。これはconstに関する既存のブラウザの挙動がばらばらであり、TC39でも標準規約として取り込むことにまだ慎重な姿勢をみせているためだという。たとえば同じ名前の変数にconst指定した場合、ブラウザによって次のように別々の動作をみせるという。
Chakra: Interoperability Means More Than Just Standardsの説明を読む限りでは、基本的には標準規約を優先する方針を見せつつ、それが現実に沿わない場合にはほかのブラウザとの互換性や将来性、現実に必要不可欠な機能であるかどうかなどを加味して文脈ごとに採用の可否を判断していることがわかる。
| IE9、わずらわしい2pxボーダ線を排除 [2010/8/24] |
| 【レビュー】IE9 PP4登場、SunSpiderベンチでSafari5を抜く [2010/8/10] |
| 【レポート】IE9のキャッシュ性能改善のしくみ [2010/7/20] |
| IE9開発版、Web Timing APIを実装 [2010/7/2] |
| 【レビュー】IE9 Platform Preview 3登場、CanvasとVideoに対応 [2010/6/25] |
| 【レポート】IE9のSVGサポート、WOFFとSVG Fonts [2010/6/14] |
| 【レビュー】IEのクラッシュ理由を見つけやすくするIE Diagnostics [2010/6/10] |
| Microsoft、IE9でVP8のサポートに言及 [2010/5/26] |
| IE9、H.264がベストな選択肢だが、ほかのコーデックの可能性も [2010/5/10] |
| IE9がサポートするビデオ形式はH.264のみ!? [2010/5/6] |
| セメント鉱物の一種が高温用圧電センサ材料に - 東工大などが発見 [18:13 6/19] |
| 九大、植物の気孔開口に必要なK+チャネルの働きに必要な転写因子を発見 [17:59 6/19] |
| NICTなど、酸化ガリウムを用いたMOSトランジスタを開発 [16:57 6/19] |
| NIBBなど、分裂時の植物細胞内の仕切りができる様子を高解像度で撮影 [16:23 6/19] |
| 筑波大など、眠気は起きている間の経験で変動することなどを発見 [15:57 6/19] |
|
[水谷豊]主演時代劇「だましゑ歌麿」第3弾放送が決定 [05:00 6/20] エンタメ |
|
カメラの顔認識を阻害するプライバシーバイザー [00:00 6/20] エンタープライズ |
|
「GANTZ」連載13年でついに完結、戦いの結末を目撃せよ [00:00 6/20] ホビー |
|
サラ・イイネス「大阪豆ゴハン」がDモーニングで復刻連載 [00:00 6/20] ホビー |
|
[GANTZ]13年にわたる壮大なストーリーに終止符 意味深メッセージも [00:00 6/20] ホビー |