Perché il C ++ è noto come "ottimizzazione prematura"? [chiuso]

3

"La programmazione in C ++ è l'ottimizzazione prematura"

Perché fa tutti qualcuno dice questo?

    
posta Chuck Testa 21.12.2011 - 23:34
fonte

4 risposte

37

Spesso le persone lo dicono (un po 'ironico, secondo la mia esperienza) come uno scavo contro il C ++ come scelta del linguaggio. Le persone in genere scelgono il C ++ perché, nella maggior parte dei casi, è più veloce di un'alternativa come Python o Java. Tuttavia, la maggior parte delle volte, la velocità aggiuntiva acquisita non è realmente necessaria. Quando una persona dice "Programmare in C ++ è un'ottimizzazione prematura", sta dicendo che avresti potuto programmare la tua applicazione in qualche altra lingua, è stata fatta molto più velocemente, quindi se avevi bisogno di fare una parte del tuo codice molto velocemente, potresti semplicemente programmare quella parte in C ++ e chiama quella routine dall'altra lingua.

    
risposta data 21.12.2011 - 23:41
fonte
22

Perché non sanno come programmare in C ++.

In generale, queste persone semplicemente non capiscono come programmare in modo sicuro (e veloce) in C ++ e suggeriscono che fare ciò richiede una quantità eccessiva di tempo o di spazzatura. Se fosse davvero molto più lento, le persone lo farebbero solo per far funzionare i loro programmi più velocemente, dato che il C ++ è facilmente il linguaggio mainstream più veloce. Ciò renderebbe un ottimizzazione - "Preferirei programmare in C #, ma devo usare C ++ perché è più veloce.", E di solito prematuro perché la maggior parte delle ottimizzazioni sono.

Tuttavia, questo di solito è ignorante. C ++ non è stato un problema da programmare in quanto shared_ptr e std::vector sono stati inventati.

Modifica: Scusa, non ero sufficientemente chiaro. Ho dimenticato quando si parla di non-C ++ 'quanto poco sanno in generale del linguaggio, dato che di solito mi limito ad entrare nel canale C ++ su SO. Innanzitutto, shared_ptr non è l'unico puntatore intelligente, io uso unique_ptr molto più spesso e Boost ne ha di più. In secondo luogo, la garbage collection è nothing come shared_ptr . Prova a raccogliere la memoria della GPU, o un handle di file, una connessione al database o un HWND. In bocca al lupo. In terzo luogo, la personalizzabilità di shared_ptr è di gran lunga superiore a quella che si può ottenere da un sistema garbage collection. Recentemente, ho sostituito le allocazioni di memoria con un allocatore di arena della memoria che ho scritto io stesso. Era come un centinaio di righe di codice e un'ora di test. Ma non ho dovuto riscrivere una singola riga del mio codice shared_ptr, perché ho appena inserito un deleter personalizzato e ha funzionato. Prova a sostituire il tuo allocatore o a inventare un nuovo puntatore intelligente in C # o Java e dimmi quanto tempo ci vuole. Oh aspetta, se guardi using , allora anche il potere della lingua speciale non può far funzionare un altro tipo di gestione delle risorse in C #. Se la raccolta dei rifiuti non soddisfa i tuoi bisogni, allora sei fregato. Questa non è la mia definizione di un linguaggio di livello superiore.

Ora, sarò il primo ad ammettere di non essere al avanguardia di linguaggi come Python, Java o C #. Ma per quanto ne so, Java e C # non hanno nulla di così strong come i modelli. I generici di Java non sono buoni per qualsiasi cosa , e quelli di C # non sono molto meglio. Ad esempio, utilizzo un modello di espressione per generare automaticamente una macchina a stati finiti. Non ho mai visto niente del genere. Se stavo codificando in Java, dovrei codificarlo manualmente.

    
risposta data 21.12.2011 - 23:45
fonte
9

Beh, questo è dovuto al fatto che la programmazione in C ++ non non offre magicamente alcun miglioramento delle prestazioni rispetto, ad esempio, a Java. Devi farlo molto bene , e farlo in C ++ non è sicuramente un compito facile. Anche il tempo e il tempo del programmatore non sono economici ...

    
risposta data 21.12.2011 - 23:46
fonte
2

Non uso C ++ da molto tempo (e mai modelli), quindi questo viene dalla memoria in base ad altre domande su Programmers.SE e su StackOverflow:

I template sono gestiti in fase di compilazione, e C ++ ti permette di fare alcuni trucchi pazzi con quelli complicati.

Poiché vengono gestiti in fase di compilazione anziché in fase di runtime, tutta l'esecuzione viene "ottimizzata", portando a un codice compilato che in alcuni casi potrebbe essere più veloce di C, poiché le ottimizzazioni eseguite sono complicato e difficile da eseguire a mano.

Ed è un'ottimizzazione "prematura" perché ciò viene fatto prima di qualsiasi test per la velocità;)

Se qualcuno con esperienza vuole aggiungere / correggere ciò che ricordo, per favore fallo. Non solo downvote.

    
risposta data 22.12.2011 - 00:01
fonte

Leggi altre domande sui tag