Il C ++ moderno sta diventando sempre più diffuso? [chiuso]


132

Quando ho appreso per la prima volta il C ++ 6-7 anni fa, quello che ho imparato era fondamentalmente "C con classi". std::vectorera sicuramente un argomento avanzato, qualcosa che potresti imparare se lo volessi davvero . E certamente nessuno mi diceva che i distruttori potevano essere sfruttati per aiutare a gestire la memoria. Oggi, ovunque guardo, vedo RAII e SFINAE e STL e Boost e, beh, il C ++ moderno. Anche alle persone che stanno appena iniziando con la lingua sembrano aver imparato questi concetti quasi dal primo giorno.

La mia domanda è: è semplicemente perché sto vedendo solo il "migliore", cioè le domande qui su SO e su altri siti di programmazione che tendono ad attirare i principianti (gamedev.net), o è effettivamente rappresentativo del Comunità C ++ nel suo insieme?

Il C ++ moderno sta davvero diventando il default? Piuttosto che essere una cosa di fantasia di cui scrivono gli esperti, sta diventando "il modo in cui C ++ è"? Oppure non riesco a vedere le migliaia di persone che imparano ancora "C con le classi" e scrivono le proprie matrici dinamiche invece di usarle std::vector, e gestiscono la memoria chiamando manualmente il nuovo / elimina dal loro codice di livello superiore?

Per quanto io voglia crederci, sembra incredibile se la comunità C ++ nel suo insieme si è evoluta così tanto in pochi anni. Quali sono le tue esperienze e impressioni?

(dichiarazione di non responsabilità: qualcuno che non ha familiarità con il C ++ potrebbe interpretare erroneamente il titolo chiedendo se il C ++ sta guadagnando popolarità rispetto ad altre lingue. Questa non è la mia domanda. "Il moderno C ++" è un nome comune per un dialetto o uno stile di programmazione all'interno del C ++, che prende il nome dal libro " Design moderno C ++: schemi di programmazione e design generici applicati ", e sono interessato solo a questo rispetto al" vecchio C ++ ". Quindi non c'è bisogno di dirmi che il tempo di C ++ è passato e che tutti dovremmo usare Python;))


2
Sfortunatamente penso che ci vorrà un po 'prima che la comunità C ++ nel suo insieme sia sufficientemente avanzata per riconoscere come utilizzare la libreria standard e potenziare insieme alle prossime aggiunte C ++ 0x e tanto meno implementare effettivamente il codice usando metodologie simili. Tuttavia, penso che C ++ 0x porti molte speranze per aumentare la popolarità del C ++. Molti inconvenienti sintattici quotidiani sono stati migliorati. Ho sempre pensato a queste cose come meschine, ma per le persone esterne che guardano la lingua, questa è una fonte comune di lamentele.
puzzolente472

15
Nel mio caso, ogni volta che incontro un professionista che capisce le moderne tecniche C ++ come RAII e la sicurezza delle eccezioni (non riferendosi necessariamente al libro di Alexandrescu) o anche i concetti più basilari come iteratori e algoritmi generici, ne trovo altre dieci che non capiscono. Almeno quando si tratta di professionisti, molti di loro sono troppo presi dalle scadenze per apprendere tutto ciò che si sa, quindi anche i professionisti C ++ autoproclamati hanno spesso molto da imparare. Temo di diventare anche uno di quelli con C ++ 0x: c'è molto che dovrò imparare e adattare per questo e ho delle scadenze da rispettare.
puzzolente472

Risposte:


76

Ecco come penso che le cose si siano evolute.

La prima generazione di programmatori C ++ erano programmatori C, che in effetti utilizzavano C ++ come C con le classi. Inoltre, l'STL non era ancora in atto, quindi è quello che essenzialmente era C ++.

Quando uscì la STL, le cose avanzate, ma la maggior parte delle persone che scrivevano libri, mettevano insieme curricula e lezioni di insegnamento avevano imparato prima il C, poi quel C ++ extra, quindi la seconda generazione imparò da quella prospettiva. Come std::for_eachho notato un'altra risposta, se ti senti a tuo agio a scrivere regolarmente per i loop, il cambiamento nell'uso non ti compra molto, tranne la calda sensazione confusa di fare le cose nel modo "moderno".

Ora abbiamo istruttori e scrittori di libri che hanno utilizzato tutto il C ++ e hanno ricevuto le loro istruzioni da quella prospettiva, come il C ++ accelerato di Koenig & Moo e il nuovo libro di testo di Stroustrup. Quindi non impariamo char*allora std::strings.

È una lezione interessante su quanto tempo occorre per sostituire i metodi "legacy", specialmente quando hanno una storia di efficacia.


13
Sì. È stato molto intelligente rendere C ++ altamente retrocompatibile con C a causa dell'enorme base installata di programmatori C. Molto simile alla riuscita strategia di MS di mantenere sempre la retrocompatibilità con DOS. (Vedi l'eccellente blog di Raymond Chen per le lunghezze spesso dolorose in cui sono andati ...)
j_random_hacker,

2
Spiacenti, è andato un po 'di tangente lì ... Volevo dire che penso che tu abbia ragione sul "divario generazionale" tra coloro che sono passati dal C (ma hanno mantenuto il pensiero in stile C) e quelli il cui "primo assaggio" "era C ++ post-STL.
j_random_hacker,

57

Assolutamente si. Per me se non stai programmando C ++ in questo stile "Modern C ++" come dici tu, allora non ha senso usare C ++! Potresti anche usare C. "Modern C ++" dovrebbe essere l'unico modo in cui C ++ è mai programmato secondo me, e mi aspetterei che chiunque usi C ++ e abbia programmato in questo modo "moderno" sarebbe d'accordo con me. In realtà, sono sempre completamente scioccato quando sento parlare di un programmatore C ++ che non è a conoscenza di cose come un auto_ptr o un ptr_vector. Per quanto mi riguarda, quelle idee sono basilari e fondamentali per il C ++ e quindi non potrei immaginarlo in nessun altro modo.


4
+1; Ho preso presto lo stile "moderno c ++" perché è il modo naturale di farlo (se non stai pensando in C con le classi).
Adam Hawes,

21
"Basta usare C?" C è dannatamente potente.
Clark Gaebel,

4
I robot sicuramente non programmeranno in C ++, non sono abbastanza stupidi e si congelerebbero provando a compilarlo.
Matt Joiner,

6
@ClarkGaebel Bene, se C è potente, così è C ++ per sua eredità da C senza i suoi problemi :)
legends2k

4
@rxantos, dici che come se non avessimo molte opzioni per valutare le prestazioni, ad esempio la visualizzazione dell'output dell'assembly, i timer, i monitor RAM e molti altri. C ++ non è diverso da C in questo senso. In caso di dubbi, profilo. Qualcos'altro è solo sentito dire.
underscore_d

25

Ai tempi di Windows 3.1, C era lo standard. Quando il C ++ ha colpito il mercato degli sviluppatori e in seguito è diventato lo standard ANSI, è stata la nuova novità. Ha reso popolare l'acronimo OOP e alcuni dei modelli di progettazione di base usando il polimorfismo.

Ora, con la maggiore accettazione di piattaforme gestite a barriera ridotta, come C # /. NET, c'è meno di un motivo per usare C ++. Gran parte della base di sviluppatori avrà una scelta e siamo onesti: C ++ è un orso da imparare per un principiante. Con C #, puoi semplicemente eseguirlo.

Ciò lascia davvero solo le piattaforme che HANNO BISOGNO del C ++ e degli irriducibili evangelisti del C ++ per continuare a praticare l'arte. Questa è la comunità che ha bisogno e vuole tutti gli strati di astrazione considerati "Modern C ++".

Quindi sì, credo che "Modern C ++", come dici tu, stia diventando sempre più diffuso. Anche se, è prevalente con un pubblico diverso da quello che ha usato in passato.


Forza ragazzi, questa risposta fa alcuni punti positivi. Il C ++ non è perfetto, lo sappiamo tutti, Bjarne stesso si lamenta che è troppo grande e troppo difficile da imparare. Anche se non sono d'accordo sul perché il C ++ moderno sia emerso così gradualmente - IMHO ci vuole così tanto tempo perché un linguaggio così grande "passi avanti".
j_random_hacker,

4
Quindi stai dicendo che gli sviluppatori più medi sono passati a C # e simili, mentre più hard-core è rimasto bloccato con C ++? (Non che non ci siano persone C # /. NET davvero intelligenti, ma ci sono molte meno intelligenti.) Ha un certo senso.
David Thornley,

3
Penso che sia un punto valido. Naturalmente non è vero per tutti, ma in larga misura, sono d'accordo, la maggior parte delle persone che hanno una scelta hanno già scelto C # o Java o altri linguaggi simili.
jalf,

3
Casi d'uso: voglio che un client Windows faccia CRUD sul mio db. Utilizzare C # /. NET o C ++ / MFC? Voglio un'app Web ... Utilizzare C # / ASP.NET o C ++ / ISAPI? Voglio un semplice clone "Nybbles" usando DirectX C # /. NET o C ++ / MFC / WTL? Voglio una demo vincente ad Assembly09 ... sicuramente C ++ (vs. C #).
spoulson,

8
Non so se è una questione di più strati di astrazione o più durezza. Ho il sospetto che solo i tipi di astrazioni disponibili attraverso i modelli non fossero disponibili in Java o C #, quindi le persone a cui piacevano o ne avevano bisogno rimanevano con C ++.
Kragen Javier Sitaker,

16

Sono uno di questi ragazzi che ha imparato a lavorare con la STL e ho sentito molto parlare della RAII e delle buone pratiche di programmazione C ++ dal primo giorno. Sembra oggi alcuni dei libri più consigliati per l'apprendimento del C ++ (come Accelerated C ++ e la serie Effective C ++ ) concentrarsi sull'uso degli strumenti STL anziché arrotolare le proprie cose e fornire anche molte "regole" per una programmazione efficace (o "moderna").

Ma parlando con gli amici ho anche notato che alcune aziende lavorano ancora con "C with Classes", non con "Modern C ++". Forse la cultura proposta dagli autori e dagli utenti del "Modern C ++" prevarrà un giorno :)


Dove lavoro, usiamo ancora C con le classi, probabilmente perché ci sono molti vecchi timer che sono lì da un po '. Sembrano molto diffidenti anche con la STL, figuriamoci BOOST.
aneccodeal

12

Penso che tu abbia appena avuto una brutta esperienza iniziando.

Devi procurarti i libri efficaci di Scott Meyers C ++. Ho iniziato con il C ++ con rabbia nel 1999, il mio team leader mi ha fatto sedere e leggere il C ++ efficace e il C ++ più efficace prima che mi fosse permesso di controllare QUALSIASI codice.

La maggior parte del suo consiglio è sulle linee di "non utilizzare questa funzione , ma se è necessario, tenere questo in mente"

Se segui i suoi consigli scriverai C ++ buono o "moderno".

Adesso ha anche un libro su STL, ma che non ho letto.


Devo dire che questo era solo il mio punto di partenza. Oggi sono molto a mio agio con STL, boost, RAII e tutto il resto. Mi chiedevo semplicemente quanto fosse comune la mia esperienza iniziale.
jalf

9

Nei miei lavori in C ++, ho scoperto che le funzionalità moderne sono sempre più utilizzate e più persone mi hanno chiesto di loro nelle proiezioni telefoniche e nelle interviste. Per quanto ne so, stanno prendendo piede.

Ho imparato il C ++ originariamente come qualcosa di simile a C with Classes; sebbene il linguaggio fosse avanzato ben oltre, i libri che leggevo e le persone con cui lavoravo erano fermamente bloccati sul "vecchio C ++". RAII qualcosa a cui la gente penserebbe, piuttosto che fare automaticamente, e ricordo di aver letto alcuni dei primi articoli sui problemi della sicurezza delle eccezioni.

Come sottolineato, ci sono nuovi libri ora. Molti dei vecchi sono ancora rilevanti, ma sembrano sempre più pieni di spiegare perché ovviamente le cattive idee sono cattive. (Allo stesso modo, è difficile per i lettori moderni capire quanto fossero rivoluzionarie le idee di una mente inconscia di Freud, dato che ora è saggezza convenzionale.)

Stroustrup è appena uscito con un libro di testo, Programmazione: principi e pratica usando il C ++ . L'ho comprato perché non ho ancora fallito nell'apprendere cose buone da un libro di Stroustrup, ma non ho superato i primi capitoli. Finora, tutto quello che posso dire è che approvo il modo in cui sta iniziando, ed è almeno una buona introduzione su come usare il C ++.


Anche le prime versioni di STL non erano eccezionalmente sicure.
Kragen Javier Sitaker,

2
A quel tempo, nessuno sapeva davvero come scrivere un codice sicuro per le eccezioni. Ciò è stato risolto negli anni successivi alla pubblicazione dello standard. Ricordo alcuni degli articoli del Rapporto C ++.
David Thornley,

7

Mentre lavoro al progetto in cui sono attualmente coinvolto, c'è molto codice C ++ che si è evoluto in un periodo di tempo significativo (oltre 10 anni ormai). L'evoluzione di cui parli è chiaramente visibile lì: il codice più vecchio è spesso "C con classi" - puntatori grezzi, char*stringhe e uso delle funzioni C associate, array ecc .; il codice più recente utilizza i puntatori intelligenti ATL e simili per gestire le risorse, ma si attacca ancora ai loop codificati a mano per la maggior parte del tempo e l'iteratore è una vista rara; e il più recente è pieno zeppo di contenitori STL, algoritmi,shared_ptr(inclusi deleter personalizzati per gestire handle, ecc.), modelli di classi e funzioni fortemente generici e così via. La maggior parte delle tecniche di codifica "C con classi" tradizionali, come i puntatori grezzi non incapsulati con gestione manuale della durata, sono attualmente molto disapprovate nelle revisioni del codice. A giudicare da ciò, sembra che la tua osservazione sia accurata.

Lo sviluppo più recente sembra essere una mania per C ++ 0x lambdas - che ha un lato positivo in quanto inclina anche l'equilibrio a favore dell'uso di algoritmi standard su loop codificati a mano, poiché ora puoi avere tutto il tuo codice in linea con anche algoritmi.


6

Non direi che std :: vector si qualifichi come "moderno" in questi giorni. È davvero semplice.

Generalmente la mia impressione è che le persone abbiano acquisito una certa esperienza con il moderno stile C ++ e siano un po 'sobrie. Solo per fare un semplice esempio, STL for_each era interessante, ma in pratica non aggiunge un terribile valore su un semplice ciclo C. È più difficile eseguire il debug e talvolta non fornisce le prestazioni migliori. Anche i costrutti per la programmazione funzionale nell'attuale STL sono generalmente molto ingombranti, specialmente se hai esperienza da un vero linguaggio funzionale come ML.


1
perché dici che il vettore non si qualifica come moderno? è ancora lo stato dell'arte per molti casi d'uso, anche se è di base. ma penso che qualcosa di base non significhi che non è moderno. piuttosto il contrario, semmai. ma penso di essere d'accordo con il tuo secondo paragrafo :)
Johannes Schaub - litb

4
ma penso che questo sia perché alcuni ppl cercano di usare for_each e gli amici praticamente per tutto, anche per cose come dove un semplice for-loop sarebbe molto più conciso - gonfiando un loop di 2 righe fino a 10 righe. mi aspetto che più persone utilizzino for_each e gli amici quando lambda sarà disponibile in C ++ 1x
Johannes Schaub - litb

7
il vettore è di base è esattamente il punto. Non è sempre stato semplice. Una volta, era comunemente visto come una cosa super complicata (usava i MODELLI) e inefficiente (non è una matrice grezza). Qualcosa di cui gli esperti potrebbero predicare, ma molte persone non si fidavano.
jalf

2
Forse perché std :: for_each è raramente ciò di cui hai bisogno rispetto a dire ... std :: transform? L'uso dell'algoritmo ti aiuta a sbarazzarti di un bug molto comune: una condizione di loop errata.
Edouard A.

il vettore <bool> non è certo di base ...
Kugel

6

Nella mia esperienza (Università spagnola), purtroppo, la norma è quella di non considerare le lingue in sé. Usano i linguaggi più semplici per insegnare la programmazione (ad esempio Java), perché dovrebbe essere facile per insegnanti e studenti, e quindi usano C per le classi del sistema operativo e simili.

Il C ++ viene introdotto leggermente (in ogni caso in ogni caso), solo per fornire un C con classi. Non entrano in boost o nemmeno STL. Penso che tenere il passo con tutte le caratteristiche e il modo di pensare del C ++ sia costoso sia per gli insegnanti che per gli studenti. Quanti programmatori C ++ qui conoscono abbastanza di tutte le librerie Boost per usarle per fornire una soluzione migliore o progettarla? Bisogna avere interesse a tenere il passo con tutte le nuove biblioteche e modi di dire.

Tuttavia, come ho detto, sembra che la programmazione in generale (e i linguaggi di programmazione in particolare) non siano presi troppo sul serio, poiché sembra essere un compito temporale quando iniziano un lavoro, quindi dimenticano come programmare mentre salgono nel albero delle imprese. Molte aziende qui, e la stessa Università, hanno la sensazione che la programmazione possa essere fatta da chiunque.

Se segui questa filosofia, allora per la maggior parte delle persone che conosco, il C ++ sarà sempre "C con classi".

Saluti,


La maggior parte di ciò è molto comune in Informatica e, nel complesso, non credo sia una cosa negativa. (Non concentrarsi sulla lingua, cioè. Le lingue che vengono insegnate dovrebbero ovviamente essere insegnate correttamente).
jalf

+1: "(Non concentrandosi sulla lingua, cioè. Le lingue che sono state insegnate dovrebbero ovviamente essere ancora insegnate correttamente)"
Jared Updike

6

Nella mia esperienza dipende molto dall'età del prodotto / progetto software. La maggior parte dei nuovi progetti di cui sono a conoscenza utilizzano il C ++ moderno (RAII, STL, Boost). Tuttavia, ci sono molti progetti C ++ che hanno più di 10 anni e non vedi C ++ moderno lì.

Inoltre, tieni presente che alcune delle implementazioni STL più popolari sono state praticamente interrotte fino a forse 5 anni fa (MSVC <7.0 e GNU <3.00)


4

Penso che la più grande barriera che ho incontrato sia il supporto di toolchain, specialmente su progetti multipiattaforma. Fino a qualche anno fa, era comune vedere le note di compilazione che dicevano "la piattaforma x ha bisogno di STLport per funzionare perché il loro compilatore è bloccato". Anche ora, vedo problemi con le persone che cercano di utilizzare più dipendenze di terze parti legate a diverse versioni di BOOST. Questo rende impossibile il collegamento, il che significa che devi tornare indietro e ricostruire i tuoi avvallamenti da zero.

Ora che quasi tutti hanno smesso di usare MSVC ++ 6, il pasticcio di STLport è alle spalle. Ma non appena TR1 uscirà, torniamo a "quali versioni di quali ambienti lo supportano e lo fanno bene" e ancora una volta questo rallenterà l'adozione.

Lavoro a un progetto iniziato in C (non in C ++) nel 1992. Sarebbe impossibile distribuire pratiche moderne attraverso la base di codice legacy. Allo stesso modo, lavoro su un altro progetto che è molto più vicino all'avanguardia del linguaggio C ++.


3

Molti team di cui sono stato e di cui ho sentito parlare considerano il grande "stiamo usando le eccezioni?" domanda. Questo è il codice per "stiamo usando il moderno C ++?"

Una volta che non stai usando le eccezioni, ti viene precluso l'uso della piena potenza della lingua e delle sue librerie.

Ma molte codebase meno recenti sono prive di eccezioni ed è percepito come difficile intercettare le eccezioni in una codebase che non le prevede o in una squadra che non sa come usarle, quindi la risposta in questi casi è spesso "no".

Nella mia esperienza, il C ++ moderno ha bisogno di qualcuno che ne sia appassionato nel team, che non sopporta la vista di niente di meno, per spingerlo. Deve anche superare le obiezioni di chi vuole che sia più simile al codice legacy.

Anche se non credo che i codebase del vecchio C ++ vadano via molto rapidamente, credo che ci siano più di queste persone appassionate nel mondo di quante ce ne fossero cinque anni fa. Si trovano ad affrontare la stessa battaglia in salita che hanno affrontato cinque anni fa, ma hanno maggiori probabilità di trovare spiriti affini.


3

Prima di rispondere a una domanda del genere, dovresti essere d'accordo su cosa sia "moderno". Ciò non è probabile che accada, poiché "moderno" è una parola mal definita e significa cose diverse per persone diverse. Il titolo del libro di Alexandrescu (Modern C ++ Design) non aiuta davvero, dal momento che è in gran parte un libro sulla metaprogrammazione dei modelli, che è un'area specifica del C ++ ma non è l'unico.

Per me, "Modern C ++"! = "Metaprogramming dei modelli". Direi che le funzionalità di C ++ sopra C rientrerebbero in queste categorie:

  • Classi (costruttori, distruttori, RAII, colata dinamica e RTTI)
  • eccezioni
  • Riferimenti
  • Strutture dati e algoritmi nella libreria standard (STL)
  • iostreams
  • Modelli di classe e funzione semplici
  • Metaprogrammazione del modello

Nessuno di questi è particolarmente moderno, dal momento che sono stati tutti circa 10 anni o più. La maggior parte di queste funzionalità sono utili e ti permetteranno di essere più produttivo della C semplice per molti casi d'uso. Un buon programmatore dovrebbe e li utilizzerà tutti in un progetto di dimensioni decenti, ma una di queste cose non è come l'altra:

Metaprogrammazione del modello.

La breve risposta alla metaprogrammazione dei template è semplicemente dire di no. Purtroppo per alcune persone è sinonimo di "moderna programmazione C ++", a causa del libro, ma alla fine crea più problemi di quanti ne risolva. A meno che il C ++ non sviluppi migliori meccanismi di programmazione generica come la riflessione, non sarà adatto alla programmazione generica e linguaggi di livello superiore come Python si adatteranno meglio a questi casi d'uso. Per questo e molti altri motivi, consultare il CQ FQA


6
La metaprogrammazione del modello IMHO non è quasi mai necessaria per la programmazione dell'applicazione , dove serve solo a fornire livelli di generalità probabilmente non necessari a scapito della leggibilità e dei bug difficili da capire. Ma OTOH è estremamente utile per gli esperti nella costruzione di librerie (a la Boost), dove la generalità aggiunta è utile e i meccanismi (brutti, ingannevoli, confusi) possono essere nascosti alla vista.
j_random_hacker,

3
Hai ragione in quel modello la metaprogrammazione può essere usata con gusto, se fatta con moderazione, in particolare nelle biblioteche. Ma troppo spesso ho visto persone andare troppo oltre la strada della metaprogrammazione dei template, e di conseguenza i loro programmi ne soffrono. Non sono contrario alla metaprogrammazione, in effetti ne sono un forte sostenitore, è solo che le strutture del C ++ per questo sono piuttosto rozze.
Anton I. Sipos,

2

Il miglior libro per l'apprendimento del C ++. "Accelerated C ++" di Koenig & Moo, insegna ciò che descrivi come C ++ moderno, quindi immagino che la maggior parte delle persone in questi giorni lo stiano usando. Per quelli di noi che usano il C ++ da un po 'di tempo (dalla metà degli anni '80 nel mio caso), il C ++ moderno è un grande sollievo dai noiosi compiti di scrivere i nostri array, stringhe, tabelle di hash (ripeti fino alla nausea).


1
Non intendevo necro, ma ho appena acquistato il libro sulla base di questa raccomandazione. Dovremo vedere!
Andrew Weir,

2

Ho esaminato i lavori C ++ in effetti e le librerie "moderne" sono sempre più utilizzate nelle descrizioni dei lavori, MFC che è piuttosto una libreria c ++ "vecchio stile" è meno utilizzata.


1

La standardizzazione del linguaggio alla fine degli anni '90 è stata il primo passo, ha permesso ai produttori di compilatori di concentrarsi sul set di funzionalità "standard", ha anche permesso al linguaggio di correggere alcuni degli spigoli, che sono comparsi durante il processo di standardizzazione.

Ciò a sua volta ha consentito lo sviluppo di framework basati su funzionalità standard del linguaggio e non su funzionalità fornite da una particolare implementazione del compilatore. La libreria Boost è in particolare al riguardo. Anche questo ha permesso che il nuovo sviluppo si basi su lavori precedenti, rendendo così possibili soluzioni a problemi più complessi.

Una modifica notevole qui è come in precedenza i framework erano basati sulla nozione di classi base e classi derivate (una funzionalità di runtime). Ma ora le funzionalità più avanzate spesso sono fortemente basate su modelli "ricorsivi" (una funzionalità di compilazione).

L'STL ha i suoi pro e contro ma è sopravvissuto alla prova del tempo, se vuoi qualcosa che funzioni ed è semplice STL ha sicuramente qualcosa per aiutarti ad iniziare. Non ha senso reinventare la ruota (se non per motivi didattici).

Anche l'hardware del computer ha fatto grandi passi avanti dagli anni '90, quindi la memoria e la CPU non sono più un vincolo per il compilatore. Quindi la maggior parte delle ottimizzazioni teoriche dai libri sono ora possibili.

I prossimi passi del linguaggio sono il supporto della programmazione multi-core, che fa parte dello sforzo standard 0x.


1

Sì e no. Certamente per i nuovi progetti è sempre più popolare. Tuttavia, ci sono ancora ostacoli all'adozione che sono pratici, non politici, che altri non hanno menzionato. Esistono molte librerie commerciali C ++ che usano ABI di compilatori antichi che non supportano correttamente le funzionalità viste in Modern C ++ e molte aziende fanno affidamento su queste librerie. Sun Studio su Solaris, ad esempio, non può funzionare con Boost senza l'uso di STLport, ma qualsiasi libreria commerciale di terze parti che si desidera utilizzare richiederà la versione di Sun di STL. Stessa storia con GCC 2.95 e Redhat Enterprise Linux.


-3

Sta amando quanto poco sforzo faccia per rendere il c ++ più stabile. Il sistema di allarme è attivo, ma non si sta evolvendo molto. È ancora più facile spararsi in un piede rispetto a 10 anni fa. Non so perché, ma c ++ è ancora la mia lingua preferita. :)


Suggerirei di leggere alcuni dei libri di questo thread prima di fare affermazioni sul "piccolo sforzo" che viene messo nella stabilizzazione in C ++ e che "è ancora più facile spararsi in un piede rispetto a 10 anni fa".
Patrick Niedzielski il

Certo, la libreria std fornisce una certa stabilità sull'allocazione della memoria e sulla manipolazione delle stringhe. Sfortunatamente internamente utilizza convenzioni di codifica così strane, che potresti pensare che siano state scritte da alieni o qualcosa del genere. :)
AareP

2
Poiché la libreria standard è una specifica, incolpare il fornitore del compilatore per l'utilizzo di strane convenzioni di codifica interna. E inoltre, strane convenzioni di codifica = / = instabile o più facile spararsi nel piede. La maggior parte di quelle convenzioni di codifica (che parlano almeno della biblioteca MSVC, e probabilmente anche di altre) sono progettate per non interferire affatto con te, quindi puoi fare cose stupide e la biblioteca non ha bisogno di cure. Se si codifica al di fuori delle specifiche C ++, questa è una cosa diversa.
Patrick Niedzielski,

Si noti che un'implementazione STL tipica (specialmente se è associata a un compilatore specifico) non deve utilizzare Standard C ++ per implementare se stessa. Può benissimo utilizzare le conoscenze specifiche dell'implementazione al suo interno, al fine di fornire al codice le garanzie promesse dalla norma. Il tuo codice, tuttavia, dovrebbe attenersi solo a ciò che lo standard garantisce. Non è possibile apprendere le garanzie standard esaminando una particolare implementazione C ++ o STL.
Tanz87

Questa risposta è stata scritta un decennio fa. A quel tempo, è stato incredibile quanti sforzi fossero stati fatti per rendere il c ++ più stabile. Questo è stato uno dei motivi principali per cui c ++ 0x ha impiegato così tanto tempo per essere rilasciato come c ++ 11.
David Hammen,
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.