生成代码以与不需要重新编译的正在运行的 cpp 应用程序交互的好方法是什么?
What is a good way to generate code to interface with a running cpp application that doesn't require a recompile?
我正试图创建一个后端框架,通过串行连接与硬件交互。我需要能够准确地指定这些硬件模块将如何交互,而无需重新编译和在资源有限的系统上运行
我已经有了正在重新使用的cpp代码,它与硬件交互,并具有向设备发送消息的广泛功能。
运行时影响是一个需要认真考虑的问题,它运行在一个非常有限的arch发行版上,我们不想因为硬件原因而做太多更改。
对我来说,使用一种脚本语言进行接口是最有意义的,这种语言可以很容易地生成,以具有一组对cpp库的引用,这些引用可以通过命令加载(有点像插件系统)
Python-是一个非常好的选择,但我几乎没有使用嵌入式Python的经验,我已经研究过了,我想我可能会感到困惑的是,如果没有像pybind11和嵌入式Python这样的东西同时工作,解释的脚本将如何链接到原始程序中的功能。宾德当然有吸引力。请不要助推-也许有点。
LUA-是一个经过良好测试的健壮选项,但在命令下生成有点困难。LuaBridge也有我想要的功能。最大的担忧是运行时的影响,但我当然不是专家。
只需在cpp中完成整个操作,并像普通人一样加载库-实心选项,但可能是最难生成和轻松运行语法检查的选项。
用脚本语言完成整个过程,并消除编译器的开销-我的意思是,从技术上讲,这是的一个选项
当然,这些并不是所有的选择,但这远远超出了我的专业领域,我认为讨论一下会很有益。
我真的很想知道我应该花时间研究什么。我已经花了太多时间研究pybind了,我发现自己晚上睡不安稳。
理想情况下,此工作流程运行方式如下:
在主控制器上:
-
运行接口程序(cpp)
-
接口程序进行诊断并检查模块状态(已完成)
-
接口检查运行脚本以执行模块功能
脚本:
-
从某些源生成
-
运行测试以验证生成没有语法错误
-
被移到接口程序可以抓取的文件夹中(以"完全"安全的方式)我在开玩笑,我知道该设置的问题,但我们现在没有考虑它
那太长了,很抱歉,我只是非常失落,超出了我的舒适区。
是的,很抱歉我没有澄清为什么生成的代码很重要。我们构建了一个非常简单的顶层gui来与硬件交互,并且需要将其转换为脚本来与控制器的主界面交互。
我昨晚想出的另一个选择:
编写一个非常简单的自定义脚本语言,我可以在cpp端解析它并以这种方式链接
如果您正在生成一个脚本,您可能会将事情简化为一个简单的字节码,然后进行解释。这样您就不必麻烦解析或语法验证了。每个"指令"可以是一个简单的操作码,后面跟着零个或多个操作数,其中每个操作数都是整数、浮点或字符串(以及硬件支持/需要的任何其他基元数据类型)。您可以使用类似msgpack的东西来紧凑地编码和解码指令。
如果该模型有效,您可以逐渐在开发人员端添加工具,例如最小汇编器,甚至是生成字节码的脚本解释器,从而避免受限硬件环境中的任何复杂性。
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- 如何通过cpp程序运行shell脚本
- 如何在CPP中创建应该在Windows和Linux上运行的套接字?
- 无法使用犰狳运行编译的 cpp 代码,因为 dyld:库未加载
- System Verilog DPI - 在 cpp 中运行并行线程,在 SV 中运行另一个并行线程
- GDB:运行不带符号的 cpp 进程调试
- Antlr cpp 运行时 任何错误的指针转换?
- 我可以在不创建项目的情况下在Visual Studio 2019中编译和运行HelloWorld.cpp吗?
- CPP 数据类型运行时溢出
- Cucumber-cpp 需要运行示例的软件
- 代码块始终在项目中运行 main.cpp
- 将数据保存在.cpp上,并在 .h 上运行
- 运行单独的 cpp 文件,每个文件都有 main()
- 在GPU Paperspace机器上运行.CPP文件
- 使用 Microsoft VS 编写程序C++,但我在这里收到调试断言消息.它可以在 cpp.sh 上运行,repl.i
- 如何以与Explorer中的管理员的启动相同的方式从CPP运行程序
- 我运行sudo g++ main.cpp,但它没有运行程序
- CPP 程序在服务器上运行缓慢
- 从CPP运行Shell脚本,而脚本绑定在exe中
- 除了 clang 之外,"clang -S -emit-llvm file.cpp"运行任何其他可执行文件吗?