Primeiro, algum contexto (coisas que a maioria de vocês conhece mesmo assim):
Toda linguagem de programação popular tem uma evolução clara, na maioria das vezes marcada por sua versão: você tem Java 5, 6, 7 etc., PHP 5.1, 5.2, 5.3 etc. O lançamento de uma nova versão disponibiliza novas APIs, corrige bugs, acrescenta novos recursos, novas estruturas etc. Então, em suma: é bom.
Mas e os problemas da linguagem (ou da plataforma)? Se e quando houver algo errado em um idioma, os desenvolvedores o evitam (se puderem) ou aprendem a conviver com ele.
Agora, os desenvolvedores dessas linguagens recebem muito feedback dos programadores que as utilizam. Portanto, faz sentido que, à medida que o tempo (e os números das versões) passem, os problemas nessas línguas vão desaparecer lenta mas seguramente. Bem, na verdade não. Por quê? Compatibilidade com versões anteriores, é por isso. Mas por que isso é assim? Leia abaixo para uma situação mais concreta.
A melhor maneira de explicar minha pergunta é usar o PHP como exemplo:
O PHP é amado e odiado por milhares de pessoas. Todas as línguas têm falhas, mas aparentemente o PHP é especial. Confira esta postagem no blog . Ele tem uma lista muito longa das chamadas falhas no PHP. Agora, não sou desenvolvedor de PHP (ainda não), mas li tudo e tenho certeza de que grande parte dessa lista é realmente um problema real. (Nem tudo, pois é potencialmente subjetivo).
Agora, se eu fosse um dos caras que desenvolve ativamente o PHP, certamente desejaria corrigir esses problemas, um por um. No entanto, se eu fizer isso, o código que depende de um comportamento específico do idioma será interrompido se for executado na nova versão. Resumindo em 2 palavras: compatibilidade com versões anteriores.
O que não entendo é: por que devo manter o PHP compatível com versões anteriores? Se eu lançar o PHP versão 8 com todos esses problemas corrigidos, não posso colocar um grande aviso dizendo: "Não execute código antigo nesta versão!"?
Há uma coisa chamada depreciação. Tivemos isso por anos e funciona. No contexto do PHP: veja como hoje em dia as pessoas desencorajam ativamente o uso das mysql_*
funções (e recomendam mysqli_*
e o DOP). A depreciação funciona. Nós podemos usá-lo. Nós devemos usá-lo. Se funciona para funções, por que não deveria funcionar para idiomas inteiros?
Digamos que eu (o desenvolvedor do PHP) faça o seguinte:
- Lance uma nova versão do PHP (digamos 8) com todas essas falhas corrigidas
- Novos projetos começarão a usar essa versão, pois é muito melhor, mais clara, mais segura etc.
- No entanto, para não abandonar as versões mais antigas do PHP, continuo lançando atualizações, corrigindo problemas de segurança, bugs etc. Isso faz sentido por razões que não estou listando aqui. É prática comum: veja, por exemplo, como a Oracle continuou atualizando a versão 5.1.x do MySQL, apesar de focada principalmente na versão 5.5.x.
- Após cerca de 3 ou 4 anos, paro de atualizar as versões antigas do PHP e as deixo morrer. Tudo bem, já que nesses 3 ou 4 anos, a maioria dos projetos mudou para o PHP 8 de qualquer maneira.
Minha pergunta é: todas essas etapas fazem sentido? Seria tão difícil de fazer? Se isso pode ser feito, por que não é feito?
Sim, a desvantagem é que você quebra a compatibilidade com versões anteriores. Mas esse preço não vale a pena? Como vantagem, em 3 ou 4 anos você terá uma linguagem com 90% dos problemas corrigidos ... uma linguagem muito mais agradável de se trabalhar. Seu nome garantirá sua popularidade.
EDIT : OK, então não me expressei corretamente quando disse que em 3 ou 4 anos as pessoas passarão para o hipotético PHP 8. O que eu quis dizer foi: em 3 ou 4 anos, as pessoas usarão o PHP 8 se iniciarem um novo projeto.
mysql_*
foi preterida na versão 5.5, por exemplo), mas isso é irrelevante se a maioria dos provedores de hospedagem existentes tiver uma ou duas versões anteriores (5.3 é - infelizmente - ainda o que a maioria das fornecedores).