Misra C++:2023
MISRA C++:2023, uma diretriz paga para usar C++17 em sistemas embarcados críticos para a segurança (especialmente automotivos), provoca debate sobre seu valor, escopo e impacto prático. Comentadores a descrevem como um subconjunto mais estrito e seguro de C++, que melhora a versão de 2008 e se alinha com AUTOSAR C++14, mas críticos argumentam que algumas regras são contraproducentes, ficam atrás do padrão ISO e beneficiam בעיקרamente fornecedores de ferramentas de conformidade. Grande parte da discussão se concentra no tratamento de exceções, memória dinâmica, qualificação de ferramentas para padrões como ISO 26262 e na disponibilidade limitada de analisadores estáticos de código aberto que deem suporte completo às novas regras.
Visão geral do MISRA C++:2023
- Diretrizes para usar C++17 em sistemas críticos/relevantes para a segurança (especialmente automotivos/embarcados).
- Define quais recursos e práticas da linguagem são permitidos, restritos ou proibidos para melhorar a previsibilidade, a segurança e a confiabilidade.
- Visto como uma grande melhoria em relação ao MISRA C++:2008 e fortemente influenciado por AUTOSAR C++14.
Relação com os padrões C++ e outras diretrizes
- Mira C++17, embora padrões C++ mais novos já existam; comentaristas observam que muitas toolchains ainda estão acompanhando, então isso é aceitável em contextos críticos de segurança.
- Em comparação com outros padrões de codificação: o SEI CERT C é descrito como “como usar X com segurança”, enquanto o MISRA tende a proibir ou restringir fortemente APIs perigosas.
- Alguns apontam alternativas sem royalties (por exemplo, um guia japonês de codificação embarcada), mas essas são em sua maioria voltadas para C e menos úteis para C++.
- Uma visão: cada uma dessas diretrizes define efetivamente um “subconjunto da linguagem”, contribuindo para a fragmentação de C/C++.
Ferramentas, licenciamento e código aberto
- O padrão custa dinheiro e não é um padrão aberto; alguns sugerem que isso desestimula ferramentas FOSS.
- Os ecossistemas de análise estática são dominados por ferramentas proprietárias; poucas ferramentas abertas dão bom suporte ao MISRA.
- Menção a analisadores de código aberto (por exemplo, NaiveSystems Analyze, Cppcheck, regras baseadas em CodeQL), mas a cobertura e o suporte a versões podem ficar atrasados ou ser divididos entre edições comunitárias e pagas.
Exceções, memória dinâmica e tratamento de erros
- Memória dinâmica é proibida no MISRA C++:2023; exceções são surpreendentemente permitidas e até recomendadas para conformidade com as regras.
- O debate é intenso:
- A favor de exceções: essenciais para propagação de erros de forma sensata em sistemas grandes ou multithread; ajudam com RAII e invariantes.
- Contra exceções: problemáticas para embarcados devido a tamanho de código, desempenho, determinismo e restrições de toolchain; muitos grandes projetos C++ e sistemas embarcados as desabilitam.
- Desligar exceções (
-fno-exceptions) pode reduzir o tamanho do binário, mas interage mal com a biblioteca padrão, levando a possível UB ou dependência do comportamento não especificado destd::terminate.
Contexto automotivo e crítico de segurança
- O MISRA é tipicamente aplicado a ECUs críticas para a segurança (motor, freios, airbags etc.), não a infotainment.
- Alguns criticam a qualidade do software automotivo, mas a maioria concorda que o MISRA não é o principal problema; processo, gestão, terceirização, AUTOSAR e complexidade são questões maiores.
- Qualificação de ferramentas e conformidade com ISO 26262 são grandes restrições; usar compiladores mainstream em código crítico para a segurança exige documentação e testes pesados.
C++ vs. “linguagens seguras”
- Alguns argumentam que a complexidade do C++ e o comportamento indefinido o tornam fundamentalmente inadequado para segurança, sugerindo Rust como um “C++ seguro”.
- Outros propõem ideias de “MISRA para Rust” e observam que, mesmo em linguagens mais seguras, diretrizes de estilo e subconjuntos ainda seriam valiosos.