根据需要组装函数并快速计算
Assembling a function as needed and computing it fast
有一些解释语言,如Lisp、Tcl、Perl等,可以在运行时轻松地在代码中定义lambda/proc/sub,并在同一会话中对其进行评估。
有一些编译语言,如C++,执行速度会比解释语言快得多,但在运行时在编译程序中定义函数并执行它并不容易,如果可能的话。
这里的问题是要做以下操作:
-
在运行时定义一个函数:例如,基于初始输入数据导出数据的分析模型。
-
在循环中快速执行上述函数:例如,应用导出的分析模型来分析传入数据。
我看到的一个解决方案不太好看:
-
基于初始输入数据,在嵌入式Tcl中导出了表示分析模型的过程。
-
通过在一组样本点上评估Tcl中的过程,创建了一个查找表,乐观地说,这些样本点将覆盖适用范围。
-
查找表从Tcl解释器传递回二进制文件(它是用C++开发的)。
-
然后,通过在查找表中"足够接近"的值之间进行插值来分析传入数据。
上面的解决方案是可行的,但有相当多的问题,包括概念和计算问题。因此,问题是:是否有可能纯粹在C++中定义一个函数,并使其可在同一个运行时会话中执行?
从概念上讲,是否可以将函数创建为字符串,在内存中编译,并以某种方式将其链接回正在执行的二进制文件?
如果您想要开箱即用的东西,请查看ExprTK。如果你想自己编写一个表达式解析器,请查看Boost Spirit。
另一种选择是动态创建C++代码,将其编译为共享库(插件),并在运行时加载。这可能是最快的解决方案。
相关文章:
- 当 A 在 for 循环中调用函数 B 时,如何计算函数 A 的空间复杂度?
- 如何计算函数的时间复杂度?
- 有没有办法计算函数内arry的长度而不是作为参数传入?
- 如何计算函数的搜索复杂度
- 使用引用参数计算函数
- 递归计算函数f = n!/(c^n)的值
- 为什么这个C++字符串长度计算函数比另一个更快
- 用递归计算函数f(n)
- C++平均计算函数返回0
- 有没有比生成/累积更快的方法来计算函数结果的平均值
- 如何计算函数的时间
- 由于标识符未知,LLDB 无法计算函数
- 从 C++11 中的列表中选择并计算函数
- 计算后缀表达式.pop() 返回不正确的值来计算函数
- 在计算函数返回值之前或之后是否销毁了局部变量
- 计算函数指针的类型
- 计算函数中的模给出了与直接使用%运算符不同的答案
- 提升:以秒/毫/微米/纳米为单位计算函数的运行时间
- 行列式计算函数的优化
- 如何在c++中计算函数的执行时间和cpu消耗