私は、Scheme の C++ 実装であるYpsilonをいじり始めました。
R6RSに準拠し、高速なガベージ コレクターを備え、マルチコア CPU と Unicode をサポートしていますが、ドキュメント、C++ コード例、およびコード内のコメントが不足しています。
作成者は、これをスタンドアロンのコンソール アプリケーションとして提供します。私の目標は、画像処理アプリケーションのスクリプト エンジンとして使用することです。
ソース コードはよく構造化されていますが、構造がよくわかりません。私は 2 週間かけて侵入し、次のことを発見しました。
- 外界とのすべての通信は、ポートと呼ばれる C++ 構造体を介して行われます。これらは、Scheme ポートに対応しています。
- 仮想マシンには、IN、OUT、および ERROR の 3 つのポートがあります。
- ポートは、std-ports (コンソール経由)、socket-ports、bytevector-ports、named-file-ports、custom-ports のいずれかです。
- 各カスタム ポートは、handlersと呼ばれる塗りつぶされた構造を提供する必要があります。
- Handlersは 6 つの要素を含むベクトルです。最初の 1 つはブール値 (ポートがテキストかどうか)、残りの 5 つは関数ポインター (onRead、onWrite、onSetPos、onGetPos、onClose) です。
私の知る限り、3 つのカスタム ポート (IN、OUT、および ERROR) を実装する必要があります。しかし、今のところ、 handlersの各関数 (onRead、onWrite、onSetPos、onGetPos、onClose) の入力パラメーターは何なのかわかりません。
残念ながら、カスタムポートを実装する例も、次の例もありません。
- C++ から Scheme 関数へのバインディング (提供される例は多数の .scm ファイルですが、C++ 側で何をすべきかはまだ不明です)。
- バイトコードのコンパイルと実行 (bytevector-ports 経由?しかし、テキストをバイトコードにコンパイルする方法?)。
要約すると、誰かが上記のシナリオの C++ の例を提供してくれれば、時間を大幅に節約できます。前もって感謝します!