Primero, algo de contexto (cosas que la mayoría de ustedes saben de todos modos):
Cada lenguaje de programación popular tiene una evolución clara, la mayoría de las veces marcada por su versión: tiene Java 5, 6, 7, etc., PHP 5.1, 5.2, 5.3, etc. Al lanzar una nueva versión, hay nuevas API disponibles, corrige errores, agrega nuevas características, nuevos marcos, etc. En definitiva: es bueno.
Pero, ¿qué pasa con los problemas del idioma (o la plataforma)? Si hay algo mal en un idioma, los desarrolladores lo evitan (si pueden) o aprenden a vivir con él.
Ahora, los desarrolladores de esos lenguajes reciben muchos comentarios de los programadores que los usan. Por lo tanto, tiene sentido que, a medida que pasa el tiempo (y los números de versión), los problemas en esos idiomas desaparecerán lenta pero seguramente. Bueno en realidad no. ¿Por qué? Compatibilidad con versiones anteriores, por eso. Pero ¿por qué es esto así? Lea a continuación para una situación más concreta.
La mejor manera de explicar mi pregunta es usar PHP como ejemplo:
PHP es amado y odiado por miles de personas. Todos los lenguajes tienen fallas, pero aparentemente PHP es especial. Mira esta publicación de blog . Tiene una lista muy larga de los llamados defectos en PHP. Ahora, no soy un desarrollador de PHP (todavía no), pero leí todo y estoy seguro de que una gran parte de esa lista son problemas reales. (No todo, ya que es potencialmente subjetivo).
Ahora, si yo fuera uno de los tipos que desarrolla activamente PHP, seguramente querría solucionar esos problemas, uno por uno. Sin embargo, si hago eso, el código que se basa en un comportamiento particular del lenguaje se romperá si se ejecuta en la nueva versión. Resumiendo en 2 palabras: compatibilidad con versiones anteriores.
Lo que no entiendo es: ¿por qué debería mantener PHP compatible con versiones anteriores? Si lanzo la versión 8 de PHP con todos esos problemas solucionados, ¿no puedo simplemente poner una gran advertencia diciendo: "No ejecute código antiguo en esta versión"?
Hay una cosa llamada deprecación. Lo tuvimos durante años y funciona. En el contexto de PHP: mire cómo en estos días la gente desalienta activamente el uso de las mysql_*
funciones (y en su lugar recomienda mysqli_*
y PDO) La desaprobación funciona. Podemos usarlo. Deberíamos usarlo. Si funciona para funciones, ¿por qué no debería funcionar para idiomas completos?
Digamos que yo (el desarrollador de PHP) hago esto:
- Inicie una nueva versión de PHP (digamos 8) con todos esos defectos corregidos
- Los nuevos proyectos comenzarán a usar esa versión, ya que es mucho mejor, más clara, más segura, etc.
- Sin embargo, para no abandonar versiones anteriores de PHP, sigo lanzando actualizaciones para solucionar problemas de seguridad, errores, etc. Esto tiene sentido por razones que no estoy enumerando aquí. Es una práctica común: observe, por ejemplo, cómo Oracle siguió actualizando la versión 5.1.x de MySQL, aunque se centró principalmente en la versión 5.5.x.
- Después de unos 3 o 4 años, dejo de actualizar las versiones antiguas de PHP y las dejo morir. Esto está bien, ya que en esos 3 o 4 años, la mayoría de los proyectos habrán cambiado a PHP 8 de todos modos.
Mi pregunta es: ¿Todos estos pasos tienen sentido? ¿Sería tan difícil de hacer? Si se puede hacer, ¿por qué no se hace?
Sí, la desventaja es que rompes la compatibilidad con versiones anteriores. ¿Pero no vale la pena pagar ese precio? Como ventaja, en 3 o 4 años tendrás un idioma con el 90% de sus problemas solucionados ... un idioma mucho más agradable para trabajar. Su nombre asegurará su popularidad.
EDITAR : OK, así que no me expresé correctamente cuando dije que en 3 o 4 años la gente se mudaría al hipotético PHP 8. Lo que quise decir fue: en 3 o 4 años, la gente usará PHP 8 si comienzan un nuevo proyecto.
mysql_*
se desaprobó en 5.5, por ejemplo), pero eso es irrelevante si la mayoría de los proveedores de hosting tienen una o incluso dos versiones anteriores (5.3 es, desafortunadamente, lo que la mayoría de ofertas de proveedores).