新しい JavaScript エンジンモジュールオーナー

Brendan Eich は JavaScript の生みの親であり現在は Mozilla の CTO です。JS 誕生時から、ECMA での標準化、オープンソース以前の V8 の話などを振り返りつつ、Brendan が 16 年ずっと持ち続けてきた JavaScript エンジンのモジュールオーナー権限を引き継ぐアナウンスを行ったブログ記事です。

つたない翻訳になってしまいましたが、他では聞けない秘話や、Brendan 独特の語りを多数のリンク先と併せて楽しんでいただければ幸いです。

原文: New JavaScript Engine Module Owner

ご存じかもしれませんが、私は以前 JavaScript の 10 年について書いています。marcaBill Joy などの協力の元で作られた Java の陰で、JS は基本的に独りで生み出されました。

始めに、少しばかり助けてもらったので、改めて感謝を述べさせてください。Netscape が Borland から引き抜いた Ken Smith が JDK 1.0 時代の java.util.Date を移植してくれました(経営側の要請により、私たち二人は Java トラックでドラフティングしたのです。Java クラスに 2000年問題バグがあるからと躊躇しませんでした)。Netscape 2 のフロントエンドハッカー chouck, atotic, と garrett の支援にも感謝します。追記: X フロントエンドの spence も忘れてはなりません!

1995 年のことです。5月の 10 日間でエンジンのプロトタイプを作りました。Netscape ではサーバサイド JS 製品 を準備していたため、まずはバイトコードコンパイラとインタープリタを実装しました。その年の残りはブラウザとの統合に費やされます。後に “DOM レベル 0″ と呼ばれるもので、最近ようやく HTML 5Anne のワーキンググループで標準化されました。文章が断片的になるのは最初の短距離走の PTSD です :-/

1996 年になると RRJ が助けてくれます。David M. Gay と Guy Steele による dtoa.c の移植を手伝い、日時のバグを修正してくれたのです。

1996 年の夏には、CMU の大学院生であった nix が Netscape のインターンとしてやってきて、最初の LiveConnect を書きました。広範囲にわたる設計の議論やコードレベルのやり取りに対する、彼の多大な貢献にはいまでも感謝しています。

同年の晩夏から初秋頃になると、JS には標準化が必要だと明らかになります。Bill Gate が私たちの陰口をたたき、ひっきりなしに JS を変えていたのです(一理ありましたが、目糞鼻糞を笑うという感じでした…)。当時の ECMA (今は Ecma) 事務局長 Jan van den Beld とも知り合いであった、標準化の重鎮 Carl Cargill が助けてくれます。Carl が ECMA での JS 標準化を導いてくれました。

ECMA に参加して最初の JS 標準化ミーティングでは驚きました。Microsoft は補欠チームを参加させましたが、Borland や NOMBAS という企業まで参加したのです。「成功すると親戚が増える」とはよく言ったものです。NOMBAS の創始者は「我々は JavaScript に何年も取り組んできた」と挨拶したのです。JS が C ベースの構文をもったスクリプト言語の総称でもない限り、あり得ない話です。それまで NOMBAS なんて聞いたこともありませんでした。

最初のミーティングでは、Microsoft チームとの議論を上手くやって見せました。すると彼らは次のミーティングには精鋭部隊を送り込んできたのです。面白くなってきました。Microsoft は競争心剥き出しでしたが、同時に Shon Katzenberger は会社の職務を越え個人として率先して取り組み、ES1 策定を多いに助けてくれました。Sun は正真正銘の天才 Guy Steele を参加させました。Guy はミーティングに時折 Richard P. Gabriel を連れてきてくれました(Richard は ES1 第4節の貢献者です)。

一方で 1996 年の秋には、私は Netscape 経営陣から JS 仕様のプロトタイプを書くようプレッシャーをかけられていました。しかし、当時と将来の Netscape リリース版に搭載される “Mocha” エンジンと DOM のコードをすべて、単独でメンテナンスするのと平行して行うのは無理な話でした。

この作業量は甚大で、それに加えて最初の年に快く引き受けた技術的債務を返済しなければなりませんでした。そこで私は 2 週間引きこもって Mocha を SpiderMonkey名付けられるエンジンに書き直しました。これはもちろん(他に余地はなかった)書き直しをするためですが、JS に対する投資をケチっていた Netscape 経営陣に対するストライキでもありました。この時、遅い参照カウントと重たい discriminated union values に代わりガーベジコレクションと tagged values を実装しました。(訳注: 定訳が不明なため技術用語2点英語のママm(_ _)m)

1996 年の秋にはまた、私に加え JS チーム 2 人目のフルタイムとして chouck が参加することになりました。彼は私と共に(結果としては不運な) Netscape 4 のリリースに向けて、時代の先を行く仕事をしました。私たちは JS エンジンを Netscape (今では Mozilla) の「メインスレッド」から切り離したのです。マルチコアに何年も先んじて、JS と HTML/CSS/image を上手く並列処理可能になったのです。JS で無限ループを実行しても「応答のないスクリプトダイアログ」が表示され、ユーザはループを停止するか継続を許可するか選べるようになったのです。

1996 年の夏が過ぎ ECMA-262 標準化を始めて以降、Netscape はようやく JS に追加投資を行います。Clayton Lewis がマネージャとして参加し、Norris Boyd を雇って SpiderMonkey の DNA を Java へと移植した Rhino を開発させます。Netscape は建前では Java サーバに投資しつつ、本心では JS スクリプティングの AppServer に投資していたからです。

1996 年の 10 月 Netscape が New York で開催した Developer ConferenceShaver との出会いでした。Netscape プラグイン API おたくのせいで、私が増え続ける JS という主題から逸れてしまいそうになったところを、彼は機敏に防いでくれました。

Shaver は 1997 年には “LiveConnect 2″ を書きました。1996 年には Unix に提供されていなかったがその後より成熟した Java Reflection API に基づいたものでした。Clayton は shaver を雇い、JS チームは 1997 年末には大きく成長し、私は(既に ES1 と ES2 を) JavaScript から少し離れ初期の mozilla.org に参加することにしました。

1997 年の暮れ、JS 王国の鍵を私は Waldemar Horwat (現在 Google)に渡します。Waldemar は ES3 で多くの仕事を成し遂げ、卓越した頭脳を駆使して JS2/ES4 以降に取り組みましたが、市場の力と Microsoft の引き延ばし戦術に打ち勝つことはできませんでした。

実話: TC39 (訳注: EcmaScript の技術委員会) で当時 Waldemar の宿敵だった Microsoft の男は、その頃は JS 嫌いの静的言語ファンでしたが、今では意見を変えて JS と動的言語を支持しています。

この間もずっと、私が SpiderMonkey のモジュールオーナーを続けていました。

話を 2008 年へと進めましょう。WebKit の JavaScriptCore とインタープリタのパフォーマンスで競争して勝つため、@shaver と私は古びたスーパーヒーローのスーツを再び身にまとい、(当時としては)素晴らしい Firefox 3 をリリースしました。その後、Chrome や V8 より先に立ち上げた TraceMonkey を私たちがハックしていた夏、Andreas Gal が参加したのです。

V8 について: 私が V8 について知ったのは 2006 年でした。プロジェクト開始から間もないはずです。その時点ではオープンソースにする話がありました。私はそれを歓迎し、code.google.com でホストするか、Firefox に統合しなければならないという圧力なく mozilla.org で(ちょうど Rhino のように)ホストか、SpiderMonkey を置き換えて Firefox に統合するつもりでホストするか、どれでもいいと勧めました。別の会社(訳注: Adobe)が彼らの JS 派生言語のエンジンを Mozilla に提供するところだと明かす必要はありましたが、「大勢いるほど楽しい」というつもりでした。JS JIT 黎明期の話です。

V8 が 2006 年にオープンソースになることはなく、2008年 9月のリリースまで隠されていました。Microsoft への刺激を避けるため Google は用心していたのかもしれません。1995 年に「Netscape と Java が Windows を殺す」と Netscape が豪語していたことが Microsoft の反感を買ったのは明らかです。信頼できる情報源によると、1995 年の末には Microsoft の取締役は次のように警戒する指示をしたそうです:「おまえは雄牛の前でマントを振っている − 角をつかんで見せろ!」2008年の Chrome は雄牛の前に広げられた新たな赤いマントであり、IE9 と Chakra を生み出したといえるでしょう。

Google の動機は何であったにせよ、2年間も V8 をクローズドソースにし続けたことは JS にとって痛手でした。Apple や Mozilla は JIT の学習曲線を(後には V8 のソースも分析できるようになったが、初めは)自力で上ることになったのです。確かに、Anamorphic の Self や Smalltalk に於ける成果については多少ドキュメントがありました(訳注: Java は遅いという認識を打ち破った HotSpot は Anamorphic 社の Smalltalk VM を元にした JIT エンジンです。V8 も同様です)。90 年代 Sun が Anamorphic 買収に向けた準備のため然るべき注意を払っていたとき、Netscape から Sun に出向して仕事をしていた中で私もそれを学びました。しかし、別々に開発されたことで共通コードベースのエンジンを作る機会が失われてしまったのです。

良い面としては、一元管理された単一エンジンのコードベースよりも、複数のオープンソースエンジンが競争することで明らかに設計の幅は広くなりました。

いずれにせよ、JS が通らなかった道には今でも考えさせられます。今後も同じような道が待ち受けているでしょう。しかし過去は過ぎ去り、私たちは TraceMonkey を、Apple は SquirrelFish Extreme を公開し、V8 のリリースと共に JS はもう「遅い」とか「おもちゃ」ではないと世界に証明したのです。2006 年時点では Andreas が PLDI に論文を送っても査読者の1人は遅いと片付けて採用されませんでしたが。

その後はご存じでしょう: JS のパフォーマンスはここ数年で桁違いに高速化しました。実のところ、JS の高速化傾向はまだ Java のような 1% の高速化が注目に値するような世界にはなっていません総合的で信頼できるベンチマークを行うため Web における仕事量を研究するという、初期段階に過ぎません。そればかりか、Web はまだ急速な進化を続けており、私の知る限り適切な仕事量を定義することすらできずにいます。

TraceMonkey を公開した頃、Mozilla は幸運にも Ras Bodik の元で UCB の博士課程を終えたばかりの Dave Mandelin を雇うことができました。

分散型のオープンソース Mozilla JS チームは Firefox 4 で良い成果を残しました。これは貢献者全員の成果です。中でも Dave は技術力、指導力において卓越していました。Dave は冷静で、とても頭が切れる男で、私の尊敬する Richard Feynman のように、経験主義かつ懐疑的な真の科学者です。

合計 16 年間、オープンソースで 13 年間の時を経て、感謝の気持ちと少々の安堵感を覚えつつ、SpiderMonkey のモジュールオーナー@dmandelin へ引き継ぐことをここに発表します。

新たな王に祝福を!