根据需要组装函数并快速计算

Assembling a function as needed and computing it fast

本文关键字:计算 函数      更新时间:2023-10-16

有一些解释语言,如Lisp、Tcl、Perl等,可以在运行时轻松地在代码中定义lambda/proc/sub,并在同一会话中对其进行评估。

有一些编译语言,如C++,执行速度会比解释语言快得多,但在运行时在编译程序中定义函数并执行它并不容易,如果可能的话。

这里的问题是要做以下操作:

  1. 在运行时定义一个函数:例如,基于初始输入数据导出数据的分析模型。

  2. 在循环中快速执行上述函数:例如,应用导出的分析模型来分析传入数据。

我看到的一个解决方案不太好看:

  1. 基于初始输入数据,在嵌入式Tcl中导出了表示分析模型的过程。

  2. 通过在一组样本点上评估Tcl中的过程,创建了一个查找表,乐观地说,这些样本点将覆盖适用范围。

  3. 查找表从Tcl解释器传递回二进制文件(它是用C++开发的)。

  4. 然后,通过在查找表中"足够接近"的值之间进行插值来分析传入数据。

上面的解决方案是可行的,但有相当多的问题,包括概念和计算问题。因此,问题是:是否有可能纯粹在C++中定义一个函数,并使其可在同一个运行时会话中执行?

从概念上讲,是否可以将函数创建为字符串,在内存中编译,并以某种方式将其链接回正在执行的二进制文件?

如果您想要开箱即用的东西,请查看ExprTK。如果你想自己编写一个表达式解析器,请查看Boost Spirit。

另一种选择是动态创建C++代码,将其编译为共享库(插件),并在运行时加载。这可能是最快的解决方案。