[go: up one dir, main page]

Saltar para o conteúdo

Embedded C++

Origem: Wikipédia, a enciclopédia livre.

Embedded C++ (EC++) é um dialeto da linguagem de programação C++ para sistemas embarcados. Ela foi definida por um grupo industrial liderado por grandes fabricantes japonesas de CPU, incluindo NEC (Hiroshi Monden, líder do comitê), Hitachi, Fujitsu e Toshiba (Kiichiro Tamaru, vice secretário), a fim de melhorar o suporte do C++ em aplicações embarcadas. Em setembro de 1996, havia sido produzido um esboço da especificação do Embedded C++ pelo comitê de padronização. Ele não teve boa recepção entre os especialistas da linguagem C++, em particular Bjarne Stroustrup,[1] que, de forma geral, é contra dialetos de linguagens.

O objetivo do esforço é preservar as funcionalidades mais úteis de orientação a objeto na linguagem e minimizar o tamanho do código enquanto maximizando a eficiência na execução, também tornando mais simples a construção de compiladores para o dialeto. Um dos argumentos utilizados para sua criação é de, acostumados com o C, os desenvolvedores de sistemas embarcados não estavam satisfeitos com a complexidade e o overhead proporcionado pelo C++ nesse campo de desenvolvimento. O desenvolvimento de sistemas embarcados é conhecido pelo desafio constante em extrair máxima eficiência em tempo (processamento, o período de execução) e espaço (memória, o tamanho do código) do equipamento disponível.

Funcionalidades

[editar | editar código-fonte]

Diferente da relação C e C++, o Embedded C++ é um sub-conjunto do C++, isto é, ele não possui adições ao padrão. As seguintes funcionalidades foram removidas da linguagem:

  • Herança múltipla
  • Classes virtuais. A remoção diz respeito ao overhead proporcionado pela chamada de métodos virtuais, ainda que a funcionalidade de métodos virtuais propriamente dita esteja presente no dialeto.
  • RTTI (e a palavra reservada typeid)
  • Os novos operadores de conversão de tipo (static_cast, dynamic_cast, reinterpret_cast e const_cast)
  • A palavra reservada mutable
  • Espaço de nomes
  • Tratamento de exceções
  • Templates. Apesar de ser uma ferramenta poderosa do C++, na época da padronização do dialeto esta funcionalidade ainda não estava completa, e poucos compiladores já haviam completamente implementado o suporte à funcionalidade. Outra razão é que o seu uso pode implicar em overhead no tamanho do código. Já que diferentes códigos são instanciados para diferentes tipos de dados utilizados.

A remoção de funcionalidades também é usada como argumento deste padrão, de forma que, sendo mais enxuto que todo o padrão C++, é mais simples para desenvolvedores de compiladores desenvolverem ferramentas para o dialeto.

Da mesma forma, a biblioteca padrão do Embedded C++ sofreu alterações em relação à biblioteca padrão do C++. Parte das remoções de funcionalidade da biblioteca dizem respeito às remoções na linguagem, com a retirada de cabeçalhos que implementam ou auxiliam o RTTI e o tratamento de exceções. Como a linguagem não suporta templates, toda a biblioteca padrão teve que ser adaptada nesse sentido. Para isso, contou com a remoção da Standard Template Library como se conhece no C++, transformando funções e classes genéricas em ordinárias ou até mesmo removendo funções e classes do padrão. Um exemplo de adaptação é a classe string (que diz respeito à cadeias de caracteres), que ainda significa uma cadeia de caracteres do tipo char, mas sendo implementada sem o uso genérico da classe basic_string como em C++. Esta mesma lógica se aplica às classes de fluxo de dados istream e ostream, que também assumem char mas também não estão fundamentadas no uso genérico de basic_istream e basic_ostream. Operações com arquivos de computador foram abolidas do Embedded C++, assim como o recurso de internacionalização de software, sendo presentes em C++ através das classes do cabeçalho fstream e locale, respectivamente.

Referências
  1. Bjarne Stroustrup. «FAQ: What do you think of EC++?» (em inglês). FAQ no sítio pessoal do autor. Consultado em 23 de dezembro de 2007 

Leitura adicional

[editar | editar código-fonte]

Ligações externas

[editar | editar código-fonte]