gpt4 book ai didi

c++ - 需要一个 Ypsilon 用法的例子

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:35:35 25 4
gpt4 key购买 nike

我开始弄乱 Ypsilon ,它是 Scheme 的 C++ 实现。

符合R6RS ,具有快速垃圾收集器,支持多核 CPU 和 Unicode,但缺乏文档、C++ 代码示例和代码注释!

作者将其作为独立的控制台应用程序提供。我的目标是将它用作图像处理应用程序中的脚本引擎。

源代码结构良好,但结构不熟悉。我花了两周时间深入研究它,这是我发现的内容:

  1. 与外部世界的所有通信都是通过称为 C++ 的结构完成的端口,它们对应于 Scheme 端口。
  2. 虚拟机有 3 个端口:IN、OUT 和 ERROR。
  3. 端口可以是标准端口(通过控制台)、套接字端口、字节 vector 端口、命名文件端口和自定义端口。
  4. 每个自定义端口都必须提供一个名为handlers 的填充结构。
  5. Handlers 是一个包含 6 个元素的 vector :第一个是 bool 值(无论 端口是文本),其他五个是函数指针(onRead、onWrite、onSetPos、onGetPos、onClose)。

据我所知,我需要实现 3 个自定义端口(IN、OUT 和 ERROR)。但是现在我无法弄清楚处理程序中每个函数(onRead、onWrite、onSetPos、onGetPos、onClose)的输入参数是什么。

不幸的是,既没有实现自定义端口的示例也没有以下内容的示例:

  1. C++ 到 Scheme 函数绑定(bind)(提供的例子是一堆.scm 文件,仍然不清楚在 C++ 端做什么)。
  2. 编译和 运行字节码(通过 bytevector-ports?但是如何将文本编译为 字节码?)。

总结,如果有人提供上述任何场景的 C++ 示例,将大大节省我的时间。提前致谢!

最佳答案

好的,根据我能读到的源代码,下面是各种处理程序的调用方式(这都是非官方的,完全基于源代码检查):

  1. 读取处理程序:(lambda (bv off len)):采用一个字节 vector (您的处理程序会将读取的数据放入其中)、一个偏移量 (fixnum) 和一个长度 (fixnum)。您应该读入最多 len 个字节,将这些字节放入 bvoff 开始。返回实际读入的字节数(作为固定数)。
  2. 写入处理程序:(lambda (bv off len)):采用字节 vector (包含要写入的数据)、偏移量 (fixnum) 和长度 (fixnum)。从 bv 中获取最多 len 个字节,从 off 开始,然后将它们写出。返回实际写入的字节数(作为固定数字)。
  3. 获取位置处理程序:(lambda (pos))(仅在文本模式下调用):允许您为 pos 存储一些数据,以便将来调用使用相同的 pos 值设置位置处理程序会将位置重置回当前位置。忽略返回值。
  4. 设置位置处理程序:(lambda (pos)):将当前位置移动到pos的值。忽略返回值。
  5. 关闭处理程序:(lambda ()):关闭端口。忽略返回值。

关于c++ - 需要一个 Ypsilon 用法的例子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14953563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com