gpt4 book ai didi

c++ - 如何将用户代码合并到我自己的应用程序中?

转载 作者:行者123 更新时间:2023-11-28 04:20:00 27 4
gpt4 key购买 nike

我已经在DMX照明应用程序上工作了一段时间,感觉好像在此过程中我学到了很多有关软件设计的知识。例如,具有私有成员和访问功能的数据隐藏是一种保证类只能按预期目的,线程安全地使用的好方法,但也可能过分地变得令人讨厌和难以扩展。从某种意义上讲很好,但是...无论如何,回到问题所在。

我现在正在考虑的是如何将用户代码合并到其中,以使其完全自由格式。我有某种喜欢的方式来进行表演,但这当然不是唯一的方式,并且每种方式都有其自身的功能和局限性,这些条件和局限性在特定的工作流程中可能无法正常工作。

因此,与其说我自己想出一个用户可能想要做的所有事情,不如说“对不起,你做不到”,倒不如说很多,我认为给他们提供某种图灵完整的编程语言,并让他们玩得开心。我可能还会给他们提供一组可复制的源代码,这些源代码可以做一些有用的事情,以及一个“代码向导”,可以信任该代码创建至少可以编译的内容,但是我的目标是让每个知识渊博的用户都可以创建自己的代码自己的工具,以便应用程序按其所需的方式运行:


每个按钮上的预设场景与定时淡入淡出互斥
在每个推子上预设场景,作为可混合的场景母带
没有预设的场景,但是每个控件都有其自己的效果,可以任意组合实时播放
定制自动化,所需的简单或复杂
等等。
以上所有混合物


预设场景可能无需用户编程即可使用内置功能,但其余场景是如此空白,以至于我看不到任何解决方法。



我现在拥有的版本具有一个字节码解释器,该解释器可运行自定义指令集,类似于我对x86的了解,后者专门为手动优化的汇编而设计,并受到其他一些面向新手的语言的启发,这些语言使我成为自定义解释的汇编。但是,由于(当然)我的发明不存在现有的工具链,因此我不得不编写自己的工具链,事实证明这是很多复杂的GUI工作。我(摆脱了大部分错误),但总是一团糟:总源代码中约有一半是用于几乎不可用的仅鼠标编辑器,当我尝试执行时,解释器似乎停滞了做很多事情。
(我没有为每个解释的指令计算本机指令,但这肯定很多!)

因此,我想知道是否要使用BasicCC++Python或其他已经具有不错的工具链并将其合并到我的应用程序中的应用程序,以代替自己的hack。开发环境似乎是应用程序的一部分-也许实际上是,无论哪种方式都没有可见的外部工具-但仍使用现有的成熟工具链。

从用户的角度来看,目标是:


性能(执行速度/复杂度不会降低)
现有社区的帮助,这样他们就不必为我所忙


我看到的挑战是:


将控制权从代码转移到我未编写的模块,并保证将其取回
访问由我的代码管理的动态数据集,而不会崩溃或破坏对仍然存在的事物的引用:


Audio_Analyzer[channel][band](静态,只读)
MIDI_Velocity[channel][note](静态,只读)
Physical_Controls["name"](由发现,读取/写入填充:电动推子,发光的按钮等)
Fixtures["name"].Features["name"](用户可随时创建/删除/修改,读取/写入,大多数装置包括自己的程序,可将功能部件转换为DMX)
DMX_In[universe][channel](用户可调的Universe计数,静态通道计数,只读)
DMX_Out[universe][channel](用户可调的Universe计数,静态通道计数,读/写)
等等。





所以...除了故意执行任意代码(不要以root用户身份运行)的明显安全性问题之外,我正在陷入哪种雷区?实现目标的好方法是什么?

到目前为止,我的开发环境一直是C++QtLubuntu (x64)上,但是我也希望该下一版本也可以在Raspbian (armhf)上运行。 (树莓派)

最佳答案

含糊且非常广泛,但仍然让我尝试回答。
根据与性能和对工具链或库的支持有关的要求,可以查看PyQt(用于Qt的Python绑定)库。使用pyqt可能是有益的,因为您可以对传递的对象进行所有精细的控制(Python使将对象进行操作/转换/修改为所需的输出对象变得很有趣),并且由于Qt和C ++的出色表现,您仍然可以获得性能。 PyQt具有活跃的社区,并渴望为任何问题/错误提供帮助。

关于c++ - 如何将用户代码合并到我自己的应用程序中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55671527/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com