las3r
clojureというJVM向けLisp方言があるらしいのですが、それのAVM2向けコンパイラがAS3で書かれています。
http://github.com/aemoncannon/las3r/wikis
構文的な違いが結構あり戸惑ったのですが、こちらを見ればだいたいつかめると思います。
Schemeじゃないから当然かもしれませんし、ABC的に実装に難があるからかも分かりませんが、残念ながら:
- 末尾最適化なし (末尾再帰にはrecurを使えばスタックを消費しない)
- 継続なし
しかし、それを差し引いてもASにない以下の特徴を楽しむことができます:
- マクロが使える
- 動的コンパイル
しかも、Emacs向けにlas3r-modeが用意されていて、起動中のSWFに対し修正を動的に反映できます。
以下手順:
- etc/las3r-mode.elをEmacsのロードパスへ配置
- もしなければ、以下もDLしてロードパスへ配置
http-get.el, http-cookies.el, http-post.el - .emacsに以下を追記
(autoload 'las3r-mode "las3r-mode" "Major mode for las3r." t)
(add-to-list 'auto-mode-alist '("\\.lsr$" . las3r-mode)) - src/lsr/boot.lsrの最終行、;;(connect-to-eval-pipe)をコメントインしておく
- etc/eval_pipe.rbを起動しておく
- 対象のSWFを起動しておく
- Emacsにて*.lsrの編集中にF5 (すると、バッファ全体がevalされる)
この手の試みがじわりじわりと増えてきているような気がしますね・・。
今後が楽しみです。
関連メモ:
http://hg.mozilla.org/tamarin-central/file/d92e466aed84/esc/src/
元?
http://eval.hurlant.com/
上記のAS3版だと思う。las3rはこれの一部を使っている。
http://ariyan-harhid.cocolog-nifty.com/blog/2008/10/tamarin-esc-c-2.html
上記の改良版。実行時エラー情報を詳しく教えてくれたりetc
http://happyabc.org/
OCaml製のSchemeコンパイラ
http://www.bitbucket.org/SumiTomohiko/actionpython/overview/
これは・・?
http://haxe.org/com/libs/hxasm
haXeのABCアセンブラ
http://www.sephiroth.it/weblog/archives/2008/07/expressions_evaluation_at_almost_nati.php
上記のAS3版を基礎としたシンプルな電卓デモ
http://www.anotherbigidea.com/javaswf/avm2/AVM2Instructions.html
見やすい
http://code.google.com/p/as3c/
インラインアセンブラ
