我已经在DMX照明应用程序工作了一段时间了,我觉得我已经学到了很多关于软件设计的知识。例如,具有私有成员和访问函数的数据隐藏是一种很好的方法,可以保证类只能按预期的、线程的方式使用,但它也可能被过度使用,以至于令人讨厌和难以扩展。but...anyway,这在某种程度上是好的,回到问题上来。
我现在想的是,如何将用户代码合并到其中,从而使其完全自由。我有一个特定的方式,我喜欢运行一个节目,但这肯定不是唯一的方式,每一种方式做它有自己的能力和限制,可能是或不可能很好地工作在一个特定的工作流程。
所以,与其自己想出用户可能想做的任何事情,而且不得不说,“对不起,你不能这么做”,我认为最好是给他们一种图灵完整的编程语言,让他们玩得开心。我可能还会给他们一套可复制的源代码,它可以做一些有用的事情,还有一个“代码向导”,可以信任它来创建至少可以编译的东西,但我的愿景是让每个知识渊博的用户创建他们自己的工具,这样应用程序就能按照他们想要的方式工作:
预置场景可能在没有用户编程的情况下使用内置函数,但其余的都是空白的画布,我看不出有什么方法可以绕过它。
我现在的版本有一个字节码解释器,它运行一个自定义指令集,类似于我所理解的x86是为手工优化的程序集设计的,并且是由其他一些面向初学者的语言驱动的,这些语言给我留下了自定义解释程序集的印象。但是,因为(当然)我的发明没有现成的工具链,所以我不得不编写自己的工具链,这是一项非常复杂的GUI工作。我得到了(大部分?)它的错误,但它一直是一团糟:大约一半的全部源代码是一个只有鼠标的编辑器,几乎无法使用,而解释器似乎陷入困境,当我尝试做了很多它。
(我还没有计算过每条解释的指令的本地指令,但这绝对是很多!)
所以我想知道是否要使用Basic、C、C++、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)上运行。(覆盆子皮)
发布于 2019-04-14 10:20:50
含糊不清,很宽泛,但还是让我试着回答。根据与性能和对工具链或库的支持相关的需求,您可以查看PyQt()库。使用pyqt可能是有益的,因为您拥有传递的对象上的所有精细控件(Python使操作/转换/修改对象成为理想的输出对象变得很有趣),而且由于Qt和C++的存在,您仍然具有这种性能。PyQt有一个活跃的社区,并且渴望帮助解决任何问题/bug。
https://stackoverflow.com/questions/55671527
复制相似问题