Как включить код пользователя в мое собственное приложение? - PullRequest
0 голосов
/ 14 апреля 2019

Я уже некоторое время работаю над приложением освещения DMX, и мне кажется, что я многое узнал о разработке программного обеспечения.Например, сокрытие данных с помощью закрытых членов и функций доступа является отличным способом гарантировать, что класс может использоваться только по назначению, поточно-ориентированно, но его также можно отменить до такой степени, что он становится неприятным и его трудно расширять.,Это хорошо до некоторой степени, но ... в любом случае, вернемся к вопросу.

Теперь я думаю о том, как включить в него пользовательский код, чтобы сделать его полностью свободным.У меня есть определенный способ запуска шоу, но это, конечно, не единственный способ, и каждый способ сделать это имеет свои возможности и ограничения, которые могут или не могут хорошо работать с конкретным рабочим процессом.

Поэтому вместо того, чтобы пытаться придумать все самостоятельно, что может захотеть сделать пользователь, нужно сказать: «Извините, вы не можете этого сделать», очень много, я думаю, что было бы лучшедать им полный некоторый язык программирования и дать им повеселиться с ним.Я мог бы также дать им набор копируемого исходного кода, который делает некоторые полезные вещи, и «мастера кода», которому можно доверять, чтобы создать что-то, что по крайней мере компилируется, но мое видение заключается в том, чтобы каждый знающий пользователь мог создать свойсобственные инструменты, чтобы приложение работало так, как они хотят:

  • Предустановленная сцена на каждой кнопке, взаимоисключающая с временным кроссфейдом
  • Предустановленная сцена на каждом фейдере в качестве мастеров смешиваемых сцен
  • Нет предустановленных сцен, но каждый элемент управления имеет свой собственный эффект для воспроизведения вживую в любой комбинации
  • Настраиваемая автоматизация, простая или сложная по желанию
  • И т. Д.
  • Смеси всего вышеперечисленного

В предустановленных сценах могут использоваться встроенные функции без пользовательского программирования, но остальное - такой пустой холст, что я не могу обойти его.


В версии, которая у меня сейчас есть, есть интерпретатор байт-кода, который запускает пользовательский набор инструкций, аналогично тому, что я понимаю для x86, разработанного для ханаd-оптимизированная сборка, мотивированная некоторыми другими новичками-ориентированными языками, которые показались мне сборкой с пользовательской интерпретацией.Но поскольку для моего изобретения (разумеется) не существует существующего набора инструментов, мне пришлось написать свой собственный, что оказалось довольно сложной 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] (настраиваемое пользователем количество юниверсов, статическое число каналов, чтение / запись)
    • 1066 * Etc. *

Итак ... кроме очевидной проблемы безопасности при произвольном выполнении произвольного кода (не запускайте его как root), в какое минное поле я попадаю? Какой хороший способ достичь моих целей?

До сих пор моя среда разработки была C++ и Qt на Lubuntu (x64), но я также хочу, чтобы эта следующая версия также работала на Raspbian (armhf). (Raspberry Pi)

1 Ответ

1 голос
/ 14 апреля 2019

Расплывчато и очень широко, но все же позвольте мне попытаться ответить.Исходя из ваших требований, связанных с производительностью и поддержкой цепочки инструментов или библиотеки, вы можете взглянуть на библиотеку PyQt (привязки Python для Qt).Использование pyqt может оказаться полезным, поскольку у вас есть все тонкие элементы управления для передаваемых объектов (Python делает забавным манипулировать / преобразовывать / модифицировать объекты в желаемые выходные объекты), и у вас все еще есть производительность из-за Qt & C ++ под капотом.PyQt имеет активное сообщество и стремится помочь в любых проблемах / ошибках.

...