2010-06-18 14 views
8

Uso principalmente C++ per fare calcoli scientifici e ultimamente mi sono limitato a un sottogruppo di caratteristiche C++ molto simile a C; vale a dire, nessuna classe/eredità eccetto il complesso e STL, i modelli usati solo per trovare/sostituire i tipi di sostituzioni e alcune altre cose che non riesco a mettere in parole in cima alla mia testa. Mi chiedo se ci siano sottoinsiemi ufficiali o ben documentati del linguaggio C++ che potrei considerare come riferimento (oltre che come logica) quando seleziono e scelgo quali funzioni utilizzare.Sottosistemi di linguaggio C++ ufficiale

+7

Qual è la tua motivazione per definire un sottoinsieme del C++? Perché non usare solo le funzionalità che ti aiutano e lascia da solo le funzionalità che non lo fanno.È potenzialmente molto lavoro definire un sottoinsieme coerente di funzionalità; qual è il guadagno? –

+1

Non molto, ero solo curioso di sapere se questo genere di cose sia mai stato ben definito. Mi piace mantenere le cose facilmente interfacciabili con C e Fortran, e volevo le opinioni di altre persone su alcune delle funzionalità linguistiche. –

risposta

3

C'è Embedded C++. Sembra per lo più simile a quello che stai cercando.

+3

C++ incorporato mai rilevato; una volta che hai massacrato così tanto la lingua, non ha alcun vantaggio rispetto a C. –

+2

@Mike, alcuni sostengono che non sia mai esistito. –

0

Bene, gli ultimi sviluppi (TR1, C++ 0x) in C++ lo hanno reso molto generico, consentendo di eseguire una programmazione funzionale imperativa, OOP o anche (limitata) in C++. Le librerie come Boost ti permettono anche di fare una meta-programmazione basata su template dichiarativa molto potente.

Penso che Boost sia la prima cosa da provare in C++. È una libreria completa, che include anche diversi moduli che consentono di programmare in stile funzionale (Boost.Functional) o di effettuare una meta-programmazione dichiarativa in fase di compilazione (Boost MPL).

+3

Sottoreti, non superset. –

+0

Beh, dipende da ciò che chiamate un set - se solo STL, quindi Boost è davvero un superset. Ma il mio punto era che Boost.Functional e Boost.MPL sono sottoinsiemi di C++ come linguaggio. –

+0

Originariamente intendevo sottoinsieme come in un sottoinsieme delle caratteristiche del linguaggio stesso. Boost sembra richiedere un set completo di funzionalità C++. –

2

Gli sviluppatori GCC stanno per consentire alcune funzionalità C++. Non sono a conoscenza di alcuna linea guida ufficiale, tuttavia, ma sono abbastanza sicuro che ne definiranno alcuni. Dai un'occhiata allo initial report sulla mailing list.

3

Non molto tempo fa ho ascoltato questo podcast SE-Radio - Episode 152: MISRA with Johan Bezem, che introduce MISRA, linee guida standard per C e C++ per garantire una migliore qualità, provare a guardarlo.

3

Google pubblica la sua guida di stile C++ interna, che viene spesso definita come un sottoinsieme: http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml. Ben Maurer, la cui azienda reCAPTCHA è stata acquisita da Google, lo descrive come segue in this post on Quora:

Che, fondamentalmente, può pensare di sottoinsieme C++ di Google come C, più un po 'di zucchero:

La possibilità di aggiungere metodi per strutturare

ereditarietà di base.

di incasso e di stringa classi

ambito di gestione delle risorse basato.

Pubblicano anche uno strumento di niente, cpplint.py.

-1

OpenCL ha utilizzato C per la scrittura di kernel, ma hanno aggiunto di recente (o sarà presto aggiungere) binding C++ e Java, forse. OpenCL lascia fuori un certo numero di feature di robbing delle prestazioni di C. Excluded sono cose come i puntatori di funzione e la ricorsione. Puntatori intelligenti e polimorfismo creano anche un sovraccarico.

Restrizioni C: SIMD programming languages

Leggermente fuori tema: Ecco una buona discussione il confronto OpenCL con CUDA usando C. OpenCL or CUDA Which way to go?

+0

Il mio punto è che OpenCL limita ciò che è permesso usare in C e C++. Molte funzionalità sono rimosse o non supportate o offrono supporto limitato. Tuttavia, questi sottoinsiemi di quei linguaggi sono ancora abbastanza utili e consentono di scrivere tutti i tipi di simulazioni e software da utilizzare su GPGPU, DSP, FPGA e CPU multicore. – Max