我开始讨论Ypsilon,这是Scheme的C ++实现。
它符合R6RS,具有快速垃圾收集器功能,支持多核CPU和Unicode,但在代码中有 LACK 文档,C ++代码示例和注释!
作者将其作为独立的控制台应用程序提供。 我的目标是将其用作图像处理应用程序中的脚本引擎。
源代码结构合理,但结构不熟悉。 我花了两周时间穿透它,这就是我发现的:
据我了解,我需要实现3个自定义端口(IN,OUT和ERROR)。 但是现在我无法弄清楚,处理程序中每个函数(onRead,onWrite,onSetPos,onGetPos,onClose)的输入参数是什么。
不幸的是,既没有实现自定义端口的示例也没有以下内容的示例:
总结,如果有人提供上述任何场景的C ++示例,它将大大节省我的时间。 提前谢谢!
答案 0 :(得分:2)
好的,从我能读到的源代码,这里是如何调用各种处理程序(这完全是非官方的,完全基于源代码检查):
(lambda (bv off len))
:接受一个bytevector(处理程序将读取数据放入其中),偏移量(fixnum)和长度(fixnum)。您应该读入最多len
个字节,将这些字节从bv
开始放入off
。返回实际读入的字节数(作为fixnum)。(lambda (bv off len))
:接受一个bytevector(包含要写入的数据),offset(fixnum)和length(fixnum)。从len
开始,从bv
获取off
个字节,然后将其写出来。返回实际写入的字节数(作为fixnum)。(lambda (pos))
(仅在文本模式下调用):允许您存储pos
的一些数据,以便将来调用具有相同pos
的设置位置处理程序value会将位置重置回当前位置。忽略返回值。(lambda (pos))
:将当前位置移动到pos
的值。忽略返回值。(lambda ())
:关闭端口。忽略返回值。答案 1 :(得分:2)
回答另一个问题,关于编译和运行“字节码”:
compile
。这将返回一个代码对象。run-vmi
,但您无法从外部代码访问此代码。auto-compile-cache
系统。详细了解heap/boot/eval.scm
。 (同样,这不是官方回复,而是纯粹基于个人实验和源代码检查。)