Visual REPLの設計

メディア処理のためには、emacsとかの上でどうにかするよりも、自前でエディタや他の仕事をするインターフェースを持つ方が好ましい。emacsをはじめとしたエディタや、既存の端末エミュレータはビデオや3Dグラフィックスを表示するようにはできていない。
要するに端末エミュレータ上で動作するアプリケーションとして作りづらいなら、自前の端末エミュレータを作ればいいじゃないかという発想。

upper layer

重要な要求としては、これはVT100互換のコンソールから、自前のビデオターミナルまで広範な場所で同じコードを流用しなければいけないという点。外部からSSHして調整といったことを考えると、VT100互換を切り捨てるのは難しい。
エディタを完全に端末エミュレータベースにすればいいという説も有るが、それだと強調のためのフォントを大きくするとか、プロポーショナルフォントの利用が難しくなるといった問題が有る*1

lower layer

実は描画APIの選択が意外と難しい。全面的にcairoで書くと非常に遅くなってしまうので、cairoの描画をbitmapとしてキャッシュしてあとから描画する必要が有る。OpenVGさえ普及していれば。。
OpenGLやOpenVGは基本的には、「毎フレームごとに全消去してすべて再描画」というモデルで、実際、ディスプレイリストの生成処理というのは描画そのものに比べればあまり負荷は大きくないから、ハードウェアオフロードされる限りは、毎回の書き直しはあまり重要な問題では無いといえる。
しかし、単に「αつきビットマップを高速にblitするだけのAPI」を考えても、それぞれに一長一短がある。
OpenGLはそれなりに高速でC言語との親和性も良いが、OpenGLをサポートしていない環境ではどうしようもなく遅くなる。また、OpenGLは複数のWindowで使えるようになってからまだ歴史が浅い。要するにAIGLX以降の歴史しかない。
SDLのαつきビットマップの転送はそれほど最適化されておらず、複数のWindowで使うことはできない。XやWindowsのOS固有APIは使うのが異常に面倒で、移植性も無いので候補にならない。
最初にSDLを使ったものを作っておいて、後から移植というスタイルが一番有力だろうか。SDLは音声出力などもサポートしているので画面表示に使わなかったとしても利用価値がある。

*1:プロポーショナルフォントをプログラミングに使うことは議論があると思うが、ちゃんとしたスペルチェック機構が有れば、要するに名前空間をエディタが把握していれば特に問題無いと考えている。