需要一个Ypsilon使用示例吗 我开始搞砸了,这是一个C++实现方案。 它符合快速垃圾收集器的特点,支持多核CPU和Unicode,但具有文档强> >文件>、C++代码示例和注释>p>

需要一个Ypsilon使用示例吗 我开始搞砸了,这是一个C++实现方案。 它符合快速垃圾收集器的特点,支持多核CPU和Unicode,但具有文档强> >文件>、C++代码示例和注释>p>,c++,scheme,bytecode,ffi,C++,Scheme,Bytecode,Ffi,作者将其作为独立的控制台应用程序提供。 我的目标是将其用作图像处理应用程序中的脚本引擎 源代码结构良好,但结构不熟悉。 我花了两周的时间来研究它,以下是我发现的: 所有与外部世界的通信都是通过C++结构来完成的。 端口,它们对应于方案端口 虚拟机有3个端口:输入、输出和错误 端口可以是std端口(通过控制台)、套接字端口、, 字节向量端口、命名文件端口和自定义端口 每个自定义端口必须提供一个称为处理程序的填充结构 处理程序是一个包含6个元素的向量:第一个是布尔值 (是否 端口是文本的),其他五个

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

源代码结构良好,但结构不熟悉。 我花了两周的时间来研究它,以下是我发现的:

所有与外部世界的通信都是通过C++结构来完成的。 端口,它们对应于方案端口
  • 虚拟机有3个端口:输入、输出和错误
  • 端口可以是std端口(通过控制台)、套接字端口、, 字节向量端口、命名文件端口和自定义端口
  • 每个自定义端口必须提供一个称为处理程序的填充结构
  • 处理程序是一个包含6个元素的向量:第一个是布尔值 (是否 端口是文本的),其他五个是函数指针(onRead、onWrite、onSetPos、onGetPos、onClose)
  • 据我所知,我需要实现3个自定义端口(IN、OUT和ERROR)。 但是现在我还不知道,在处理程序中每个函数(onRead、onWrite、onSetPos、onGetPos、onClose)的输入参数是什么

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

  • C++到Scheme函数绑定(提供的示例包括 .SCM文件,仍然不清楚C++上应该做什么)。
  • 编撰 运行字节码(通过字节向量端口?但如何将文本编译为 字节码?)
  • <强> <>强>,如果有人提供上述任何场景的C++示例,它将大大节省我的时间。


    提前谢谢

    好的,从我对源代码的了解来看,以下是各种处理程序的调用方式(这都是非正式的,纯粹基于源代码检查):

  • 读取处理程序:
    (lambda(bv off len))
    :获取字节向量(处理程序将读取数据放入其中)、偏移量(fixnum)和长度(fixnum)。您应该最多读入
    len
    字节,从
    off
    开始将这些字节放入
    bv
    。返回实际读入的字节数(作为fixnum)
  • 写入处理程序:
    (lambda(bv off len))
    :获取字节向量(包含要写入的数据)、偏移量(fixnum)和长度(fixnum)。从
    bv
    中最多抓取
    len
    字节,从
    off
    开始,并将其写出。返回实际写入的字节数(作为fixnum)
  • 获取位置处理程序:
    (lambda(pos))
    (仅在文本模式下调用):允许您为
    pos
    存储一些数据,以便将来使用相同的
    pos
    值调用设置位置处理程序时将位置重置回当前位置。返回值被忽略
  • 设置位置处理程序:
    (lambda(pos))
    :将当前位置移动到
    pos
    的值。返回值被忽略
  • 关闭处理程序:
    (lambda())
    :关闭端口。返回值被忽略

  • 要回答关于编译和运行“字节码”的另一个问题,请执行以下操作:

  • 要编译表达式,请使用
    compile
    。这将返回一个代码对象
  • 没有公开导出的方法来运行此代码对象。在内部,代码使用
    运行vmi
    ,但您不能从外部代码访问它
  • 在内部,加载和使用编译代码的唯一位置是其
    自动编译缓存
    系统

  • 有关详细信息,请查看
    heap/boot/eval.scm
    。(同样,这不是官方的回应,只是纯粹基于个人实验和源代码检查。)

    您是否试图联系项目的项目维护人员?这可以帮你节省一些时间。@Seki,是的。他们没有回答。那会有帮助的,谢谢你,@Chris!你和Ypsilon的发展有关系吗?我很高兴。我一点关系也没有:在我看到这个问题后,我下载了Ypsilon,并决定四处挖掘。然而,有两件事起了作用:1。我是Guile(另一个方案实现)的提交者,所以我确实知道方案实现通常是如何工作的。我有C++的专业经验,并考虑C++的主要语言之一。