首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将用户代码集成到我自己的应用程序中?

如何将用户代码集成到我自己的应用程序中?
EN

Stack Overflow用户
提问于 2019-04-14 02:38:58
回答 1查看 65关注 0票数 0

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

我现在想的是,如何将用户代码合并到其中,从而使其完全自由。我有一个特定的方式,我喜欢运行一个节目,但这肯定不是唯一的方式,每一种方式做它有自己的能力和限制,可能是或不可能很好地工作在一个特定的工作流程。

所以,与其自己想出用户可能想做的任何事情,而且不得不说,“对不起,你不能这么做”,我认为最好是给他们一种图灵完整的编程语言,让他们玩得开心。我可能还会给他们一套可复制的源代码,它可以做一些有用的事情,还有一个“代码向导”,可以信任它来创建至少可以编译的东西,但我的愿景是让每个知识渊博的用户创建他们自己的工具,这样应用程序就能按照他们想要的方式工作:

  • 在每个按钮上预置场景,与时间交叉淡出相互排斥
  • 预置每个制图机上的场景,作为混合场景管理器
  • 没有预置的场景,但是每个控件都有自己的效果,可以在任何组合中现场播放。
  • 自定义自动化,尽可能简单或复杂
  • 等。
  • 上述所有混合物

预置场景可能在没有用户编程的情况下使用内置函数,但其余的都是空白的画布,我看不出有什么方法可以绕过它。

我现在的版本有一个字节码解释器,它运行一个自定义指令集,类似于我所理解的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] (用户可调宇宙计数,静态信道计数,读/写)
    • 等。

So...besides故意执行任意代码的明显安全问题(不要将其作为根运行),我要进入什么样的雷区?实现我的目标的好方法是什么?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-14 10:20:50

含糊不清,很宽泛,但还是让我试着回答。根据与性能和对工具链或库的支持相关的需求,您可以查看PyQt()库。使用pyqt可能是有益的,因为您拥有传递的对象上的所有精细控件(Python使操作/转换/修改对象成为理想的输出对象变得很有趣),而且由于Qt和C++的存在,您仍然具有这种性能。PyQt有一个活跃的社区,并且渴望帮助解决任何问题/bug。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55671527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档