Perché i vecchi linguaggi di programmazione continuano a essere rivisti?

46

Questa domanda non è, "Perché le persone usano ancora i vecchi linguaggi di programmazione?" Lo capisco abbastanza bene. In effetti i due linguaggi di programmazione che conosco meglio sono C e Scheme, entrambi risalenti agli anni '70.

Recentemente stavo leggendo i cambiamenti in C99 e C11 contro C89 (che sembra essere ancora la versione più utilizzata di C in pratica e la versione che ho imparato da K & R). Guardandosi attorno, sembra che ogni linguaggio di programmazione in uso pesante ottenga una nuova specifica almeno una volta ogni dieci anni circa. Persino Fortran sta ancora ottenendo nuove revisioni, nonostante il fatto che la maggior parte delle persone lo stia utilizzando ancora FORTRAN 77.

Confrontalo con l'approccio di, diciamo, il sistema di composizione TeX. Nel 1989, con il rilascio di TeX 3.0, Donald Knuth dichiarò che TeX era completo di funzionalità e le versioni future conterrebbero solo correzioni di bug. Anche al di là di questo, ha dichiarato che alla sua morte, "tutti gli altri bug diventeranno funzionalità" e assolutamente non verranno fatti ulteriori aggiornamenti. Altri sono liberi di puntare TeX e lo hanno fatto, ma i sistemi risultanti vengono rinominati per indicare che sono diversi dal TeX ufficiale. Questo non perché Knuth pensa che TeX sia perfetto, ma perché comprende il valore di un sistema stabile e prevedibile che farà la stessa cosa in cinquant'anni che fa ora.

Perché la maggior parte dei progettisti di linguaggi di programmazione non segue lo stesso principio? Ovviamente, quando una lingua è relativamente nuova, ha senso che passerà attraverso un periodo di rapidi cambiamenti prima di sistemarsi. E nessuno può obiettare a modifiche minori che non fanno molto più che codificare pseudo-standard esistenti o correggere letture non volute. Ma quando una lingua sembra ancora aver bisogno di miglioramenti dopo dieci o venti anni, perché non limitarsi a biforcarla o ricominciare da capo, piuttosto che cercare di cambiare ciò che è già in uso? Se alcune persone vogliono davvero programmare in Fortran la programmazione orientata agli oggetti, perché non creare "Objective Fortran" a tale scopo e lasciare da solo Fortran?

Suppongo che si possa dire che, indipendentemente dalle revisioni future, C89 è già uno standard e nulla impedisce alle persone di continuare a usarlo. Questo è vero, ma le connotazioni hanno delle conseguenze. GCC, in modalità pedante, avverte della sintassi che è deprecata o ha un significato leggermente diverso in C99, il che significa che i programmatori C89 non possono ignorare del tutto il nuovo standard. Pertanto, è necessario apportare alcuni benefici in C99 sufficienti per imporre questo sovraccarico a tutti coloro che utilizzano la lingua.

Questa è una domanda reale, non un invito a discutere. Ovviamente ho un'opinione su questo, ma al momento sto solo cercando di capire perché questo non è solo il modo in cui le cose sono già fatte. Suppongo che la domanda sia:

What are the (real or perceived) advantages of updating a language standard, as opposed to creating a new language based on the old?

    
posta Ian 01.11.2012 - 18:24
fonte

5 risposte

14

Penso che la motivazione per i linguisti di rivedere le lingue esistenti sia di introdurre l'innovazione assicurando al contempo che la comunità degli sviluppatori target rimanga unita e adotti la nuova lingua: spostare una comunità esistente a una nuova revisione di una lingua esistente è più efficace della creazione una nuova comunità attorno a una nuova lingua. Ovviamente, questo costringe alcuni sviluppatori ad adottare il nuovo standard anche se stanno bene con quello vecchio: in una comunità a volte devi imporre determinate decisioni a una minoranza se vuoi mantenere la comunità insieme.

Inoltre, considera che un linguaggio generico cerca di servire quanti più programmatori è possibile, e spesso viene applicato in nuove aree per cui non è stato progettato. Quindi, anziché mirare alla semplicità e alla stabilità del design, la comunità può scegliere di incorporare nuove idee (anche da altre lingue) mentre la lingua si sposta verso nuove aree di applicazione. In uno scenario del genere, non puoi aspettarti di farlo bene al primo tentativo.

Ciò significa che le lingue possono subire profondi cambiamenti nel corso degli anni e l'ultima revisione potrebbe apparire molto diversa dalla prima. Il nome della lingua non viene mantenuto per motivi tecnici, ma perché la comunità di sviluppatori accetta di utilizzare un vecchio nome per una nuova lingua. Quindi il nome del linguaggio di programmazione identifica la comunità dei suoi utenti piuttosto che il linguaggio stesso.

IMO la motivazione per cui molti sviluppatori trovano questo accettabile (o persino desiderabile) è che una graduale transizione verso una lingua leggermente diversa è più facile e meno confusa di un salto in un linguaggio completamente nuovo che richiederebbe più tempo e sforzi per padroneggiare . Considera che ci sono un certo numero di sviluppatori che hanno una o due lingue preferite e non sono molto entusiasti di apprendere nuove lingue (radicalmente diverse). E anche per quelli che amano imparare cose nuove, l'apprendimento di un nuovo linguaggio di programmazione è sempre un'attività difficile e dispendiosa in termini di tempo.

Inoltre, può essere preferibile far parte di una grande comunità e di un ricco ecosistema piuttosto che di una comunità molto piccola che utilizza una lingua meno conosciuta. Quindi, quando la comunità decide di andare avanti, molti membri decidono di seguire per evitare l'isolamento.

Come commento a parte, penso che l'argomento di consentire l'evoluzione mantenendo la compatibilità con il codice legacy sia piuttosto debole: Java può chiamare codice C, Scala può facilmente integrarsi con il codice Java, C # può integrarsi con C ++. Ci sono molti esempi che mostrano che puoi facilmente interfacciarti con il codice legacy scritto in un'altra lingua senza la necessità di compatibilità con il codice sorgente.

Nota

Da alcune risposte e commenti mi sembra di capire che alcuni lettori hanno interpretato la domanda come "Perché i linguaggi di programmazione devono evolversi."

Penso che questo non sia il punto principale della domanda, dal momento che è ovvio che i linguaggi di programmazione devono evolversi e perché (nuovi requisiti, nuove idee). La domanda è piuttosto "Perché questa evoluzione deve avvenire all'interno di un linguaggio di programmazione invece di generare molti nuovi linguaggi?"

    
risposta data 09.11.2012 - 19:27
fonte
22

La compatibilità all'indietro è la tua risposta. Un determinato linguaggio, in particolare uno ampiamente usato come C, può avere un codice che è in funzione, inalterato, per decenni. Se c'è bisogno di manutenzione, aiuta ad avere compilatori che possono ancora prendere di mira quel tipo di piattaforma mentre sono in esecuzione su sistemi moderni per il lavoro di sviluppo. Le normalizzazioni e gli aggiornamenti delle versioni linguistiche aiutano a mantenere aggiornate le pratiche di programmazione fornendo al contempo un senso di familiarità per i programmatori veterani che potrebbero essere resistenti all'apprendimento di un'intera "nuova" lingua.

Tieni presente che molte delle lingue aggiornate sono meno aggiornate, ad esempio "hanno nuovi bit lucenti puntati". Le bestie di un tempo spesso si annidano ancora all'interno.

Per quanto riguarda Knuth, ricorda che è un accademico e che TeX è stato dimostrato solo corretto, non aggiornato.

    
risposta data 01.11.2012 - 18:28
fonte
5

Penso che la risposta ovvia sia che sono ancora in corso progressi nella progettazione del linguaggio e nell'architettura di sistema, e abbastanza persone si preoccupano delle lingue più vecchie che vogliono sfruttare le nuove tecniche (core multipli, threading o modelli di memoria migliori) che vengono imbullonati o infornati nello standard della lingua. Aiuta anche ad avere un "unico modo" per fare le cose (ad esempio, l'analisi XML, l'accesso al DB) su cui puoi contare per essere lì, indipendentemente dal compilatore o dalla piattaforma su cui ti trovi, invece che da alcune terze parti libreria che può o non può essere installata (e può o non può essere la versione richiesta, ecc.)

    
risposta data 01.11.2012 - 20:50
fonte
1

I concetti o gli obiettivi fondamentali su cui si basa un linguaggio generico non perdono rilevanza; tuttavia, cambiamenti minori nell'ambiente di lavoro o nell'hardware richiedono l'aggiunta di aggiornamenti o piccole funzionalità in una lingua.

Il modo in cui gli algoritmi sono espressi in una lingua non cambierà, anche se potrebbe essere necessario un supporto più pulito per i tipi a 64 bit, o più supporto standard per le espressioni regolari, o supporto più solido per i nuovi tipi di file system.

Ci sono alcuni casi in cui nuove funzionalità vengono aggiunte alle lingue esistenti, ma in molti casi queste modifiche equivalgono a semplificazioni di cose che le persone già stavano facendo nel modo più difficile. (Vedi C ++ usando le funzioni di ordine elevato invece dei puntatori e dei funtori di funzioni.)

    
risposta data 01.11.2012 - 20:53
fonte
-2

Questo è un po 'come una considerazione della lingua parlata.

Nel passato c'erano parole che non venivano utilizzate tutte le volte che sono ora (o usate per un significato diverso).

ad es. bello: in (molto vecchio) l'inglese ha il significato quasi inverso a quello che usiamo oggi, soprattutto quando viene usato per descrivere il carattere di qualcuno.

Cattivo: non molto tempo fa il male aveva solo un significato, ora può significare qualcosa che è "super-sorprendente" (è usato in modo feticcio (probabilmente non ho scritto "fesicous"!)

un altro nuovo sviluppo è il telefono cellulare "Testo parla" per le lingue scritte.

Non vedo personalmente perché un linguaggio di programmazione non si evolverà in modo simile, le parole e le funzioni hanno specificato significati / azioni, ed è necessario cambiare in modo da incorporare nuove idee, nuove metodologie.

Conosco persone che parlano lingue diverse e spesso suggeriscono che dopo il 3 ° o 4 ° diventa più facile impararne una nuova.

Non so se ci sono programmatori che hanno un'esperienza simile, non sarei sorpreso se ci fossero.

So che mi sento felice di programmare in JAVA (anche se mi sento felicemente parlando in inglese) Questo non significa che non possa comunicare in "inglese americano" o "inglese australiano" sebbene ci siano alcuni "trucchi" per attenzione. Proprio come passare da Java a PHP in Perl, i costrutti sono simili, ma ci sono pochi trucchi per catturarmi e farmi colpire la testa contro il muro.

Questo è diverso dal passaggio dall'inglese al francese o da Java a SAS. questi sono così diversi ci vuole un po 'di tempo per diventare abili a loro.

Comunque, questo è il mio punto di vista.

    
risposta data 30.11.2012 - 17:02
fonte

Leggi altre domande sui tag