historia - referencia del lenguaje python
Python 3.0 y la evolución del lenguaje (12)
¿No sería VB6 a VB.net el mayor ejemplo de esto? ¿O todos los consideran dos idiomas diferentes?
Python 3.0 rompe la compatibilidad con versiones anteriores y divide el idioma en dos rutas (al menos temporalmente). ¿Conoce algún otro idioma que pasó por una fase de diseño tan importante en su madurez?
Además, ¿cree que así es como deberían evolucionar los lenguajes de programación o el precio a pagar es demasiado alto?
C # y .NET Framework rompieron la compatibilidad entre las versiones 1.0 y 1.1, así como también entre 1.1 y 2.0. Ejecutar aplicaciones en diferentes versiones requiere tener instaladas múltiples versiones del tiempo de ejecución .NET.
Al menos incluyeron un asistente de actualización para actualizar el código fuente de una versión a la siguiente (funcionó para la mayoría de nuestro código).
Creo que hay muchos ejemplos de roturas de compatibilidad con versiones anteriores. Muchos de los idiomas que hicieron esto fueron pequeños o se extinguieron en el camino.
Muchos ejemplos de esto implican cambiar el nombre del idioma.
Algol 60 y Algol 68 eran tan diferentes que las reuniones en Algol 68 se dividieron en facciones. La facción Algol 68, la facción Pascal y la facción PL / I.
Wirth''s Pascal se transformó en Modula-3. Era muy similar a pascal - sintaxis y semántica muy similares - pero varias características nuevas. ¿Fue realmente un Pascal-2 sin compatibilidad retroactiva?
La cosa de Lisp to Scheme involucraba un cambio de nombre.
Si rastreas un escaneo del antiguo manual del lenguaje de programación B , verás que la evolución a C parece un poco incremental, no radical, pero rompió la compatibilidad.
Fortran existió en muchas formas. No estoy seguro, pero creo que Digital''s Fortran 90 para VAX / VMS no era completamente compatible con los antiguos programas Fortran IV.
Los juegos de rol pasaron por grandes cambios: creo que en realidad existen dos idiomas incompatibles llamados RPG.
Conclusión Creo que pensar y aprender son inevitables. Tienes tres respuestas para aprender las limitaciones de un idioma.
Inventa un nuevo lenguaje totalmente incompatible.
Incrementar chagne hasta que se vea obligado a inventar un nuevo idioma.
Rompe la compatibilidad de una manera controlada y reflexiva.
Creo que el # 1 y el # 2 son ambos una salida cobarde. Arrancar lo viejo es más fácil que tratar de preservarlo. Preservar cada característica matizada (no importa cuán mala) es mucho trabajo, algunas de ellas de poco o ningún valor.
Las empresas comerciales optan por enfoques cobardes en nombre de la "nueva comercialización" o "preservar a nuestros clientes existentes". Es por eso que las empresas de software comercial no son un hervidero de innovación.
Creo que solo los proyectos de código abierto pueden incluir la innovación en la forma en que la comunidad de Python está abordando este cambio.
El equipo de Python ha trabajado arduamente para que la falta de compatibilidad con versiones anteriores sea lo menos dolorosa posible, hasta el punto en que la versión 2.6 de Python fue creada pensando en un proceso de actualización sin complicaciones. Una vez que haya actualizado a 2.6 hay scripts que puede ejecutar que lo moverán a 3.0 sin problema.
El precio de insistir en la compatibilidad retroactiva casi absoluta es demasiado alto. Pase dos minutos programando en C ++ si quiere ver por qué.
En el mundo de Lisp ha sucedido algunas veces. por supuesto, el lenguaje es tan dinámico que, por lo general, la evolución simplemente está desaprobando parte de la biblioteca estándar y haciendo estándar otra parte.
también, Lua 4 a 5 fue bastante significativo; pero el núcleo del lenguaje es tan mínimo que incluso los cambios de gran alcance se documentan en un par de páginas.
Perl 6 también está pasando por este tipo de división en este momento. Los programas Perl 5 no se ejecutarán directamente en Perl 6, pero habrá un traductor para traducir el código a un formulario que pueda funcionar (no creo que pueda manejar el 100% de los casos).
Perl 6 incluso tiene su propio artículo en Wikipedia.
Primero, aquí hay un video sobre los cambios que Python realizará. En segundo lugar, los cambios no son buenos. En tercer lugar, por mi parte, me alegra la evolución y creo que es necesario.
El único lenguaje en el que puedo pensar para intentar un cambio a mitad de camino sería Perl. Por supuesto, Python está superando a Perl en esa línea de llegada en particular lanzando primero. Sin embargo, debe tenerse en cuenta que los cambios de Perl son mucho más extensos que los de Python y probablemente será más difícil desenredarlos.
(Hay un precio para la filosofía de Perl "Hay más de una forma de hacerlo").
Hay ejemplos como los cambios de una versión a otra de lenguajes basados en .NET (irónico, considerando que se suponía que el objetivo de .NET era la estabilidad API y la compatibilidad multiplataforma). Sin embargo, difícilmente llamaría a esos idiomas "maduros"; siempre ha sido más un enfoque de diseño en movimiento, construir el avión a medida que volamos.
O, como suelo pensar, la mayoría de los lenguajes provienen del "crecimiento orgánico" o de la "construcción modificada". Perl es el ejemplo perfecto de crecimiento orgánico; comenzó como una herramienta de procesamiento de texto elegante ala awk / sed y se convirtió en un lenguaje completo.
Python, por otro lado, está mucho más diseñado. Pase un poco de tiempo deambulando por los extensos libros blancos en su sitio web para ver el extenso debate que se desarrolla en cada cambio, aunque sea menor, en la sintaxis y la implementación del idioma.
La idea de realizar este tipo de cambios de gran alcance es algo nuevo para los lenguajes de programación porque los propios lenguajes de programación han cambiado por naturaleza. Solía ser que las metodologías de programación cambiaban solo cuando salía un nuevo procesador que tenía un nuevo conjunto de instrucciones. Los primeros lenguajes solían ser de tan bajo nivel y estaban casados con el lenguaje ensamblador (por ejemplo, C) o tan completamente dinámico en naturaleza (Forth, Lisp) que tal cambio a mitad de camino ni siquiera se consideraría como una consideración.
En cuanto a si los cambios son buenos o no, no estoy seguro. Tiendo a tener fe en las personas que guían el desarrollo de Python, sin embargo; los cambios en el lenguaje hasta ahora han sido en gran medida para mejor.
Creo que en los días venideros, Global Interpreter Lock resultará más central que los cambios de sintaxis. Aunque la nueva biblioteca multiprocesador podría aliviar la mayor parte de eso.
gcc regularmente cambia la forma en que maneja C ++ casi cada versión menor. Por supuesto, esto es más una consecuencia de que gcc apriete cómo siguen las reglas, y menos de que C ++ cambie.
La nueva versión del lenguaje de programación Ruby también romperá la compatibilidad.
Y piense en las bibliotecas que podría usar: gtk, Qt, etc. (también tienen versiones incompatibles).
Creo que la incompatibilidad es necesaria a veces (pero no demasiado a menudo) para apoyar el progreso.
Vale la pena mencionar que la compatibilidad con versiones anteriores genera costos propios. En algunos casos, es casi imposible desarrollar un idioma de la manera ideal si se requiere una compatibilidad hacia atrás del 100%. La implementación de Java de los genéricos (que borra la información de los tipos en tiempo de compilación para ser compatible con versiones anteriores) es un buen ejemplo de cómo la implementación de funciones con una compatibilidad hacia atrás del 100% puede dar como resultado una característica de idioma no óptima.
Hablando en términos generales, puede reducirse a una elección entre una nueva característica implementada deficientemente que es compatible con versiones anteriores o una nueva característica implementada muy bien que no lo es. En muchos casos, este último es una mejor opción, particularmente si hay herramientas que pueden traducir automáticamente código incompatible.