将R函数作为C函数传递给C

Drm*_*old 6 c c++ r compilation abstract-syntax-tree

背景

我正在编写一个在R中实现特定优化算法的包,用于各种预先指定的目标函数(要优化的函数).优化代码本身用C语言编写.为了使代码尽可能高效,我还在C中重新实现了目标函数.在当前阶段,R的作用是使用.Call为C代码提供接口. .

目标

我希望该软件包能够处理任何用户提供的目标函数.但是,我不想从C调用R函数,这会产生很大的开销,并且很可能会非常缓慢.

我真正想要的是一种将有限类R函数(通常在统计和机器学习中看作成本函数)作为参数传递的方法,将此R函数转换为C函数,然后将其用作目标优化算法中的函数.

解决方案

R与LISP有很强的育儿关系.获得函数的抽象语法树(AST)非常简单.我认为有可能将AST解析为C函数然后编译它或者只是动态传递它(我不知道这是否在C中是可行的)

问题

  • 上述解决方案的想法是否可行?
  • 有没有其他方法可以做到这一点?
  • 我必须学会什么才能做到这一点?

注意:不必将此作为R包执行.试图在R包的刚性结构中执行此操作可能会使事情变得更加困难.

Dir*_*tel 7

先前实验的一些指示:

  • 莱斯的R到C编译器:放弃了

  • 西蒙的R到C编译器:也陈旧.

  • Duncan Temple Lang的R和LLVM尝试:有两个软件包和一篇已发表的论文,但(似乎)没有人使用它.自从我阅读了论文以来已经有一段时间了,但有一个限制是它甚至没有尝试覆盖所有的文件.

您不能轻易做到这一点的原因之一是,语言在计算语言以及非标准评估方面优于标准评估,承诺,强制评估等.

最后,对于将编译的目标函数传递给optmizer 的狭隘情况:请参阅我的RcppDE包.

对乔希提醒西蒙的尝试是不是.