Free Flex 2 SDK

SDKアーカイブだけでほしくても、ダウンロードでは要ユーザー登録の上、すごくわかりにくい。

コンパイラを含む開発ツールはjavaでできている。jarを起動するexeとbashスクリプトがついている。開発自体はLinuxでも同様にできるだろう。Debug版FlashプレイヤーがWindowsMacOS Xだけのようではある。

AntiVir Personal Edition Classic

ThinkPadにプリインストールだったSymantec Client Securityの有効期限が切れそうだったので削って換わりにAntiVirのパーソナル版を入れてみた。

見た目はきれい。ただ、実際に判断するにはしばらく使ってみないとなあ。

where句とJavaScriptのwith文

JavaScriptで、オブジェクト式をwithで使うと

  with ({
    id: "dump",
    x: 110,
    print: function (value) {
      document.getElementById(id).innerHTML += value + "<br />";
    }
  }) {
    print(x);
  }

このようにwithは名前空間を限定する方法のひとつとしても使える。


メインの内容が一番下にあるため、見難いことはたしか。JavaScriptを拡張するために文法をきれいにすることを考えてみよう。
まず、withを中値記法にして前後入れ替え

{print(x);} with ({
    id: "dump",
    x: 110,
    print: function (value) {
      document.getElementById(id).innerHTML += value + "<br />";
    }
})

プログラムの子要素は文ではなくすべて式として扱う。そして括弧も省略する

print(x) with {
    id: "dump",
    x: 110,
    print: function (value) {
      document.getElementById(id).innerHTML += value + "<br />";
    }
}

ここまですると、with句はHaskellなどで採用されてるwhereと似た文法になる。

また、この手の中値記法はrubyとかでifなどでも使っていて、メインの要素を前に持ってくるには便利な書式だ。

これらを文法構造として一般化してみると

print(x) with {x:100,print:function(v){..}}
p("empty") if empty?
...
expr1 identifier expr2

これを構文糖で扱えるよう、普通のオブジェクトっぽくすると

expr2.identifier({*expr1*})

expr1部分はexpr2の名前空間の下でexpr2によって評価されるべきなので、JavaScriptrubyにはないfirstclass objectだ。この実行は、ブロックや関数の適用と、文字列をevalするとの中間に位置する。