言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

つらつらと flash について

ふと思い立って、再び flash の事を調べだした。前から少しずつ調べているのに何も出来上がらないのは特に何の義務も責任も、もしかしたら興味もないのかも知れないと思いつつ色々物思いにふける事にする。

一つ直面している問題に flash がある。学校なんかで、激しくソフトのインストールを禁止しているような所でも flash のアプリというのは大体動く、そこでツールを flash で配布したいという要望がある。一方で、ここでやってるステッププロジェクトは、人一人が理解するに十分コンパクトで革新的な、OS から言語、アプリまでひっくるめた実装を作ろうという物で、方向性が結構違う。

ところで話は変わるけど、Smalltalk の古き良き昔は良かったろうなと思う。バイトコードはそのまま機械語で、入出力装置は CPU に直付けで、何をやるべきかが明確だった。しかし今は時代が違い、どこを作らないかという事が大問題だ。様々なインタフェース、記憶装置、他言語フォント対応などを考えだすと、人一人に理解出来るという要件を余裕で超えてしまう。

flash のような標準的な環境で動かすというのは、革新的な物を作るという要求と真っ向から対抗する物だけど、一方ではやるべき仕事の範囲を狭めるのに役に立つかもしれないとふと思った(flash の制限の中でハードを制御したりするのを見てると、何となく昔のマイコンのビープ音で音階をならすような制限から生まれるおかしみがある)。flash の環境を前提として出来る事出来ない事を決めて行けば余計な事をしなくても良くなるのでは?

いきなり壁に当たったのは、flash で標準入出力が使えないという事だった。コンパクトなプログラミング環境を作るのに標準入出力が使えないというのは辛い。一つの解答は haxe だろう。つまり、neko というネイティブで動く環境と、flash swf を、同じソースを切り替えてコンパイル出来るようにする。調べてみると、この haxe というのは言語からパッケージ管理から極めて筋の良いプロジェクトである事が分かった。これは真似するべきだ。惜しいのは haxe なんて言う中途半端な言語を作らないで、全部 Ocaml でやりきったら良かったのに!という事だ。

また、flasm なんかの、flash 周りのツールが色々盛り上がっている事も分かって来て、結構面白そうだ。でも考えてみれば、flash は十分速いので、難しく考えないで Flex で単純なインタプリタを作っただけでも実用的かもしれない(なぜわざわざインタプリタかというと、コンパイラを作った事が無いので難しさを想像出来ないのです)。こうなると、OS を含めた画期的な計画が、単にしょぼいスタックマシンを作ってお茶を濁す羽目になるけど、私個人としては低レベルの部分には興味が無く、いつでもデバッグが出来る flash というコンセプトだけで十分魅力的だ。

そういう訳で、頑張って swf のファイルフォーマットや abc マシンの仕組みを勉強してみたけど、結局使わないで終わりそうだ。