Perché non ci sono nuove versioni di C? [chiuso]

2

Mentre molti altri linguaggi hanno uno sviluppo rapido, come Python, che è uscito con una versione completamente nuova negli ultimi anni, o per usare un framework, Rails, che si evolve super-veloce (Un libro che è stato pubblicato in all'inizio del 2011 è ormai obsoleto), sembra che non ci siano aggiornamenti per C. Perché è questo?

    
posta Billjk 01.04.2012 - 13:39
fonte

5 risposte

35

C'è stata una nuova revisione dello standard C solo pochi mesi fa (C11, ratificato l'8 dicembre 2011). Non sarei sorpreso se tutte le ultime versioni del compilatore GNU C modificassero leggermente la lingua accettata (aggiungi e rimuovi le estensioni della lingua, eventualmente aggiungi altre funzionalità di C11, eventualmente rimuovi il supporto per l'antica cruft). È vero, si tratta di cambiamenti lenti e incrementali piuttosto che di una rivoluzione, ma il linguaggio continua a maltrattare.

Ma a parte questo, C è piuttosto vecchio - ha avuto più del tempo necessario per essere raffinato. C come è ora è abbastanza vicino a ciò che il linguaggio deve essere: un super-semplice, ultra-portatile, a basso overhead, estremamente stabile [in un senso di compatibilità all'indietro] linguaggio di programmazione di sistema. Ci sono stati alcuni tentativi di re-inventare la programmazione del sistema (come D, Go, e il BitC più oscuro), ma tutti abbattono alcuni degli obiettivi di C - la più importante tra le versioni precedenti - e sono abbastanza diversi da fermare l'adozione scanzonata.

    
risposta data 01.04.2012 - 13:57
fonte
7

Un nuovo standard per il linguaggio di programmazione C (C 2011) è stato ratificato solo pochi mesi fa e ha alcune aggiunte significative rispetto alla versione precedente (come una libreria di threading incorporata).

Gli standard precedenti sono stati rilasciati nel 1999 e nel 1989.

Ci vuole un po 'di tempo per WG14 per concordare un nuovo standard per i seguenti motivi:

  • Ci sono oltre 40 anni di codice legacy in circolazione, e il comitato per gli standard è comprensibilmente riluttante a rompere qualunque di essi;

  • C'è una comunità molto vasta e variegata di implementatori e utenti C, e mantenere tutti felici non è facile;

  • C'è il desiderio di evitare la featuritis strisciante - la principale virtù di C è la sua relativa facilità di implementazione, e l'attaccamento a troppi doo-pad può rendere difficile l'implementazione (anzi, l'aggiunta di array a lunghezza variabile nel C99 ha causato qualche costernazione, e IINM ora sono facoltativi sotto lo standard del 2011);

Di 'quello che vuoi sulle virtù di Java e C #, ma almeno i manuali di riferimento C non richiedono un carrello elevatore da trasportare.

    
risposta data 02.04.2012 - 03:46
fonte
3

C'è un punto che manca nelle risposte attuali:

La stabilità è una virtù per qualsiasi linguaggio di programmazione della produzione. C è standardizzato non solo nella sua sintassi, ma anche nel suo ABI, che consente ad altri sistemi di chiamare facilmente le DLL compilate dal codice c. Prova a fare lo stesso con c ++: vedrai che dovrai implementare un'interfaccia per ogni compilatore esistente. Questo è possibile solo perché la lingua è molto stabile.

Questo è il motivo per cui lo sviluppo di nuove funzionalità di python 3 è stato congelato a un certo punto: per ottenere un'adozione seria è necessario avere stabilità, perché i negozi vorranno mantenere il codice sorgente esistente mentre aggiornano i loro toolchain.

A questo punto c è probabilmente una delle lingue più stabili là fuori, e questa è una buona cosa.

Modifica

Maggiori dettagli sulla mia opinione sulle lingue stabili: quando una determinata lingua è stabile E usata da alcuni progetti noti E mantenuta attivamente, sei abbastanza sicuro che l'implementazione è solida. Se vengono aggiunte continuamente nuove funzionalità, non si è sicuri di aver ricevuto abbastanza test semplicemente perché il tempo non ha permesso che si verificasse il QA. Il più delle volte gli ultimi cimici e bug vengono trovati dagli utenti che spingono un'implementazione ai suoi limiti usandola su più piattaforme e in diversi contesti. Il tempo consente ai manutentori di correggere i bug che vogliono correggere e documentare gli altri.

    
risposta data 02.04.2012 - 11:06
fonte
1

C è stato sviluppato pensando alla programmazione dei sistemi, un assemblatore più utilizzabile. Per questa applicazione C è ampiamente utilizzato in, ad es. programmazione integrata. Sono emerse molte nuove aree di applicazione per la programmazione, ad es. la rete. I nuovi linguaggi di programmazione sono emersi più adatti a queste nuove aree applicative, limitando la necessità di C di estendersi in queste aree. Per quanto riguarda i libri, i nuovi libri tendono ad emergere più presto nel ciclo di vita di una lingua, in quanto gli sviluppi e l'espansione della lingua sono più forti in quel momento. C è molto maturo, spiegando perché i libri di C non escono ogni settimana, solo per essere superati molto presto.

    
risposta data 01.04.2012 - 13:55
fonte
0

Direi che una delle caratteristiche più importanti di C è la sua semplicità. Qualsiasi "evoluzione" che aggiunge complessità non è un avanzamento. Ho appena scosso la testa quando ho sentito parlare di COBOL orientato agli oggetti: uno dei motivi per cui COBOL ha avuto tanto successo è perché i linguaggi OOP non offrono vantaggi convincenti nella sua nicchia (elaborazione di dati batch ad alta velocità). Allo stesso modo, non penso che aggiungere chiusure o rendere funzioni funzioni di prima classe migliorerà C. Meglio lasciarlo pulito e semplice, e usarlo come base per nuove lingue con nuove funzionalità. Quella strategia ha funzionato bene per C ++ e Objective-C, pur mantenendo il valore di C come un linguaggio piccolo e semplice.

    
risposta data 02.04.2012 - 19:51
fonte

Leggi altre domande sui tag