按需组装函数并快速计算

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

还有一些编译型语言,如C++,其执行速度远快于解释型语言,但在运行时定义函数并执行它并非易事,甚至可能根本不可能实现。

这里的问题是要做到以下几点:

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

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

我看到的一个解决方案并不十分理想:

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

  2. 通过在Tcl中对一组样本点评估该过程,创建一个查找表,这些样本点乐观地讲,可以覆盖适用范围。

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

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

上述解决方案虽然有效,但存在不少概念和计算上的问题。因此问题来了:是否可以在C++中纯粹定义一个函数,并使其在同一运行时会话中可用?

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


回答:

如果你想要一个开箱即用的解决方案,可以看看ExprTK。如果你想自己编写表达式解析器,可以查看Boost Spirit

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

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注