Посмотрел слайды презентации Reactive Stream Processing Rx4DDS с конференции CppCon 2015. Любопытно.
Тема DDS (т.е. Data Distribution Service for Real-Time Systems) меня давно интересует (материалы на эту тему в блоге можно найти по тегам DDS, Internet-Of-Things и Machine-2-Machine). Интересует отчасти потому, что сам когда-то начинал профессиональную деятельность в лаборатории АСУТП и ИИС. Отчасти потому, что заниматься нонешним мейнстримом в программизме, как то Web и мобильные приложения, очень не хочется по тем или иным причинам.
А вот в направление DDS мог бы вложиться всерьез. Только пока непонятно как.
Можно было бы, конечно, взять парочку OMG-шных стандартов, касающихся DDS, и создать еще одну их имплементацию. Но тут работы вагон и маленькая тележка. Полезный же выхлоп не понятен, т.к. уже есть как платные, так и бесплатные реализации DDS для C++. Немного, но есть. Нужна ли кому-то еще одна? И настолько ли нужна, чтобы отбить вложения? Не понятно совершенно.
Возможно, дело было бы проще, если бы были завязки на конторы, которые производят железо или программно-аппаратные комплексы, в которых DDS (или какой-то из других IIoT-шных стандартов) использовался бы для взаимодействия с внешним миром. Можно было бы попробовать взяться за какие-то связанные с этим задачи. Но таких завязок, к сожалению, нет.
Посему пока плотно DDS не занимаюсь, хотя если что-то по этой теме попадается на глаза, просматриваю с любопытством. Кто знает, вдруг что-то и натолкнет на мысль о том, как подружить SObjectizer с DDS-ом (или чем-то другим из области IIoT). Имхо, для тамошней специфики агенты подходят гораздо больше, чем для решения задач поддержки 10K клиентов на http-сервере.
Вот и вышеозначенная презентация любопытна как раз с этой точки зрения. Подружить DDS-овские потоки данных с идеей реактивных потоков -- это интересно. А вот нужно ли... Далеко не факт, судя по слайдам :) Хотя если поискать примеры обработки данных из DDS-ных data_reader-ов, то можно найти еще более страшные примеры кода :)
А вообще интересно наблюдать за тем, куда катится современное программирование на C++. Пока вот такие примеры кода еще редкость, но не исключено, что подобный декларативный код станет нормой лет через 10-15:
grouped_stream .map([](GroupedShapeObservable go) { return go >> rx4dds::to_unkeyed() >> rx4dds::complete_on_dispose() >> rx4dds::error_on_no_alive_writers() >> rx4dds::skip_invalid_samples() >> rx4dds::map_samples_to_data(); }) >> rx4dds::coalesce_alive() >> map([](const vector<rxcpp::observable<ShapeType>> & srcs) { return rx4dds::combine_latest(srcs); }) >> rxcpp::switch_on_next() >> rxcpp::map([](const std::vector<ShapeType> & shapes) { return calculate_average(shapes); }) >> rx4dds::publish_over_dds(triangle_writer, ShapeType("ORANGE")); |
Комментариев нет:
Отправить комментарий