python - 生成代码以与不需要重新编译的正在运行的 cpp 应用程序交互的好方法是什么?

标签 python c++ c lua

我正在尝试创建一个后端框架以通过串行连接与硬件进行交互。我需要能够准确指定这些硬件模块将如何交互,而无需重新编译并在资源有限的系统上运行。

我已经有了正在重用的 cpp 代码,它与硬件交互并具有向设备发送消息的广泛功能。

运行时影响是一个严肃的考虑因素,它在一个非常有限的 arch 发行版上运行,我们不想因为硬件原因而改变太多。

对我来说最有意义的是与一种脚本语言交互,这种语言可以很容易地生成,以具有一组对 cpp 库的引用,可以根据命令加载。 (有点像插件系统)

Python - 是一个非常好的选择,但我几乎没有使用嵌入式 python 的经验,我已经研究过它,我想我可能会感到困惑的地方是解释的脚本如何链接到功能在没有像 pybind11 和嵌入式 python 这样的东西一起工作的原始程序中。 Binder当然有吸引力。请不要提升 - 可能有一点

LUA - 是一个经过充分测试但更难按命令生成的可靠选项。 LuaBridge 还具有我想要的功能。最大的担忧是运行时影响,但我当然不是专家。

只需像普通人一样在 cpp 中制作整个内容并加载库 - 可靠的选项,但可能最难生成并轻松运行语法检查。

用脚本语言制作整个东西并摆脱编译器的开销 - 我的意思是从技术上讲这是一个选项

这些当然不是所有选项,但这远远超出了我的专业领域,我认为讨论会很有帮助。

我真的很想知道我应该花时间研究什么。我已经花了太多时间研究 pybind,我发现自己晚上睡不着觉。

理想情况下,此工作流程将像这样运行:

在主 Controller 上:

  1. 接口(interface)程序运行(cpp)

  2. 接口(interface)程序进行诊断并检查模块状态(已完成)

  3. 接口(interface)检查运行脚本以执行模块功能

脚本:

  1. 从一些来源生成

  2. 运行测试以验证生成没有语法错误

  3. 移动到接口(interface)程序可以获取它的文件夹中(以“完全”安全的方式)我开玩笑我知道该设置的问题,但我们现在不考虑它瞬间

那太长了,很抱歉我迷路了,超出了我的舒适区。

是的,很抱歉我没有阐明为什么生成的代码很重要。我们构建了一个非常简单的顶级 gui 来与硬件交互,需要将其转换为脚本才能与 Controller 的主界面交互。

我昨晚想到的另一个选择:

编写一个非常简单的自定义脚本语言,我可以在 cpp 端解析并以这种方式链接

最佳答案

如果您正在生成脚本,您可能可以将事情简化为可以解释的简单字节代码。这样您就不必搞乱解析或语法验证。每个“指令”可以是一个简单的操作码,后跟零个或多个操作数,其中每个操作数都是整数、 float 或字符串(以及您的硬件支持/需要的任何其他原始数据类型)。您可以使用类似 msgpack 的东西来紧凑地编码和解码指令。

如果该模型有效,您可以逐渐在开发人员端添加工具,例如最小汇编器,甚至是生成字节代码的脚本解释器,从而避免在受限硬件环境中出现任何复杂性。

关于python - 生成代码以与不需要重新编译的正在运行的 cpp 应用程序交互的好方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54285876/

相关文章:

python - 如何根据时间序列 Pandas 数据框的其他两个 boolean 列确定列中的状态?

python - 不同对象中的复选框和单选按钮同时在所有对象中使用react(不希望的)

javascript - Django:无法从 Javascript 调用 python 函数

c++ - 你能把一个复杂的条件放到 for 循环中吗?

c# - 对于此 C 代码,哪种编码方式是正确的?

Python:让一个函数调用另一个已输入参数的函数

c++ - 低级 C++ 图形库

C++ 在嵌套命名空间内定义外部命名空间的函数

java - 从哪里可以从诺基亚相机示例应用程序获取流式(实时)视频和音频?

c++ - 从另一个 exe 打开 exe,禁用内部 exe 中的某些键