我有一个 C++ 程序,它创建了大量存储在标准 C++ 容器中的数据。我希望能够从我的二进制程序中启动一个 C++ 解释器并打开一个 REPL 会话来操作该数据。最好,我想使用现代 C++11 语法。可行吗?在 Visual Studio 环境下开发是否可行?
我听说过 Ch,但它似乎只实现了 C++ 98 语法的一小部分。
我听说过 Cling,但如果我没记错的话,Cling 的一位顶级开发人员在 2012 年的 Google TechTalks 中对这个问题做出了否定的回答。准确吗?
我有一个 C++ 程序,它创建了大量存储在标准 C++ 容器中的数据。我希望能够从我的二进制程序中启动一个 C++ 解释器并打开一个 REPL 会话来操作该数据。最好,我想使用现代 C++11 语法。可行吗?在 Visual Studio 环境下开发是否可行?
我听说过 Ch,但它似乎只实现了 C++ 98 语法的一小部分。
我听说过 Cling,但如果我没记错的话,Cling 的一位顶级开发人员在 2012 年的 Google TechTalks 中对这个问题做出了否定的回答。准确吗?
虽然不是解释器,但RuntimeCompiledC++的控制台可能会满足您的需求(可能需要一些努力才能成为更好的 REPL 编辑器),特别是因为它使用系统内置编译器,您将能够获得 C++ 11(尽管在 Windows 上我建议将其强制为 GCC/Clang 而不是 MSVC 以获得更好的 C++11 支持)。
作为一个额外的好处,它会比解释代码运行得快很多。
在您的 shell 提示符下还有另一个 REPL。它是 bash 脚本,它使用通常的 C++ 样板和调用编译器来装饰代码片段。它有一些额外的库使其像 AWK 一样工作并处理范围/FP 表达式。不确定是否易于嵌入。链接。我知道它很快就会内置处理大内存表(类似db)。来自文档的示例:
// Classic pipe. Alogorithms are from std::
scc 'vector<int>{3,1,2,3} | sort | unique | reverse'
{3, 2, 1}
// Assign 42 to 2..5
scc 'vint V=range(0,9); range(V/2, V/5) = 42; V'
{0, 1, 42, 42, 42, 5, 6, 7, 8, 9}
// Find (brute force algorithm) maximum of `cos(x)` in interval: `8 < x < 9`:
scc 'range(8, 9, 0.01) * cos || max'
-0.1455
// Integrate sin(x) from 0 to pi
scc 'auto d=0.001; (range(0,pi,d) * sin || add) * d'
2