2009-04-19 3 views
17

Ho provato a tenere il passo con il C++ poiché hanno introdotto ANSI/ISO C++ 1998. Ho assorbito i nuovi concetti e ho cercato di capirli. Ho imparato a conoscere la gestione delle eccezioni, i modelli e gli spazi dei nomi. Ho letto dei nuovi meccanismi di cast e ho lavorato con la libreria STL.Devo rifiutare il C++ perché sta diventando un juggernaut?

Tutti questi concetti richiedevano molta energia. Ma ora sono un po 'preoccupato per il futuro del C++ quando osservo il nuovo standard C++0x.

Le cose si fanno sempre più complicate. Questo linguaggio sta diventando un mostro.

Non sono sicuro di voler tenere il passo con il linguaggio, dal momento che non eseguo comunque il mio hacking quotidiano in C++. Principalmente uso linguaggi interpretati o bytecode.

Allora perché dovrei preoccuparmi di imparare questo linguaggio difficile, ma eccezionalmente potente? Posso fare il 95% dei miei affari con Python e altri. Con il restante 5%, riesco a gestire senza problemi il vecchio C++ o C.

Cosa ne pensi?

+3

Perché downvoting? Non è che io non abbia amore con questa lingua. Non voglio essere scortese o sfacciato di C++. Penso che sopravviverà alla maggior parte delle altre lingue. Sono interessato alla tua posizione su questo argomento. Non ne hai? – prinzdezibel

+0

questo è soggettivo e polemico, direi. non ho trovato degno di downvoting, ma la gamma di risposte potrebbe essere "oh sì C++ - crap" a "no, C++ va bene sei pieno di merda". –

+1

"Questo linguaggio sta diventando un mostro." Non è già? Il C++ avrà sempre un posto speciale nel mio cuore, ma non mi manca un po 'di lavoro con esso. Penso che sarà in giro per il prossimo futuro, però. –

risposta

20

Ascoltate ciò che Bruce Eckel {autore dei due del cosiddetto migliore C++ books} commented on C++ qualche settimana fa:

Detto questo, ho quasi mai uso C++ più. Quando lo faccio, è sia esaminando codice legacy, o per scrivere sezioni prestazioni critiche, tipicamente più piccolo possibile per essere chiamato da altro codice (il mio preferito approccio è quello di scrivere rapidamente un app in Python, quindi profilo e se è necessario migliorare le prestazioni di chiamando piccole porzioni di C++ usando la libreria di ctypes di di Python).

Poiché ero nel comitato C++ Standard , ho visto che le decisioni erano state apportate . Erano tutti estremamente apprezzati, molto più dello standard , rispetto a , molte delle decisioni prese in Java.

Tuttavia, come le persone hanno giustamente sottolineato, il linguaggio risultante era complicato e doloroso da usare e pieno di regole strane che ho dimenticato come appena sono lontano da esso per un po ', mentre - e ho scoperto queste regole dai primi principi mentre scrivevo i libri , non solo memorizzandoli.

Inoltre, è necessario leggere this thread e Danny Kalev's predictions on C++.

Tuttavia, la crescente complessità del C++ creerà pressione per dividere il linguaggio in dialetti quasi ufficiali. Possiamo già vedere questa tendenza oggi; probabilmente si intensificherà in futuro.

EDIT:

Si dovrebbe dare un'occhiata a questa discussione, anche:

C++ - Anyone else feel like C++ is getting too complicated?

+0

Bel link di discussione. Grazie. – prinzdezibel

+1

+1. "regole strane che dimentico non appena me ne vado per un po '" riassume molto per me. :/ –

+5

Non chiamerei Thinking in C++ uno dei migliori libri su C++. Inoltre, sarebbe una buona idea leggere l'intero articolo di Artima. Fa schifo Java e C++ con un debole apprezzamento facendoli apparire come lingue legacy; Non una grande sorpresa considerando quanto Bruce Eckel sia entusiasta dei linguaggi dinamici come Python. – rpg

1

Non è necessario conoscere tutti gli standard che escono a memoria. Tuttavia, aiuta a conoscere il quadro generale. Il 5% di codice inserito potrebbe reinventare la ruota occasionale. A seconda di quanto tempo, l'importanza che il 5% ha (pensa Pareto) è necessario prendere una chiamata.

Inoltre, qualche motivo particolare (come la dipendenza del codice legacy) perché non è possibile spostare quel 5% in python?

+1

Tempi in cui non riesco a utilizzare Python: quando gestisco il codice legacy o quando le prestazioni sono molto importanti. – prinzdezibel

8

Non sei obbligato a utilizzare la funzione ogni fornita da una lingua. Io non uso setjmp/longjmp in C nonostante sia lì. Inoltre, non uso tutti gli aspetti delle raccolte Java.

Se pensi che le nuove funzionalità renderanno la tua consegna del codice migliore (più veloce o più alta qualità o entrambe), allora usali. Altrimenti, ignorali.

È utile sapere ad alto livello quali sono tutti, se non altro per farti passare attraverso colloqui di lavoro, ma a mio avviso metà della roba che aggiungono alle lingue non è necessaria.

Non ho mai nemmeno usato i modelli C++ prima di passare a Java, ma sapevo a cosa servivano.

Non si tratta sempre di imparare l'ultimo e il più grande. Il software (almeno nel tuo lavoro) riguarda la consegna del prodotto. Questo può essere fatto in COBOL o FORTRAN se ne hai abbastanza.

+2

@Pax, questa è solo una soluzione praticabile se si programma in solitudine. Una volta che hai ereditato il codice dagli altri, improvvisamente hai bisogno di conoscere le parti di C++ ~ che loro conoscono. – mmcdole

+1

Questo è vero per tutto, Simucal: parole chiave, funzioni linguistiche, chiamate in biblioteca, persino algoritmi che non hanno nulla a che fare con il linguaggio stesso. Poiché l'intervistatore ha dichiarato di non usare molto C++, il punto in cui suggerirei di apprendere tali caratteristiche è quando erediti il ​​codice. Quindi non vi è alcuna possibilità di sprecare sforzi e la leggera possibilità di accelerazione quando si impara. Ma ancora, impara l'alto livello, ad es., Conosci quali modelli sono anche se non conosci i dettagli intimi di essi. – paxdiablo

21

Tutti utilizza un sottoinsieme di C++. Per quasi tutte le applicazioni di programmazione in C++, sia lato server o client, tale sottoinsieme è gestibile. A mio parere, le uniche persone che hanno bisogno di rimanere al di sopra di ogni sfumatura della lingua sono gli scrittori delle biblioteche - persone che implementano Boost, STL, Loki, ecc.

Ma vorrei assolutamente usare il linguaggio che si adatta compito. Se Python è più leggibile e più manutenibile di C++ per il tuo lavoro, e non hai bisogno di ciò che offre C++, allora sicuramente tienilo con Python.

0

Il mio suggerimento sarebbe quello di imparare le nuove parole chiave di C++ 0x (& & FTW) ma non preoccuparsi di cercare di imparare l'intera lib. Usa python per w/e che vuoi, possibilmente C# per le app, quindi usa C++ (0x) quando devi fare qualcosa di potente.e chiedere a StackOverflow & di google riguardo al nuovo contenitore durante la prototipazione.

Non avete bisogno di usare un linguaggio pochi eletti,

2

buone risposte.

I produttori di computer competono per gli acquirenti, il software compete per lo spazio su disco e le lingue competono per gli utenti. Lo fanno cercando di afferrare le caratteristiche degli altri.

mi chiedo quanto tempo prima di vedere Fortran uscire con le espressioni lambda :-)

10

In primo luogo, molte caratteristiche di C++ 0x sono per rendere il linguaggio più facile da usare. Errori di compilazione del modello più leggibili, sintassi di inizializzazione più coerente, supporto per il threading, che altrimenti si baserebbe su librerie specifiche della piattaforma e così via.

Quindi, se si utilizza C++, sento che l'apprendimento delle parti importanti di C++ 0x dovrebbe essere un compito gestibile. Ricorda che non è necessario imparare tutte le nuove funzionalità per utilizzare la lingua. Alcune funzionalità vengono principalmente aggiunte come ausilio per gli implementatori di librerie, ad esempio consentendo di implementare l'STL in modo più efficiente, ma ciò non dovrebbe influire sull'uso della lingua da parte degli utenti finali. E alcuni sono davvero necessari solo in casi molto rari. Ignora quelle parti della lingua.

Uno degli obiettivi dichiarati con C++ 0x è evitare che diventa più difficile da utilizzare.

Ma a parte questo, do hai bisogno di C++? Se fai la tua codifica in altre lingue, perché preoccuparsi di stare al passo con il C++?

+0

È stato il mio primo linguaggio che ritengo sia il più fondamentale. Non voglio perdere la mia esperienza in questo campo, ma non posso contraccambiare in questi giorni. – prinzdezibel

+1

Solo perché era la tua prima lingua non significa che devi tenere il passo con i cambiamenti in esso per sempre. Se si desidera mantenere il livello della lingua, ovviamente è necessario imparare anche la maggior parte delle nuove funzionalità di C++ 0x. Ma se non è qualcosa che usi quotidianamente, allora non deve avere la massima priorità. Non ci sarà un compilatore compatibile con C++ 0x per alcuni anni ancora, quindi prendilo con calma. – jalf

1

Prima prova a frequentare un corso su C++ 0x e fai pagare la tua azienda per quello :) Il nostro cervello può contenere incredibili quantità di conoscenza spazzatura. Invece di maledire e avere programmatori-momenti-wtf dovremmo prima imparare dagli utenti del programma e ascoltare le opinioni/le conoscenze di altre persone. La conoscenza si trasferisce molto più velocemente in questo modo.

+0

Corso su C++ 0x? Ne conosci qualcuno? –

+1

Beh, speriamo che C++ 10 sia pienamente implementato nei compilatori, ci saranno più corsi su questo argomento. Anche se il pubblico di destinazione potrebbe essere ampio come in quella prima foto qui: http: //importantshock.wordpress.com/2008/08/20/a-skeptics-look/ :) – AareP

5

Nessuno, tranne forse Bjarne e Herb Sutter, so tutto di C++. Come hai detto, è un linguaggio incredibilmente vasto. Aspettarsi di essere in grado di prendere l'intero standard + i dettagli specifici di implementazione del tuo specifico compilatore o compilatore è verosimilmente irrealistico.

Ma non è necessario sapere tutto per utilizzare C++. Invece, impara solo il sottoinsieme di C++ che è prezioso per te e per i tuoi progetti. Non fa male continuare ad espandere le tue conoscenze, ma a meno che tu non stia scrivendo un compilatore C++, non c'è motivo di sapere tutto. Anche se lo realizzi, tutte le persone con cui lavori non lo faranno.

+0

In realtà, nessuno conosce veramente "C++". Ci sono esperti di base (di solito produttori di compilatori: GCC, EDG, Microsoft) e ci sono esperti di biblioteca (team GCC STL e Dinkumware). Anche all'interno di un team di compilatori scoprirai che il team è diviso in esperti in aree specifiche della lingua. –

5

Quindi perché dovrei preoccuparsi di imparare questa difficile, ma eccezionalmente potente, lingua? Posso fare il 95% dei miei affari con python et al. Con il restante 5%, posso affrontare senza problemi il semplice vecchio C++ o C .

Bene, per la maggior parte si risponde alla propria domanda. Non è necessario per te tenere il passo con il C++ in questo momento.

Tuttavia, la lingua continuerà a marciare. Tra qualche anno, alcuni dei concetti che consideri una perdita di tempo insanguinata saranno di uso comune. Un giorno potresti trovare durante il tuo 5% di utilizzo di "plain-old C++" che alcuni codice di esempio o codice a cui stai collaborando utilizza un costrutto con cui non hai familiarità. A quel punto, dovrai colpire la rete e rispolverare il nuovo C++ "attuale".

Sarà un problema? Ovviamente no. Sei un programmatore. Tieni aggiornato sugli ultimi concetti di programmazione nel contesto della tua lingua al 95%, che cambia anche nel tempo. Probabilmente avrai già una certa familiarità con i concetti e dovrai solo familiarizzarti con la sua sintassi C++ quando arriverà il momento di doverli utilizzare.

Personalmente spero di continuare a stare al passo con il C++, anche se la mia carriera si sposta più verso Java o un altro linguaggio di prossima generazione. Perché? Vorrei dire perché mi interessa di più e perché amo la complessità e l'espressività di tutto ciò.Più probabilmente, però, è solo perché era la mia prima lingua professionale; La considero la mia "lingua nativa".

Se non ti interessa, e non riguarda il tuo lavoro o il lavoro futuro, non preoccuparti. Cosa c'è che non va? Niente.

+0

Questo è esattamente il mio punto. Vedo anche il C++ come "lingua nativa", perché come per te è la mia prima lingua. Non voglio smettere, ma il prezzo è troppo alto. È troppo alto? Non ho ancora deciso ... – prinzdezibel

+0

Continuo a leggere, eseguire il debug e hackerare C++ su base giornaliera, quindi la mia prospettiva non è la migliore per aiutarti a rispondere a questa domanda. – veefu

3

Ho difficoltà a trovare una singola istanza in cui C++ 0x è stato reso più complesso di C++ 98. Ci sono due cose che veramente sono complesse:

  1. Concepts.
  2. il modello di memoria

ma il primo è stato rimosso di nuovo (per fortuna; standardizzazione funzioni non implementate non ha mai lavorato in C++, le specifiche testimone tiro, modelli esterno, auto_ptr, ...), e la seconda non è davvero qualcosa che un linguaggio di programmazione moderno può sfuggire. E 'stato indotto esternamente da Intel & Co rompendo utilmente i tuoi programmi per farli correre più velocemente.

Il resto sta solo risolvendo i fastidi che ogni programmatore C++ ha colpito frequentemente negli ultimi decenni.

Come nota a margine: trovo ... divertente ... vedere come linguaggi come C# si riempiono di un linguaggio di interrogazione del database (LINQ) e il C++ è gonfioso perché gonfiato.

+0

+1 per la nota a margine ... :) –

+0

++ per "objurgated" –