IE8 における Jscript の変更点

こんばんは。五寳です。

すでに IEBlog を読まれた方もいらっしゃるかと思いますが、IE8 RC から RTW にかけて、JScript に変更が入りました。
IEBlog でも JScript Blog でも同じことを書いているようなので、ここでは IEBlog のリンクを貼っておきます。
IE Blog : What’s new in JScript for IE8

上記の記事も含めて IE8 Beta ~ RC ~ RTW で、Jscript がどのように変わってきたのか、簡潔にまとめるとこんな感じでしょうか?

  • Beta1 ・・・ Jscript Engine の Ajax への最適化、DOM 連携時のメモリリーク問題の解消、ECMAScript3 に対する修正、Built-in Jscript Debugger
  • Beta2 ・・・ Jscript Engine のパフォーマンス向上、Native JavaScript Object Notation (JSON) 対応、VS と同じような syntax を色付けした Script Debugger と Script Profiler の搭載
  • RC1 ・・・ Getter/Setter プロパティ、String Indexing への対応
  • RTW ・・・ 上記にある IE8 からの変更点を IE8 Standard Mode の時だけ使えるようにしたい! -> これが Jscript Versioning のこと。

つまり RTW では、レイアウトモードが "IE8 標準モード" にセットされている時だけ、特に互換性の面で問題が多かった、native JSON 対応と、DOM Prototypes を利用するための accessor methods が機能するようになります。それ以外のレイアウトモードでは、基本的には IE7 の Jscript.dll を呼び出しているのと同じになります。

IE8 の大きな機能のひとつでもある、互換モードの搭載においては、基本的に HTML/CSS といったいわゆる Trident と呼ばれる MSHTML エンジン部分の切り替えのみで、それまでは JScript エンジンはいくら互換モードや Quirks にしても最新の実装になっていました。これによって、RC でも、互換モードで表示してるのにスクリプトがうまく動かないとか、CSS もチェックしたのになぜか表示が崩れるという問題を抱えていたりしていました。

私が JScript チームからこの仕様変更を聞いたきっかけは、RC のリリース後に妙に Jscript に絡んだレポートが多かったので、Jscript チームに 「RC で何か大きな仕様変更入れたの?」と質問したことでした。その時の彼らからの返事の中に、「Jscript にはあんまり変更は入れてないんだけど、AJAX のための DOM に結構変更がはいったので、よく Jscript エンジンに何か変更が加わったのでは?という誤解と質問を受けてるよ。だけど RTW に向けては互換性のことも考えて、こういうことのないように、Jscript Versoning という新機能をいれるつもりだ」と。

オイオイ、RC 以降にそんな仕様変更いれていいのか?と思いましたが、Beta2, RC でいただいたフィードバックを見て、互換性を確保するために決断した修正であり、且つ既存の環境に影響を与えない変更だったので、仕様変更とはいえ、結果的には多くの問題を回避することができたのではないか?と思います。

追記:
イベントで Jscript が変わったら、WSH (Windows Scripting Host) にも影響があるのか?という質問を受けましたが、確認したところ影響は受けないということでした。