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

问题描述 投票:0回答:1

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

我现在正在考虑的是如何将用户代码合并到其中,以使其完全自由形式。我有一种特定的方式,我喜欢运行一个节目,但它肯定不是唯一的方式,每种方式都有自己的能力和限制,可能会或可能不适用于特定的工作流程。

因此,不要尝试自己想出用户可能想要做的所有事情,并且不得不说,“我很抱歉,你不能这样做”,很多,我认为这样做会更好。给他们一种图灵完整的编程语言,让他们玩得开心。我也可以给他们一组可复制的源代码,它们可以做一些有用的东西,还有一个“代码向导”,可以信任它来创建至少可以编译的东西,但是我的愿景是让每个知识渊博的用户创建他们的自己的工具,以便应用程序以他们想要的方式工作:

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

预设的场景可能使用内置函数而无需用户编程,但其余部分是一个空白的画布,我无法看到它的方法。


我现在的版本有一个字节码解释器,它运行一个自定义指令集,类似于我对x86设计用于手动优化组装的理解,并且受到一些其他面向新手的语言的激励,这些语言让我感到自定义解释程序集。但是因为(当然)我的发明没有现有的工具链,所以我必须编写自己的工具,结果证明是很多复杂的GUI工作。我得到了(大部分?)其中的错误,但它总是一团糟:大约一半的源代码是仅用于鼠标的编辑器,几乎无法使用,当我尝试时,解释器似乎陷入困境用它做很多事。 (我没有计算每个解释指令的原生指令,但它绝对是很多!)

所以我想知道使用BasicCC++Python,或其他已经有一个像样的工具链的东西,并将其纳入我的应用程序代替我自己的黑客。开发环境似乎是应用程序的一部分 - 或者它实际上是,没有任何明显的外部工具 - 但仍然使用现有的,成熟的工具链。

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

  • 性能(执行速度/复杂性没有陷入困境)
  • 现有社区寻求帮助,这样他们就不必淹没我的一切

我看到的挑战是:

  • 将控制权从我的代码转移到我没有写的模块,并保证我得到它
  • 访问由我的代码管理的动态数据集,而不会崩溃或破坏对仍然存在的事物的引用: Audio_Analyzer[channel][band](静态,只读) MIDI_Velocity[channel][note](静态,只读) Physical_Controls["name"](由发现,读/写:电动推子,点亮按钮等组成) Fixtures["name"].Features["name"](用户创建/删除/修改随时,读/写,大多数灯具包括他们自己的编程,以将功能转换为DMX) DMX_In[universe][channel](用户可调整的宇宙计数,静态通道数,只读) DMX_Out[universe][channel](用户可调整的宇宙计数,静态通道数,读/写) 等等。

所以...除了有目的地执行任意代码的明显安全问题(不要以root身份运行)之外,我还有什么样的雷区?什么是实现目标的好方法?

到目前为止,我的开发环境是C++上的QtLubuntu (x64),但我也希望下一个版本也可以在Raspbian (armhf)上运行。 (覆盆子皮)

c++ user-defined-functions
1个回答
1
投票

模糊而且非常广泛,但仍然让我试着回答。根据您对性能的支持以及对工具链或库的支持,您可以查看PyQt(Qt的Python绑定)库。使用pyqt可能证明是有益的,因为你对所传递的对象进行了所有精细控制(Python使得操作/转换/修改对象变得有意义的输出对象变得很有趣),并且由于Qt和C ++的存在,你仍然具有性能。 PyQt有一个活跃的社区,并渴望帮助解决任何问题/错误。

© www.soinside.com 2019 - 2024. All rights reserved.