みなさまこんにちは。takada-atです。 携帯サイト開発の大きな障害となるFlashLiteの制限を突破する画期的なツールを開発しました! 簡単に紹介すると、現在DoCoMo, au, Softbankの携帯電話の一番多くで動作するFlashのバージョンはFlashLite1.1だと言われています。 FlashLite1.1で動作するActionScript(ActionScript1相当)は、配列が使えない、関数が使えないという非常に制限されたものです。外部との通信やファイル容量にもかなり制限がくわえられてしまいます。 そこで、brainf**kのような使いやすい言語(笑うところ)で、FlashLite1.1向けの開発ができれば、携帯Flash開発の生産性を格段に高められるはずだと考えました。brainf**kについて知らない方はwikipediaの記事などをごらんください。 http://ja.wikipedia.org/wiki/Brainfuck 今回開発したbf2flasm は brainf**kをSWF(FlashLite1.1対応)に変換します。 これによってbrainf**kによる携帯Flash開発が可能となりました! (ちょっと嘘。アウトプットが文字列の表示だけなので、できることはかなり制限されます) 以下がHello, worldを表示するbranf**kコードの実行結果です。 (ちゃんと携帯実機でも動作します)。


■動作原理 SWFのアセンブリ / ディスアセンブリができる flasmというツールを使用しています。 http://www.nowrap.de/flasm.html bf2flasm.py というスクリプトで、brainf**kのコードを、flasmのアセンブラ言語に変換し、flasmを使って、アセンブラコードをSWFに埋め込みます。動作原理を図にしてみました。


以下がHello, world!と表示するbrainf**kのコードです。

+++++++++[>++++++++>+++++++++++>+++++<<<-]>.>++.+++++++..+++.>-.------------.<++++++++.--------.+++.------.--------.>+.

以下がそれを flasmアセンブラ(FlashPlayerの機械語に対応するもの)に変換したものです。長いのでpastebinに貼ります。 http://pastebin.com/rNp8vkb3 このツールは brainf**kコードを flasmが理解できるアセンブラに変換するまでを担当します。いわば brainf**kをフロントエンド、SWFをバックエンドとするコンパイラだと思ってもらえば問題ないかと思います(もっとも brainf**k とflasm アセンブラだとあまり機能が変わらないので、コンパイラというよりはトランスレーターと言いたくなりますが)。 ただし、brainf**kの機能の内、「標準入力から1文字受けとる」というのはFlashでは実現が難しかったため、実装していません。 ■ダウンロード http://lab.klab.org/young/wp-content/uploads/data/code/flasm.tar.gz ■使い方 flasmのインストールが必要です。

$ python -V
Python 2.5.5
$ cat hello.bf
+++++++++[>++++++++>+++++++++++>+++++<<<-]>.>++.+++++++..+++.>-.------------.<++++++++.--------.+++.------.--------.>+.
$ python bf2flasm.py hello.bf > hello.flm
$ flasm -a hello.flm
hello.flm successfully assembled to testinout.swf, 3922 bytes