Subscribed unsubscribe Subscribe Subscribe

枕を欹てて聴く

香炉峰の雪は簾を撥げて看る

Eval ContextとかInteractive JS Shellとかもろもろ

JavaScript

オレ標準JavaScript勉強会での発表のSlideです.
f:id:Constellation:20100725011437p:image
IJS: Interactive JS Shell - Constellation Scorpius

内容はInteractive JS Shellを実装する際に問題になる, Token Streamの問題, そして同一Contextでの評価の継続の問題です. Tumblrがまさかのmaintenanceだったりとあせりましたが, 何とか終了することができました. 例によって早口で, かつアレゲ内容でわかりにくくて申し訳ないです.

今日あった方々はすさまじい方ばかりで, 自分もがんばらないとなあと思いました. さしあたってはFirefoxChangeLogを購読しLDRの未読件数を追い込んでみようと思います.

そして全然関係ないですが, 土下座スタックを積むと容量を圧迫し他のスタックを一気にスワップアウトさせて心のHDDをがりがり引っかくので, 二度と積まないようにしたい... 切実な話.

没になった話

indirect call to evalを知らなかったときは, Firefoxで動かすためにgeneratorをつくり, sendでcodeを送ってyieldで返すことによって環境を継続したりしていました. generator eval

(function() {
  var ijsErrorFound = null;
  function generator() {
    var ijsScript = yield null;
    while (true) {
      // for break
      try {
        do {
          with (window) {
            ijsScript = yield eval(ijsScript);
          }
        } while (false);
      } catch(e) {
        ijsErrorFound = e;
        ijsScript = yield null;
      }
    }
  }
  var g = generator();
  g.next();
  window.ijsEval = function ijsEval(src) {
    var res = g.send(src);
    if (ijsErrorFound) {
      var error = ijsErrorFound;
      ijsErrorFound = null;
      throw error;
    }
    return res;
  }
})();

で, 「JS1.8最高や! 標準なんて最初からいらんかったんや!」というひどいオチになる予定でしたが, indirect call to evalというすばらしい展開により, ECMA-262 5th最高やに差しかわりました.

後, ECMA-262 5thの仕様書へのpointerがほしいのに, HTMLとして存在しないというのはもったいないので, 何とかしたい...