最近在Racket邮件列表中出现了一个类似的问题,有人发布了一个链接到旧线程的链接,其中Matthew Flatt建议启动子流程和管道.
看起来Julia不提供外部接口(例如,从C调用Julia).所以,我认为你必须在一个单独的进程中运行Julia,
process或者subprocess通过stdin和stdout与进程通信.在2014年1月29日星期三16:58:29 -0800(太平洋标准时间),E Comer写道:
嗨,Racket开发人员,程序员和用户:
有没有办法从DrRacket调用Julia函数?[我正在尝试将Julia的数字运算功能与Racket中的Plot模块的漂亮图形集成,以研究特定动态系统的某些属性]
非常感谢您的支持.
恩里克
例如,编写一个循环的小型Racket程序:从stdin读取,将结果写入stdout.它的读写格式取决于您.它可以读取s表达式(方便在Racket中)并输出一个面向行的结果(在R中可能更方便,我不知道).
然后让R作为子进程启动Racket程序,并与其stdin和stdout对话.
作为反向的一个示例(将球队管道连接到子进程),请参阅此Racket"客户端"与此Python"服务器"子进程交谈.我不知道R是否有类似Racket的东西process,它为你提供了子进程的stdin和stout.
尽管FFI似乎是"正确的"方法,但实际上在高级语言之间编组事物可能具有挑战性.当你有一些特定的互操作时,通常是过度的.我的建议是从管道到子流程的方法开始.它通常简单可靠.它可能会变得足够快以满足您的需求.有时甚至更快.[1]
[1]:作为一些轶事,请看一下GitHub在Ruby代码中使用Python编写的Pygments的历史.有一次,他们有一些精心设计的方法在Ruby中嵌入Python.为了加快速度,他们转而在子进程和管道中运行Pygments.(无论如何,这是我对提交历史的理解.)