Vantaggi del porting della libreria C in C ++ [chiuso]

-2

Diciamo che prendiamo qualsiasi libreria C come libpng o libvorbis e la convertiamo in modo che compili come C ++ (solo le modifiche minime per farlo compilare come codice C ++).

Il compilatore può fare ulteriori ottimizzazioni con il suo codice C ++? C'è un qualsiasi tipo di vantaggio da ottenere porting il codice in C ++? Quali sono i lati negativi che potrebbero annullare questi vantaggi?

    
posta links77 30.05.2014 - 16:38
fonte

4 risposte

5

Non proprio. Non è utile passare a C ++ se non si fa uso del linguaggio C ++ e delle funzionalità di libreria . Sarebbe uno sforzo per niente, e ci sono alcuni costi, come l'ABI.

OTOH, se usi le funzionalità del linguaggio (in particolare RAII, EH e modelli), otterrai un programma di gran lunga superiore. Molti problemi possono essere molto più semplici espressi in C ++ rispetto a C, e molti di loro in modo più efficiente.

In definitiva, passare da C a C ++ è un investimento. Paghi in tempo di sviluppo, probabilmente un bel po 'perché non sono neanche lontanamente così simili come sembrano in superficie. Esci dal programma notevolmente migliorato. Ma devi pagare tutto l'investimento o non paga. Sarebbe come voler costruire una fabbrica ma chiedere un ritorno dopo aver finito solo due muri. Devi costruire tutti i muri, costruire un tetto, acquistare i macchinari, assumere persone per gestire la fabbrica, trovare un progetto da fabbricare ... quindi puoi iniziare a realizzare un profitto.

    
risposta data 30.05.2014 - 21:30
fonte
3

No , e supponendo che il codice verrà compilato (dovrai apportare modifiche, C ++ non è completamente compatibile con C, ad esempio void * non può essere assegnato ad altri tipi di puntatore e ci sono nuove parole chiave). Nel migliore dei casi, non ci sarà assolutamente alcuna differenza. C ++ non aggiunge nuovi comportamenti non definiti dai quali i compilatori possono fare affidamento. Non penso che li rimuova, ma potrei sbagliarmi qui.

Nel peggiore dei casi, perderai la performance. Il codice che dipende dalla % di parole chiave restrict di C99 non può più dipendere da esso, poiché C ++ non ha restrict parola chiave .

Inoltre, il compilatore deve abilitare il supporto delle eccezioni, anche se non è utilizzato. Anche se non penso sia necessario per il codice (non usa i tipi C ++ o le funzioni C ++), alcuni compilatori compilano ancora il codice per gestire lo srotolamento dello stack, il che potrebbe ridurre le prestazioni.

Molti compilatori implementano sia C che C ++ (e probabilmente anche altre lingue). I costrutti C sono compilati in modo identico ai costrutti C ++, in quanto non c'è alcun motivo per comportarsi in modo diverso.

    
risposta data 30.05.2014 - 17:57
fonte
3

Is there any sort of benefit to be gained by porting the code to C++?

Penso che la frase chiave qui sia "porting". Che cosa vuoi dire con questo? Se veramente port il codice in C ++, fai uso delle caratteristiche del C ++ come i template ecc., C'è la possibilità che questo acceleri il codice. (Ad esempio, C ++ ' std::sort() è noto per essere più veloce di C qsort() perché un compilatore C ++ può incorporare le chiamate alla funzione di confronto.) OTOH, gli algoritmi utilizzati sono probabilmente adattati alla programmazione in stile C, quindi potrebbe essere che l'unico modo per ottenere un guadagno di velocità misurabile sarebbe iniziare da zero e implementare e lucidare per anni per far brillare la libreria in C ++. Tuttavia, un compilatore C ++ può eseguire più verifiche in fase di compilazione per il codice scritto in stile C ++, in modo da ottenerlo.

Ma se si fa compilare il codice C solo con un compilatore C ++, l'attività è discutibile. Dato il codice C, un compilatore C ++ non può rendere (m) alcuna ipotesi su cui un compilatore C non può fare basare le sue ottimizzazioni. E il codice in stile C è incline a chiudere il compilatore (cast rigido, nessun modello, ecc.), Quindi è improbabile che tu possa ottenere una sicurezza di tipo migliorata in fase di compilazione.

What are the downsides that might cancel out these benefits?

In entrambi i casi, è necessario modificare il codice. Ciò introdurrà bug e incompatibilità. Solo questo è un grosso svantaggio che non sarà mai superato dalle magre possibilità di miglioramenti sopra elencati.

    
risposta data 30.05.2014 - 23:58
fonte
1

No, e c'è uno svantaggio da considerare: manomissione dei nomi . C ha semantica di collegamento molto ben definita. Il C ++ è specifico per il compilatore di progetto: questo significa che la conversione in C ++ potrebbe effettivamente farti male:

  • Puoi collegarti con un solo compilatore / linker.
  • Il codice non sfrutterà le funzionalità di C ++ dati i vincoli della tua domanda.
  • Introdotto il rischio di nuovi bug perché stai modificando il compilatore e la lingua.
  • C ++ è comunque compatibile con linker con C nella maggior parte dei casi, quindi un programma C ++ può molto probabilmente collegarsi a una libreria C senza ricompilare la libreria.
risposta data 30.05.2014 - 18:19
fonte

Leggi altre domande sui tag