Я был очарован компонентным программированием (будь то COM, другая система или просто использование парадигмы на простом C ++). Это требует некоторого привыкания, если вы обычно привыкли к «традиционной» модели ООП, но это определенно стоит того. Это сделало мой код более понятным и легким в расширении.
В проекте, над которым я сейчас работаю, используется парадигма, но не задана система. Однако мне бы очень хотелось найти какую-то систему, которую я мог бы использовать со следующими требованиями. Переход с того, что у меня сейчас есть, на новую систему занял бы немного времени, но я бы сэкономил это время позже.
Требования:
- Кроссплатформенный
- Быстро
- Хорошо работает с C ++
- Поддерживает межпроцессное распределение
Позвольте мне уточнить эти требования:
Cross-Platform
В принципе, он мне нужен для работы на Windows и Mac. Linux был бы хорош, но это ни в коем случае не важно. Кроме того, он действительно должен соответствовать другим требованиям для всех платформ. Есть COM для Mac, который был бы идеальным, но он не поддерживает требование 4. Кроме того, он должен поддерживать как GCC, так и MSVC.
Fast
Именно здесь CORBA, к сожалению, проигрывает, хотя и выполняет три других требования. Вызовы внутрипроцессных методов должны быть максимально быстрыми (в идеале, например, COM), поскольку некоторые из подпрограмм могут также вызываться из звукового прерывания.
Хорошо работает с C ++
... Я думаю, это в основном очевидно. Я не возражаю против того, чтобы не использовать классы C ++ для реализации компонентов, хотя это определенно было бы полезно, и альтернатива все еще должна быть простой в использовании, тем более что в конечном итоге я собираюсь выпустить API для сторонних расширений.
Поддерживает межпроцессное распределение
Под этим я подразумеваю, по крайней мере, возможность сериализации вызовов. Если это делается с помощью кода, сгенерированного из IDL, это прекрасно для меня, и я также не против реализовать сам процесс межпроцессного взаимодействия.
COM был бы хорош, но он не полностью соответствует требованию 1. CORBA тоже была бы великолепна, но она не отвечает требованию 2 (даже с самым быстрым ORB). XPCOM может не соответствовать требованию 2 и не работает с MSVC, поэтому не соответствует требованию 1.
Есть идеи, что еще там? Следующим моим шагом будет накатить свой собственный, используя protobufs или что-то подобное, но, конечно, я бы хотел этого избежать.
Обновление
Для уточнения - звуковое прерывание в этом контексте может быть всего 2-3 мс. Это время даже не доступно для меня полностью, так как другие компоненты должны обрабатываться в это время, и мое программное обеспечение само по себе оборачивает другую часть программного обеспечения, которая должна обрабатываться в это время. Вот почему как внутрипроцессное, так и межпроцессное сортирование должно быть чрезвычайно быстрым.