JavaScript の次期バージョン(ECMAScript Edition 4/JavaScript 2.0) の仕様は ML で記述されているんだって!(ヘェ〜、ヘェ〜、ヘェ〜 ← 古い!)
気軽に読めます。末尾再帰を例外処理を用いたトランポリンで実装する方法が面白かった。
Herman, David and Flanagan, Cormac: Status report: specifying javascript with ML, ML Workshop 2007, pp. 47-52.
[pukiwiki]
ECMA TC39-TG1 部会で策定が進んでいる ECMAScript の次期バージョン (ECMAScript Edition 4、あるいは JavaScript 2.0)の仕様がどのように定まっているかについて解説している。
JavaScript 2.0 の特徴は、Java や C# 流のクラス機構、名前空間、Gradual typing、コルーチンだ。
この仕様についての議論は当初(Oct 2006 まで)は自然言語で行われてきた。やがて議論の精度が求められるにつれて形式的な仕様が必要となった。表示的意味論、操作的意味論に基づいた仕様記述言語も試みられたが、形式的な議論についていけない委員も多かったために、言語実装に基づいた仕様記述をすることになった。この記述に採用されたのは Standard ML で実際に使われた処理系は SML/NJ。
仕様は、CPS((continuation-passing style))でも store-passing style でもなく、より実装に近いと考えられる direct style なインタプリタを採用した。以下のようにMLの表現力が大いに役立った:
– 属性リストやプロトタイプを表現するのに ref 型と代入が利用できた
– JavaScript の例外や末尾再帰を表現するのに ML の例外処理機構を用いた。末尾再帰の表現にあたっては Ganz 流のトランポリンを用いた。
– コルーチンを表現するのに call/cc を用いた。コルーチンだけのために CPS は使いたくなかった。
– MLton と SML.NET への移植が進んでいる。これまでの regression test の結果は Mozilla から提供されたもののうち93%をパスしている。残りの7%は、ES3からの仕様の変更か、まだ仕様で実装されていない機能だった。((つまり、今のところ目立ったバグはない))
今後はこのモデルの型健全性を示す研究をしたい。
[/pukiwiki]