Qual è il ruolo del C ++ oggi?


41

Attualmente sono uno studente IT e mi chiedo cosa sia ancora importante in C ++ oggi, a cosa serve? Ho completato il corso base di C ++ nella mia università, ma non riesco a immaginare dove posso usare le mie conoscenze e in quale direzione dovrei andare a studiare C ++.

In altre parole, cosa dovrei imparare a diventare un programmatore C ++ di successo?

Attualmente sto imparando Java solo perché non vedo chiaramente in quale area il C ++ possa essere utile oggi, ma so chiaramente quale tipo di lavoro svolgerò come programmatore Java. Ma spero ancora che C ++ non sia morto.


2
Questo è il mio punto di vista Il C ++ è molto utile in situazioni (e videogiochi) in tempo reale. Uso anche C ++ per applicazioni desktop (non dimenticare Qt) per motivi di prestazioni.
hosomaki,

1
@stign IMO è probabile che alla fine morirà, poiché probabilmente arriverà un momento in cui tutte le lingue oggi sono obsolete (probabilmente a causa di enormi cambiamenti nell'hardware utilizzato).
Kenneth,

17
Il C ++ è tutt'altro che morto (scrivo un nuovo codice ogni giorno), e se COBOL è un'indicazione, avrò lavoro per molti, molti anni a venire.
Michael Kohne,

2
Dai un'occhiata a The Programming Languages ​​Beacon e fai le tue conclusioni: lextrait.com/vincent/implementations.html
Nemanja Trifunovic

1
Di recente ho visto alcuni video interessanti sul canale 9 di Microsoft . Microsoft ha speso milioni per ricerche di mercato e sulla base delle sue ricerche parla di un rinascimento del C ++. Vedere questo video .
grokus,

Risposte:


57

La caratteristica killer di C ++ è la gestione delle risorse limitata nell'ambito , SBRM (più comunemente noto come " RAII "). È l' unico linguaggio di programmazione industriale costruito attorno a questo concetto. In C ++, i tempi di vita di tutti gli oggetti sono esattamente noti e i programmi (ben scritti) C ++ garantiscono che le risorse vengano acquisite e rilasciate in modo completamente deterministico. In confronto, le lingue raccolte con immondizia o altrimenti gestite non forniscono tali garanzie; in effetti gli oggetti in quelle lingue possono persistere dopo la fine della loro vita.

Questo è il motivo per cui il C ++ viene utilizzato in finanza, videogiochi, sistemi integrati e in tempo reale ad alte prestazioni, trasporti, produzione e altri settori in cui il determinismo e la precisione sono importanti. Non ci sono alternative

Certo, è stato usato per molte più attività di così, e quelle attività si stanno perdendo in C # e Python e altri linguaggi più adatti, ma ciò non influisce sulla sua nicchia principale.


20
Chiunque usi malloc in C ++ mi piacerebbe colpire la testa con un oggetto duro. Inoltre, c'è una caratteristica meno nota dell'operatore newin C ++ chiamata posizionamento. Permette di riutilizzare uno spazio di memoria attualmente occupato. Quindi, se qualcuno voleva evitare (o minimizzare) la frammentazione, può farlo in teoria. E prevedibile non è lo stesso deterministico.
Tamás Szelei,

4
@Apalala C ++ ha anche il conteggio dei riferimenti, ma è molto peggio di SBRM in termini di gestione della durata degli oggetti. Non sto solo parlando del determinismo hard-RT, sto parlando del comportamento deterministico del modello a oggetti.
Cubbi,

4
Quando ho imparato il C ++, RAII non era particolarmente conosciuto; Ho imparato la gestione dei puntatori nuova ed eliminata e basata sul cervello. Quindi non penso che tu possa definirlo "costruito attorno al concetto". Le librerie e le altre strutture di supporto utilizzate oggi potrebbero avere, ma non il linguaggio principale o la sintassi.
giovedì

7
@jprete È vero che molti dei punti di forza del C ++ sono stati scoperti piuttosto che progettati. Questo post parla della lingua post 2005.
Cubbi,

5
RAII è stato progettato in C ++. Ma la maggior parte dei programmatori C ++ ha continuato a scrivere C, sostituendo malloc con nuovo e gratuito con delete.
Kevin Cline,

40

Ci sono alcuni mercati per C e C ++ (per quanto la mia comprensione sia limitata)

  1. Codice esistente. C e C ++ hanno alcune delle più grandi basi di codice esistenti in circolazione. Codice di queste dimensioni non può essere semplicemente buttato fuori solo perché è arrivata la "prossima nuova lingua calda". I bind C sono praticamente lo standard dell'interazione inter-lingua sulla maggior parte delle piattaforme, quindi è utile poter (per lo meno) creare librerie wrapper in C o C ++.
  2. Applicazioni ad alte prestazioni (ad es. Finanziamenti ad alta frequenza). C e C ++ ottengono comunque prestazioni complessive migliori rispetto alla maggior parte degli altri linguaggi di programmazione. Soprattutto in C ++, spesso si creano astrazioni con elementi di soli compilatori come i modelli, che sposta il calcolo dal runtime al tempo di compilazione (rendendo l'app più veloce in generale).
  3. (Simile a 2) Applicazioni a bassa latenza. Le lingue che girano ad es. Su CLR o JVM possono spesso essere veloci quasi quanto C ++ a seconda dell'applicazione, ma è ancora necessario caricare in memoria CLR o JVM prima che il programma possa essere eseguito. Se si hanno requisiti di avvio difficili, questo è importante. MODIFICA DAL COMMENTO : In questo caso, i requisiti di latenza rigida di qualsiasi descrizione sono importanti qui. Le lingue che girano su macchine virtuali raramente offrono limiti di tempo perché l'esecuzione di, ad esempio, la garbage collection non è un processo deterministico.
  4. Sistemi integrati. Alcuni sistemi embedded hanno l'hardware per funzionare, ad es. JVM (Google Android (Okay, non è proprio JVM, ma è vicino), RIM's Blackberry) o CLR (Windows Phone), ma la maggior parte dei sistemi embedded non ha il potere di eseguire linguaggi che richiedono un supporto di runtime superiore a quello richiesto per C o C ++ (che non è affatto supportato da runtime).
  5. Applicazioni vincolate alla distribuzione. A volte richiedere l'installazione di JVM o CLR è eccessivo se l'intero programma ha solo poche centinaia di KB. (Ad esempio la maggior parte dei programmi su cui lavoro deve essere distribuita come un singolo .EXEfile senza alcun tipo di programma di installazione o qualcosa del genere; per questo non ci sono alternative)

2
La latenza di avvio non è l'unico tipo di latenza di cui occuparsi: i requisiti in tempo reale duri possono essere un grande affare.
Greyfade,

1
Aggiungi qualcosa in cui non vuoi essere bloccato in un particolare produttore (C # o Objective-C) o non vuoi che la tua lingua scompaia in un mucchio di cause legali (Java)
Martin Beckett,

@greyfade: è un po 'quello che intendevo per (2), ma sono d'accordo che non sia chiaro. Modificato. @Martin: Anche se penso che sia un buon punto di forza per il C ++, non penso che risponda alla domanda - che è in quali mercati viene comunemente usato il C ++. Inoltre, non penso che chiamerei C # bloccato a un particolare produttore quando esiste una versione con licenza <S> BSD </S> (OOPS: It's LGPL) del CLR (mono).
Billy ONeal

1
Inoltre 5. Sistemi operativi e framework di base. Puoi fare molto in una macchina virtuale, ma la macchina virtuale deve ancora essere implementata in C e / o C ++.
Jan Hudec,

1
@Jan: Sì, lo sarebbe. Cose come la riflessione e gli amici causerebbero problemi 2-4. L'unico sottoinsieme di cui avresti davvero bisogno per scrivere il Garbage Collector sarebbe qualche oggetto che rappresenta la memoria fisica.
Billy ONeal

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.