moshの去年と今年

去年は0.2.7をリリースした。去年の開発は個人的なニーズを満たす方向に突き進んでしまったのであんまり普及に対する方策に手が回らなかった。
未だにbootstrapにGaucheが必要なのはかなり不味いのだけど、なかなか根本的な改善には手が回っていないのが実情。

去年の進捗

去年は一度しかリリースをすることができなかった。さすがに年1のリリースは少なすぎるので今年は増やしていきたい。
去年は非同期I/Oインフラの実装が大きい。libuvを採用せずに自前で各種OS向けの非同期I/Oバックエンドを用意したので、ビルドの規模はあまり大きくせずに実装することができた。いまのところpoll()とWin32のIOCPを利用していて、TCP/IPFFIスレッドを使用できる。
Win32ではpsyntax-moshのサポートを諦めた代わりに、OS機能のサポートがかなり手厚くなった。プロセスの起動やリダイレクト、GUIは非同期I/O APIを通して利用できるようになった。
MessagePack実装もかなり信頼できるレベルに達したと思う。ただし非常に遅い。。ここはcopy-on-writeなbytevectorなどヒープ機能の増強が必要な領域。
地味な所では、Plugin機構を導入し、この機構を通してcursesをサポートした。

今年の目標

↑で根本的な改善に手が回っていないと書いておきながら、今年も根本的な改善には手がまわらない様な気がしている。

  • 必達: R7RS Smallサポート

今年最大のSchemeトピックはR7RSができることで、これをいち早くサポートすることは戦略的にかなり重要といえる。
すでに、後はreaderとライブラリ構文だけという段階まで追い込んでいるので、達成は可能な見込み。

  • 0.2.8と0.2.9

とにかく0.2.8は今年前半にリリースしたい。。既にけっこうクリティカルなバグフィックスを含んでいるので。。R7RSを含めるかは微妙なところ。
0.2.9にはR7RSサポートとI/O VMを含めたい。

  • 標準ライブラリのR7RSへのスイッチ

少なくともnmoshやSRFIはR7RS版を提供したい。

現在作業が進行しているのはcairo。cairoやOpenGLのようにFFI経由で毎回呼んでいるとオーバーヘッドが大変なことになるライブラリに関してはプラグインを提供したい。

これは去年からの持ち越し。カッコのハイライトやParedit等操作性の向上を目指す。chibi-schemeやIronSchemeのようなTAB補完もたぶん必要。。
Emacsのようなscratchバッファが実装できると理想だけど、そのためにはテキストエディタを実装しないと行けないので手間と相談。

  • R7RS expander

R7RSからは、identifier macroが不要になったり、define-syntaxでの前方参照をサポートする必要がなくなったのでmacro expanderをかなりシンプルに実装できるようになった。
というわけで、R7RS専用のコンパクトなexpanderを書いてnmoshの標準expanderにしたい(R6RSはエミュレートにして、REPLの起動時にはロードしない)。

  • I/O VM (新Heap)

現状のmoshのヒープ機構やVMは、リアルタイムアプリケーションには向かない。というわけでリアルタイムアプリケーション向けのVMをデザイン/実装して、通信や演算を任せるようにする。
従来のmosh VMはデバッガやREPLを提供する目的でしばらく残る。