スタンドアロン版の追加計画
moshは家庭用ルータやマイコンで動かすにはでかいので、単体版も結局作ることに。R6RS的なライブラリnamespaceが(skymosh)のままだとちょっと紛らわしいので独自の名前にした。Yは例のごとくYpsilonのパクりで*1、uniはAOTコンパイラが1bit精度の中間コードを使うことから。
REPLやデバッグインターフェースのために適当なVMも書かないといけない。LuaのようにレジスタベースのVMにしたい。というのも、組み込みコンパイラの殆どがレジスタベースなため。
トレンドウォッチ
先のShibuya.lispでGaucheで進行中の変更が出てたのでそれを積極的にパクっていきたい。
- simple-struct
- consing、ヒープアロケーションを減らす
simple-structは以前AOベンチの時にも出てきた( http://practical-scheme.net/wiliki/wiliki.cgi?Gauche%3aAOBench )名前付きのVector。
最近moshにもネイティブサポートが来たようで、R6RS Recordのような高度な機能性はsimple-structの上に乗せるという方向性のようだ。
名前付きのvectorはskySchemeのコンパイラ実装でも多用していて、サポートしないわけにはいかない。
名前付きvectorを多用しているのはLuaからの影響で(だからskyではdefine-table等tableと呼んで*2いる)、lispのlistに比べて常識的な速度でランダムアクセスができるというメリットと、近年のデータ処理では単純なリストよりもLuaのような配列とハッシュテーブルのhybridが適していると感じていたので。
アロケーションを減らすのは常に重要な問題だが、なかなか(効果がある)うまいアイデアが無い。skyではパケット定義にコレクションクラスの機能があるため、lispプリミティブによるパケット構造のパースを可能にしつつ、ヒープへのアロケーションは節約している(パケットバッファを直接処理し、パケットの寿命は明示的に決定されている)。これを一般的なSchemeプログラムで効果的に実装できるかは微妙な線とも言える。