Я уже некоторое время работаю над приложением освещения 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)