Embedded C++
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.
Objetivo
[editar | editar código-fonte]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
econst_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.
Ver também
[editar | editar código-fonte]- ↑ 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]- P.J. Plauger (1997). «Embedded C++: An Overview» (em inglês). pp. Embedded.com. Consultado em 23 de dezembro de 2007. Arquivado do original em 13 de outubro de 2008
Ligações externas
[editar | editar código-fonte]- «Sítio oficial do Embedded C++» (em inglês)