如何生成代码以与运行的cpp应用程序接口,而不需要重新编译?
我正在尝试创建一个后端框架,以通过串行连接与硬件交互。我需要能够指定这些硬件模块的交互方式,而无需重新编译并在具有有限资源的系统上运行。
我已经有了与硬件交互并具有广泛功能发送消息到设备的cpp代码。
运行时影响是一个严肃的考虑因素,它运行在一个非常有限的架构发行版上,出于硬件原因,我们不想太多更改。
对我来说,最合理的做法是与一个脚本语言进行接口,这个语言可以很容易地生成一组对cpp基础的引用,可以在命令下加载。(有点像一个插件系统)
Python - 是一个非常好的选择,但我几乎没有使用嵌入式Python的经验,我已经调查了它,我猜我可能对解释脚本如何与原始程序的功能相关联感到困惑,需要像pybind11和嵌入式Python工作在一起一样。Binder当然很有吸引力。请勿使用Boost - _或许要用一点点_。
LUA - 是一个经过充分测试的强大的选择,但更难以按命令生成。 LuaBridge也具有我所需的功能。最大的关注点是运行时影响,但当然我不是专家。
只需在cpp中制作整个并加载库,像一个普通人一样 - 坚实的选择,但很可能是最难以生成和轻松运行语法检查的选项。
让整个东西都在脚本语言中,并摆脱编译器的开销 - 我的意思是技术上这是一个选择
当然,这并不是所有的选项,但这绝对是我所不懂的领域,我认为讨论是有益的。
我真的很想知道我应该花时间研究什么。我已经花了太多时间查找pybind,我发现自己晚上无法睡觉。
理想情况下,这个工作流程应该像这样运行:
_在主控制器上_:
运行接口程序(cpp)
接口程序进行诊断和检查模块状态(已完成)
接口检查运行脚本以执行模块功能
_脚本_:
从某些资源生成
运行测试以验证生成不具有语法错误
移动到文件夹中,接口程序可以以"完全"安全的方式抓取它(我开玩笑了,我知道这个设置的问题,但我们现在不考虑它)
这太长了,我很抱歉,我只是非常迷茫和失落。
是的,我很抱歉我没有澄清生成代码的重要性。我们建立了一个非常简单的顶级gui,用于与硬件交互,这需要将其翻译成与控制器的主接口交互的脚本。
我昨晚想到的另一个选择:
编写一个非常简单的自定义脚本语言,我可以在cpp一侧解析并以这种方式链接
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

如果你正在生成脚本,你可以将其简化为一个简单的字节码,可以被解释。这样你就不必处理解析或语法验证的问题。每个“指令”都可以是一个简单的操作码,后面是零个或多个操作数,每个操作数都是整数、浮点数或字符串(以及您的硬件支持/需要的任何其他基本数据类型)。你可以使用类似 msgpack 的编码和解码指令紧凑的工具。
如果这个模型有效,你可以逐步添加开发者工具,例如最小化汇编器,甚至是一个生成字节码的脚本解释器,从而避免了任何在约束硬件环境中复杂度的问题。