Innanzitutto, alcuni contesti (cose che la maggior parte di voi conosce comunque):
Ogni linguaggio di programmazione popolare ha una chiara evoluzione, il più delle volte segnato dalla sua versione: hai Java 5, 6, 7 ecc., PHP 5.1, 5.2, 5.3 ecc. Il rilascio di una nuova versione rende disponibili nuove API, corregge bug, aggiunge nuove funzionalità, nuovi framework ecc. Quindi, tutto sommato: va bene.
Ma che dire dei problemi della lingua (o della piattaforma)? Se e quando c'è qualcosa che non va in una lingua, gli sviluppatori o la evitano (se possono) o imparano a conviverci.
Ora, gli sviluppatori di queste 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 andranno via lentamente ma sicuramente. Beh, non proprio. Perché? Compatibilità all'indietro, ecco perché. Ma perché è così? Leggi di seguito 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 dei difetti, ma a quanto pare PHP è speciale. Dai un'occhiata a questo post sul blog . Ha un lungo elenco di cosiddetti difetti in PHP. Ora, non sono uno sviluppatore di PHP (non ancora), ma ho letto tutto e sono sicuro che un grosso pezzo di quella lista sono davvero problemi reali. (Non tutto, dal momento che è potenzialmente soggettivo).
Ora, se fossi uno dei ragazzi che sviluppano attivamente PHP, vorrei sicuramente risolvere questi problemi, uno per uno. Tuttavia, se lo faccio, il codice che si basa su un comportamento particolare della lingua si interromperà se viene eseguito sulla nuova versione. Riassumendo in 2 parole: retrocompatibilità.
Quello che non capisco è: perché dovrei mantenere PHP retrocompatibile? Se rilascerò PHP versione 8 con tutti questi problemi risolti, non posso semplicemente mettere un grande avvertimento dicendo: "Non eseguire il vecchio codice su questa versione!"?
C'è una cosa chiamata deprecazione. Lo abbiamo da anni e funziona. Nel contesto di PHP: guarda come in questi giorni le persone scoraggiano attivamente l'uso delle mysql_*
funzioni (e invece raccomandano mysqli_*
e DOP). La deprecazione funziona. Possiamo usarlo. Dovremmo usarlo. Se funziona per le funzioni, perché non dovrebbe funzionare per intere lingue?
Diciamo che io (lo sviluppatore di PHP) faccio questo:
- Lancia una nuova versione di PHP (diciamo 8) con tutti quei difetti corretti
- I nuovi progetti inizieranno a utilizzare quella versione, poiché è molto meglio, più chiaro, più sicuro, ecc.
- Tuttavia, al fine di non abbandonare le versioni precedenti di PHP, continuo a rilasciare aggiornamenti, correggere problemi di sicurezza, bug ecc. Questo ha senso per motivi che non sto elencando qui. È pratica comune: guarda ad esempio come Oracle ha continuato ad aggiornare la versione 5.1.x di MySQL, anche se si è concentrata principalmente sulla versione 5.5.x.
- Dopo circa 3 o 4 anni, smetto di aggiornare le vecchie versioni di PHP e le lascio morire. Questo va bene, dato che in quei 3 o 4 anni, la maggior parte dei progetti sarà comunque passata a PHP 8.
La mia domanda è: hanno senso tutti questi passaggi? Sarebbe così difficile da fare? Se può essere fatto, perché non lo è?
Sì, il rovescio della medaglia è che rompi la compatibilità all'indietro. Ma non è un prezzo che vale la pena pagare? Come vantaggio, in 3 o 4 anni avrai una lingua che ha il 90% dei suoi problemi risolti .... una lingua 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 in 3 o 4 anni le persone passeranno all'ipotetico PHP 8. Quello che intendevo dire era: in 3 o 4 anni, le persone useranno PHP 8 se iniziano un nuovo progetto.
mysql_*
stata deprecata in 5.5, per esempio), ma questo è irrilevante se la maggior parte dei provider di hosting là fuori ha una o due versioni precedenti (5.3 è - purtroppo - ancora ciò che la maggior parte di offerte dei fornitori).