非同期I/O

R6RSにはI/Oを抽象化するためのportという仕組みが有るが、これは(もちろん)非同期I/Oには使えない。

libevent

まだ正式版がリリースされていないが、libevent2を丸ごと採用して、mosh本来のFileとSocketを使うのを止めるのが早いと考えている。

従来のlibeventはWindowsのサポートが良くなくて、例えばUnixのfdに非常に依存していた。APIは修正され、あとはコードが入るのを待つばかりというところ。あと、libevent2ではsendfileやmmapのようなファイル経由のオペレーションがサポートされた。
Windowsに関しては、いわゆるI/O Completion Port(IOCP)のサポートが今後入る事になっているが、他の操作は以前と同様エミュレーションで処理されるようだ。
要するに、libeventの各種APIを抽象化した拡張portを作り、それをベースとしたR6RS port互換レイヤを(Schemeで)書いて作るのが良いように思える。

GCD

GCD(Grand Central Dispatch)はタイマやsocket(OS Xmachベースなのでmachのport)等が発生するイベントをトリガとしてコードを実行できる。
moshはBoehm GCに依存しているので、GCDのようなカーネルサポートのあるクロージャ実行機構を利用できない。これらの機構はコードを非同期に実行するので、オブジェクトの生成に同期を必要とするmoshのオブジェクト機構には上手くフィットしない。Objective-CにはGCが有るので、何らかの方法でstop-the-worldするための手法を提供しているはずで、それを利用するようにBoehm GCの方を修正する必要があると考えられる。