小编Iva*_*kin的帖子

需要一个Ypsilon用法的例子

我开始搞乱Ypsilon,它是Scheme的C++实现.

它符合R6RS,具有快速的垃圾收集器,支持多核CPU和Unicode,但有一个LACK文档,C++代码示例和代码中的注释!

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

源代码结构良好,但结构不熟悉.我花了两周时间穿透它,这就是我发现的:

  1. 与外部世界的所有通信都是通过称为端口的C++结构完成的,它们对应于Scheme端口.
  2. 虚拟机有3个端口:IN,OUT和ERROR.
  3. 端口可以​​是std-ports(通过控制台),socket-ports,bytevector-ports,named-file-ports和custom-ports.
  4. 每个自定义端口必须提供称为处理程序的填充结构.
  5. 处理程序是一个包含6个元素的向量:第一个是布尔值(端口是文本的),其他五个是函数指针(onRead,onWrite,onSetPos,onGetPos,onClose).

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

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

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

总而言之,如果有人提供上述任何场景的C++示例,它将显着节省我的时间.提前致谢!

c++ scheme bytecode ffi

6
推荐指数
1
解决办法
171
查看次数

球拍作为游戏引擎中的脚本语言

我想为我的C++游戏引擎添加脚本功能.

我有Engine.exe,Physics.dll,Audio.dll和我加入Scripting.dll这是一个高层次的球拍包装.

Engine.exe加载Physics.dll和设置物理世界,加载Audio.dll和设置音频世界.它应该加载Scripting.dll,以绑定成立Physics.dll,Audio.dll并加载游戏脚本.

AFAIK有两种方法可以将Racket嵌入到C++程序中:

使用外部接口,由于需要加载似乎离奇Physics.dll,Audio.dll两次:第一次从Engine.exe,然后从游戏脚本.

编写扩展名看起来更具吸引力,因为它允许在C++端进行脚本绑定.另一方面,你必须构建你的扩展raco ctool,链接它与mzdyn目标文件 - 这看起来也很尴尬:为什么不建立mzdyn一个静态库?

我想实现一个方法,例如setupScriptBindings(),在in Physics.dll和in中Audio.dll,并Engine.exe在启动时调用它.

有一种直截了当的方法吗?

c++ dll scheme game-engine racket

6
推荐指数
1
解决办法
1439
查看次数

标签 统计

c++ ×2

scheme ×2

bytecode ×1

dll ×1

ffi ×1

game-engine ×1

racket ×1