OCaml をブラウザでクライアント側で実行できたら面白い †
という話になり、皆で検討した。
そういえば、アラン・ケイもそんなことを言っていた。
http://itpro.nikkeibp.co.jp/a/it/alacarte/interview0626/alan_5.shtml
Webの技術は遅々として進歩しない。例えば、言語「Logo」のことを記述したWikipediaのページをみても、そこでLogoのプログラムを実行することさえできない。今のコンピュータは、昔の「Apple II」に比べれば1万倍も高速化しているというのに。
どう実装したらいいだろう。検討で出た案。
- OCamlのソースを Javascript に翻訳して実行。
- OCamlにバイトコードを吐いてもらう。それを Jythonみたいに Javaのバイトコードにして、Javaアプレットとして実行。あるいは、javascriptで解釈して実行。
1.の案に集まったアイディア。
- まずは、いきなり OCaml を目指さずに、MinCaml?くらいの、単純なソースを読み込むことを目標にしよう。
- OCamlに構文チェックしてもらって、正しいソースだけを相手にすればもっと楽だ。
- Scheme2Js が参考になりそうだ。
- JavaをJavaScriptに変換するグーグルのツールを使ってみようをOCamlでやろうとしているわけで、壮大な話です。 -- げんま?
2.の案には、
- OCamlに、 Java や、 .NET や、 Parrot のバイトコードを吐いてもらえないか。
- あるいは、SpiderMonkey?のバイトコードとか? -- げんま?
- 今日ガリグ先生にこの話をしたら、 JavaCaml を教えてくれました。 OCamlのバイトコードをJavaのバイトコードに変換して、Java アプレットとして実行するのだとか。 -- げんま?
- JavaCaml?のサイトにも少し書いてありますが、OCamlのバイトコードの命令語は数も少なく難しくありません。JavaCaml?を手直しするか、直接バイトコードインタープリターをJavaScript?で書くあたりが一番簡単な気がします。(ただ、それだと、あまり型論理とかの勉強にはならないかも・・・) -- ogasawara?
- SPARCをJavaScript?でエミュレートしてMinCaml?に吐かせたネイティブコードを実行する、という案もげんまさんからでてましたよ。 -- 下村?
- うん、言ってはみたものの、バイトコードを解釈するほうがずっといいことに後から気づいた。 -- げんま?
- 少しやってみましたが、Toplevelのソースコードをごにょごにょとすると、OCamlにバイトコードを吐かせることはできました。これはパッチとして公開すれば、ライセンス的にも問題ありません。あとはバイトコードインタープリタですが、諸所の事情(これは勉強会でお話します)でJavaScript?だと泣きそうです。せめてJavaApplet?の方がいいかも・・・。 -- ogasawara?
- OCaml インタープリタを -dinstr オプションで起動すると、バイトコードをプリントしてくれるらしいです。 -- げんま?
- Mozillaのjavascriptインタープリタには、関数を逆アセンブルする機能があるようです。 -- げんま?
- OCaml の仕様解説,VM命令一覧(ソースコードにgarrigueを発見),参考になる日本語サイト -- げんま?
- ogasawaraさんの指摘。"VM命令のC_CALLというのは、C言語を呼ぶ命令で、これはMLでできないマジックをやるためにある。これをJavascriptで表現できるかが怪しい。Javaなら表現できそう。この命令は Pervasive でも使われているので、避けて通れない。"とのこと。 -- げんま?
- GoogleのJavaからJavaScript?の件がオープンソース化されたので,もし,MLで出来ないマジックがどの程度のマジックかによっては,JavaScript?化出来るかも? --
OCamlに別のバイトコードを吐かせる議論は
[Caml-list] Alternative Bytecodes for OCaml
http://caml.inria.fr/pub/ml-archives/caml-list/2004/08/87b02814a0a37006562b51b979dcaf47.en.html
でもあったようだ。