haXeでenchant.jsする利点

  • haXeIDEの1つであるFlashDevelopを使うことにより、いい感じのコード補間をしてくれます。

 例えば、
ga -> game
game. -> input
game.input. -> left,top,right,bottom
の様に、型まで考慮して候補が出てきます。

  • パラメーターの型、個数、ケアレスミスによる打ち間違いなどはコンパイル時にチェックされるため、バグを生みにくい開発ができます。

 一例を挙げると、イベントは文字列の'enterframe'ではなく、イベント型のevent_ENTER_FRAMEで渡します。これは単に文字列を定数に置き換えたのではないので、別の定数を誤ってパラメーターに渡すこともありえません。要求されているイベント型以外はバグとしてコンパイル時に検出されます。

haXeとは

 おおざっぱに言うとhaXeJavaScriptの皮を被ったOcamlです。いろいろ言いたいことはあるけどとてもいい言語。でも使っている人が少なくてもったいない。みんな使おう! 詳しくはhttp://haxe.org/?lang=jp を見てください。

 Javaライクなクラスと強い静的型付けのJavaScriptに、Ocamlのようなヴァリアント型とパターンマッチが追加されてより関数型言語っぽくなっていると思ってもらえばだいたい間違いありません。

 おまけに、haXeは1つのコードからC++,PHP,JavaScriptといった複数の言語のコードを生成する能力があります。同一コードからJavaScriptC++のソースを生成できることが夢の実現のための重要な機能となります。

まず、夢を語ろう

 haXeとenchant.jsを使って、JavaScriptだけでなくiPhoneAndroidのネイティブアプリを作りたい。

 性能の高いPCではブラウザだけで動作し、ChromeOSでも遊べる。

 性能の低いiPhoneAndroidでも、ネイティブアプリとして動作することでPCと同レベルの動作をする。

 そんな環境を夢見ている。これがその第一歩となります。

かなり本気で携帯Lispしてわかったこと

もう年単位の昔、ガラケーL4uというLispを作って製品に使いました。
思い出しながらまとめておきます。


Javaは1オブジェクトに最低12バイト必要なので、リスト1つで20バイト消費します。lispのようにリストを多用する言語は、そのままではメモリーにかなり厳しいです。
 -1つ1つのリストを使う代わりに配列でまとめることでメモリー消費を抑える。
 -どうしてもリストを使う場合は、まとめて確保したリストのプールから割り当ててメモリーの断片化を防ぐ。
 -オブジェクトをキャッシュして使い回すことで、オブジェクト生成を減らす


・S式のバイナリーフォーマットBINGOSは高速化、省メモリーに役立った。
 -BINGOSは、MessagePackよりも先に作られた(はず)。フォーマットの基本的な考え方はMessagePackとほとんど同じ。違う部分は、Tuple,Symbol,ASCII文字列、UNICODE文字列といった型が多い点、省メモリーのためにすでに出てきたオブジェクトを参照する仕組みがある点。
 -私自身、MessagePackに乗り換えている。ライブラリーの多さはすごい魅力!


・S式で記述されたHTML(のような物)は良かった
 -ブラウザ(GUI)はS式を直接理解
 -quasiquoteでHTMLを生成
 -言語とデータの融合は実にlispっぽかった


lispにとっつきやすくするために導入した糖衣構文が最後まで足を引っ張った。 
 -高速化、メモリー、あらゆる点で糖衣構文はじゃまだった。シンプルなlisp最高!


・サーバーサイドでも動かしたけど、利点は感じられなかった
 -強い静的型付け言語最高!


・高速化のために超並列化、継続などは諦めた
 -実行スピードは、okiのl2lispの2倍ぐらい速くなっていたと思います。


・残念ながら過渡的な技術
 -スマートフォンではevalできるJavaScriptが標準で使えるので、わざわざ独自のスクリプト言語を導入する必要がない。
 -JavaScriptを導入できるほどのハードウェアがなく、evalしたりいろいろやりたい場合は、lisp環境を作る、というのは今でもアリだと思います。


以上です。

Shibuya.lisp #3行ってきた。そして現実逃避とか

 shibuya.lisp #2は申し込みが間に合わなかったけど、#3でまた参加することができた。いやー、おもしろかった。すばらしい!!

 ライトニングトークで発表させてもらったんだけど、プロジェクタへのノートPCの出力がおかしいわ、パワーポイントが起動しないわでぐだぐだでした。申し訳ない。事前に接続テストしていなかったのが悪い。たるんでた。はぁ・・・

 今度は天下一カウボーイ大会だ。困った。L4uの発表をしようと思っていたのに、川合さんがしゃべるんじゃなぁ・・・

 今回のshibuya.lispのWeb系フレームワークはみんなkahua的というか、arc的というか、プログラムが主になってWebページを生成する形だった。俺の作っているものはJSPみたいにハイパーテキストがベース。それにいわゆる継続ベースのフレームワークで1対1のプログラムを書いているように作れる。だけど、バックボタンで過去の時間に戻るのではなく、本のページを戻る感覚で、アンドゥー的な動作をしたいときは明示的にアンドゥーしてもらうようにしているとか、完全に文化が違う。これはたぶん俺がクライアントプログラムをずっと作ってきたからだと思う。まだちゃんとした「デカイ」アプリを作っていないから、これが本当に正しいのかわからない。もしかしたら最悪やっぱりだめだったってことになるかもしれない。でも、俺にはこの方向しか無いと思うんだよなぁ。

 1台のサーバーで1000から10000クライアントを同時にさばけるWebサーバー・フレームワークを目指していた。Erlangみたいな超並列性を意識して、矛盾が起きずにシンプルで・・と考えたら、俺にはこの方向しか思いつかなかった。
 いずれにせよ、クライアントアプリも、サーバーアプリも、まだ出せるものがない(大人の事情とか)。俺がどんなに熱く語ろうが、悔しいが見せられる実績が一つもないので説得力が皆無だ。くやしい。180秒で観念的なことをしゃべるぐらいしかできないか・・・ 1年後だったらなぁ・・

 最近、俺の進んでいる方向は正しいのか迷ってしまうことがある。特にこんなふうに自分とはまったく方向が違って、しかもちゃんと実用になっているモノをみたりすると。
 とにかくモノを作らねば。でかいことばかり言ってモノを出さないのはただの詐欺師だからな。プログラマーはコードで示すのだ。

 そんなこんなで思い悩んだり、娘が生まれたり、父親が死にそうだったり、なんかいろんなことが一度に起きすぎて少々疲れた・・・ 現実逃避したい。
 olympus E-510とマウントアダプタを使ってニコンペンタックスのレンズをつけて沼遊びをしているんだけど、今、猛烈にpentax K-7が欲しくなっている。何とでも言え! 俺はペンタックスと心中する覚悟をした! D90はちょっと高いなぁ、D5000にするか、とか悩んでいたはずが、いつの間にかEOS 50Dよりも高いカメラを買うことに決めている。カメラの世界は恐ろしい・・・・ 楽しいけど。