我开始搞乱Ypsilon,它是 Scheme 的 C++ 实现。
它符合R6RS,具有快速垃圾收集器,支持多核 CPU 和 Unicode,但缺少文档、C++ 代码示例和代码中的注释!
作者将其作为独立的控制台应用程序提供。我的目标是将它用作图像处理应用程序中的脚本引擎。
源代码结构良好,但结构不熟悉。我花了两周时间研究它,这就是我发现的:
- 与外部世界的所有通信都是通过称为端口的 C++ 结构完成的,它们对应于 Scheme 端口。
- 虚拟机有 3 个端口:IN、OUT 和 ERROR。
- 端口可以是标准端口(通过控制台)、套接字端口、字节向量端口、命名文件端口和自定义端口。
- 每个自定义端口都必须提供一个名为handlers的填充结构。
- Handlers是一个包含 6 个元素的向量:第一个是布尔值(端口是否为文本),其他五个是函数指针(onRead、onWrite、onSetPos、onGetPos、onClose)。
据我了解,我需要实现 3 个自定义端口(IN、OUT 和 ERROR)。但是现在我无法弄清楚 handlers 中每个函数(onRead、onWrite、onSetPos、onGetPos、onClose)的输入参数是什么。
不幸的是,没有实现自定义端口的示例,也没有以下内容的示例:
- C++ 到 Scheme 函数绑定(提供的示例是一堆 .scm 文件,仍然不清楚在 C++ 端做什么)。
- 编译和运行字节码(通过 bytevector-ports?但是如何将文本编译为字节码?)。
总而言之,如果有人提供上述任何场景的 C++ 示例,它将大大节省我的时间。提前致谢!