Principais Aprimoramentos na API Modern C++ DDS do RTI Connext
Desde que introduzimos a API modern C++ para DDS, vimos interesse significativo de nossos clientes. Muitos começaram a construir novos sistemas usando C++11, e continuamos refinando a API com diversos aprimoramentos impactantes.
Mapeamento IDL Aprimorado para Modern C++
Code Generator da RTI agora oferece nova opção -stl, usada em conjunto com -language C++03 ou -language C++11. Esta opção atualiza mapeamento de vários tipos IDL:
- Sequências unbounded →
std::vector(requer -unboundedSupport) - Sequências bounded →
rti::core::bounded_sequence<T, Bound>. Este tipo comporta comostd::vectormas é otimizado para deserialização. Para cenários lower-latency você pode preferirstd::vectorusando anotação@use_vector. - Tipos string e wide string →
std::stringestd::wstring - Membros anotados com
@external(notação ponteiro "*") tornam-sedds::core::external<T>, wrapper mais seguro similar ashared_ptr. Protege membros external de serem sobrescritos quando middleware empresta memória (ex: lendo de containerLoanedSamples).
Por exemplo, dado o seguinte tipo IDL:
struct MyType { sequence<long> my_unbounded_seq; sequence<long, 10> my_bounded_seq; @use_vector sequence<long, 10> my_other_bounded_seq string my_str; @external long my_external; }; Usando comando rtiddsgen -language C++11 -stl -unboundedSupport MyType.idl, a classe C++11 gerada parece assim:
class MyType { public: MyType(); ... MyType (MyType&&) = default; MyType& operator=(MyType&&) = default; MyType& operator=(const MyType&) = default; MyType(const MyType&) = default; std::vector<int32_t>& my_unbounded_seq() noexcept; const std::vector<int32_t>& my_unbounded_seq() const noexcept; void my_unbounded_seq(const std::vector<int32_t>& value); rti::core::bounded_sequence<int32_t, 10>& my_bounded_seq() noexcept; const rti::core::bounded_sequence<int32_t, 10>& my_bounded_seq() const noexcept; void my_bounded_seq(const rti::core::bounded_sequence<int32_t, 10>& value); std::vector<int32_t>& my_other_bounded_seq() noexcept; const std::vector<int32_t>& my_other_bounded_seq() const noexcept; void my_other_bounded_seq(const std::vector<int32_t>& value); std::string& my_str() noexcept; const std::string& my_str() const noexcept; void my_str(const std::string& value); dds::core::external<int32_t>& my_external() noexcept; const dds::core::external<int32_t>& my_external() const noexcept; void my_external(dds::core::external<int32_t> value); ... }; API Request-Reply para Modern C++
A API agora inclui duas novas entidades: rti::request::Requester e rti::request::Replier. Estas fornecem padrão nativo request-reply, já disponível em outras linguagens e introduzido em protótipo na versão 5.3 e production-ready em 5.3.0.7.
Exemplo de código conciso disponível aqui.
Pequenos Aprimoramentos da API
Simplificamos várias tarefas comuns:
- Condition handlers em
WaitSetagora aceitam condition como argumento, eliminando necessidade de functors no-argument:
condition.handler([]() { // do something }); // or, with the new signature condition.handler([](dds::core::cond::Condition c) { // do something (condition == c) }); TopicQuery para Dados Históricos On-Demand
TopicQuery, introduzido na 5.3, permite aplicações recuperarem dados históricos on-demand. Na API modern C++ você pode criar TopicQuery de um DataReader assim:
rti::sub::TopicQuery my_topic_query( my_reader, rti::sub::TopicQuerySelection(dds::topic::Filter("x < 10")) ); Você pode então take historical samples que match o filter enquanto ainda recebe dados live normalmente.
Olhando Adiante
Com C++17 agora aprovado e C++20 no horizonte, RTI Connext continuará evoluindo API C++ com features de linguagem moderna e melhorias de performance. Fique ligado ou assine RTI Blog para últimas atualizações.
Tecnologia da Internet das Coisas
- IoT: Impulsionando o Renascimento Digital do Varejo Físico
- Processamento de Stream de Terceira Geração: Transformando Dados IoT em Ação em Tempo Real
- Por que o Lançamento do 5G Está Lento: Custos, Espectro e Desafios de Cobertura
- Edge Computing: Desbloqueando Dados em Tempo Real, Aumentando Eficiência e Impulsionando Nova Receita
- G.hn: Impulsionando a Revolução IIoT Industrial para Conectividade Custo-Efetiva e Fiável
- Repensando Manufatura Inteligente para o Novo Normal: Estratégias Data-Driven para Resiliência
- Dados: O Novo Petróleo — Como Refinarias Transformam Informação Bruta em Valor de Negócio
- Conheça o Profissional Híbrido TI/OT: Unindo Data Centers e Automação Industrial
- Microsoft Revela Incubadora de Pesquisa em IA Focada em Inteligência de Propósito Geral
- Dominando std::list em C++: Sintaxe, Funções e Exemplos Práticos