かなり本気で携帯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環境を作る、というのは今でもアリだと思います。


以上です。