Распределенные приложения Ada / C / ++ - PullRequest
6 голосов
/ 20 октября 2011

Я пытаюсь оценить некоторые технологии для реализации процесса связи между некоторыми модулями Ada с некоторыми модулями C ++ / OpenGL.Существует (Windows XP) приложение Ada, которое взаимодействует с приложением C ++ с помощью COM, но я намерен переключить COM на новую технологию.Появились некоторые предложения, такие как прямые сокеты, DSA, Polyorb, Corba и DSS / Opensplice.

  • DSA, похоже, просто реализован на Ada (не уверен)
  • У Polyorb есть своипоследняя реализация в 2006 году, в соответствии с http://polyorb.ow2.org/
  • Корба, кто-то утверждал, что это может быть недостаточно просто, чтобы оправдать его сложность для реализации простых приложений
  • DSS / Opensplice выглядит просто как C / C ++реализован, поэтому следует сделать привязку Ada.Это также выглядит не очень простым для реализации.

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

Итак, что вы думаете?Не могли бы вы прокомментировать эти технологии или даже предложить другие?

Большое спасибо.

Ответы [ 5 ]

4 голосов
/ 20 октября 2011

Важным фактором при выборе является размер и сложность системы, которую вы реинжинирируете.Это широко распространенная система с множеством сложных сообщений?Это относительно небольшая система с небольшим количеством обыденных обменов сообщениями?

Для небольших систем я использовал только прокрутку собственных модулей связи на основе сокетов.Однако теперь я больше склоняюсь к ZeroMQ (без брокера) или STOMP (на основе текста).И есть некоторая поддержка Ada для них, zeromq-Ada и TOMI_4_Ada (поддерживает оба).

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

Решения CORBA / PolyORB и DDS довольно тяжелые, но являются законченными решениями.Если вы не боитесь IDL и управляющих брокеров, они могут преуспеть в крупных распределенных системах.Да, может потребоваться, чтобы были созданы некоторые привязки Ada, но если вы можете получить заголовки C или API C для привязки, это, как правило, не так уж и плохо, если вы сосредоточитесь только на привязке необходимых функций и структур данных.Вместо создания всеобъемлющей привязки, свободно используйте непрозрачные и пустые указатели ( void_ptr , opaque_structure_def_ptr ) для структур и параметров, внутреннее содержимое которых вас не волнует.

3 голосов
/ 21 октября 2011

мы намереваемся переключить COM на новую (поддерживаемую) технологию, поскольку Microsoft больше не поддерживает COM

Кто бы ни сказал, что COM больше не поддерживается, он абсолютно не имеет смысла.

Несмотря на то, что в течение последних десятилетий COM претерпел множество изменений имен (OLE, COM, OLE Automation, DCOM, COM +, ActiveX, WinRT) и расширений, это единственная наиболее важная технология для платформ MS: прошлое, настоящее ибудущее. .NET среда выполнения широко использует COM .Большая часть Win32 API написана на COM, а части, которых не было, будут на Win8, поскольку Компоненты WinRT являются COM-объектами .

2 голосов
/ 21 октября 2011

Также взгляните на AMQP ( RabbitMQ для сервера), похоже, для него доступна библиотека Ada http://www.gti -ia.upv.es / sma / tools / AdaBinding / index .php .

Если вы можете найти привязку для Ada, Apache thrift также может быть облегченным вариантом. Может быть, вы могли бы даже написать свою собственную привязку, это не должно быть более сложным, чем свернуть что-то свое по сокетам.

Если вы пойдете по маршруту с сокетами, я бы предложил ZeroMQ как "суперсокеты".

1 голос
/ 20 октября 2011

Еще один вариант для вашего списка должен состоять в том, чтобы использовать поддержку распределенного программирования Ada и писать оболочки C / C ++ для интерфейса вашей программы на C ++.

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

0 голосов
/ 27 сентября 2018

С этого поста AdaCore опубликовал PolyORB на GitHub с регулярными обновлениями:)

...