In primo luogo, un contesto (cose che la maggior parte di voi sa comunque):
Ogni linguaggio di programmazione popolare ha una chiara evoluzione, il più delle volte contrassegnato dalla sua versione: hai Java 5, 6, 7 ecc., PHP 5.1, 5.2, 5.3 ecc. Rilasciare una nuova versione rende disponibili nuove API, correzioni bug, aggiunge nuove funzionalità, nuovi framework ecc. Tutto sommato: va bene.
Ma per quanto riguarda i problemi del linguaggio (o della piattaforma)? Se e quando c'è qualcosa di sbagliato in una lingua, gli sviluppatori lo evitano (se possono) o imparano a conviverci.
Ora, gli sviluppatori di quelle lingue ricevono molti feedback dai programmatori che li usano. Quindi ha senso che, con il passare del tempo (e dei numeri di versione), i problemi in quelle lingue scompariranno lentamente ma sicuramente. Beh, non proprio. Perché? Retrocompatibilità, ecco perché. Ma perché è così? Leggi sotto per una situazione più concreta.
Il modo migliore in cui posso spiegare la mia domanda è usare PHP come esempio:
PHP è amato e odiato da migliaia di persone. Tutte le lingue hanno difetti, ma a quanto pare PHP è speciale. Dai un'occhiata a questo post del blog . Ha una lista molto lunga di cosiddetti difetti in PHP. Ora, non sono uno sviluppatore PHP (non ancora), ma ho letto tutto e sono sicuro che una grossa fetta di quella lista sono davvero problemi reali. (Non tutto, dal momento che è potenzialmente soggettivo).
Ora, se fossi uno dei ragazzi che sviluppa attivamente PHP, vorrei sicuramente risolvere quei problemi, uno per uno. Tuttavia, se lo faccio, il codice che si basa su un particolare comportamento della lingua si interromperà se viene eseguito sulla nuova versione. Riassumendo in due parole: retrocompatibilità.
Quello che non capisco è: perché dovrei mantenere il PHP retrocompatibile? Se rilascio la versione 8 di PHP con tutti i problemi risolti, non posso semplicemente mettere un grosso avvertimento dicendo: "Non eseguire il vecchio codice su questa versione!"?
C'è una cosa chiamata deprecazione. L'abbiamo avuto per anni e funziona. Nel contesto di PHP: guarda come in questi giorni le persone scoraggiano attivamente l'uso delle funzioni mysql_*
(e invece consiglia mysqli_*
e PDO). La deprecazione funziona. Possiamo usarlo. Dovremmo usarlo. Se funziona per funzioni, perché non dovrebbe funzionare per intere lingue?
Diciamo che io (lo sviluppatore di PHP) faccio questo:
- Avvia una nuova versione di PHP (diciamo 8) con tutti quei difetti corretti
- I nuovi progetti inizieranno a utilizzare quella versione, poiché è molto meglio, più chiara, più sicura ecc.
- Tuttavia, per non abbandonare le versioni precedenti di PHP, continuo a rilasciare aggiornamenti su di esso, risolvendo problemi di sicurezza, bug, ecc. Questo ha senso per motivi che non sto elencando qui. È prassi comune: guarda ad esempio a come Oracle ha aggiornato la versione 5.1.x di MySQL, anche se si è concentrata principalmente sulla versione 5.5.x.
- Dopo circa 3 o 4 anni, interrompo l'aggiornamento delle vecchie versioni di PHP e li lascio morire. Questo va bene, dato che in quei 3 o 4 anni, la maggior parte dei progetti saranno passati comunque a PHP 8.
La mia domanda è: Tutti questi passaggi hanno senso? Sarebbe così difficile da fare? Se può essere fatto, allora perché non è fatto?
Sì, il lato negativo è che si interrompe la compatibilità all'indietro. Ma non è un prezzo che vale la pena pagare? Al rialzo, in 3 o 4 anni avrai un linguaggio che ha risolto il 90% dei problemi ... un linguaggio molto più piacevole con cui lavorare. Il suo nome garantirà la sua popolarità.
EDIT : OK, quindi non mi sono espresso correttamente quando ho detto che tra 3 o 4 anni le persone passeranno all'ipotetico PHP 8. Quello che intendevo era: in 3 o 4 anni , le persone useranno PHP 8 se iniziano un nuovo progetto.