我正在尝试在程序中嵌入ruby1.9解释器。我目前在forkOS
包中使用hruby
,但似乎这仅适用于ruby 1.8和2.x.看起来1.9需要在主线程中执行。作为一个副节点,有 no 文档,如何做这样的事情,所以唯一指向我当前问题的指针是here。
有没有办法控制主线程来运行我的所有FFI调用?
答案 0 :(得分:1)
在完成了一些测试和阅读文档后,我得出了以下结论。该报告称所有这些都是实现定义的,因此没有标准方法。模块Control.Concurrent
在其文档中声明main是绑定线程,但它不要求它与主OS线程相同。
实验(至少在Linux 64位,GHC 7.8和7.10-rc3)主线程是OS线程。鉴于主线程是绑定的,似乎没有理由在其他GHC平台上有所不同,但是我无法测试其他平台。
在实际实现这个方面,如果你想编程好像ruby在另一个线程中,你可以在不同的线程中运行大多数非ruby的东西,并通过任一{与主线程(与ruby解释器对话)进行通信{1}}或MVar
s。请参阅@chi的评论,了解如何在TVar
中完成此操作。
就库接口而言,您可以使用一个需要延续的初始化函数。你的库在初始化时劫持线程,然后在另一个线程上调用continuation。当然,您需要向用户说明必须在主线程中调用它。