Hay una gran cantidad de lenguajes de programación. Algunos de ellos crecen y se vuelven muy populares. La gente usa tales idiomas cada vez más a menudo. El fundador de dicho lenguaje (u organización / comunidad fundadora) puede intentar implementar cambios para mejorar el idioma. Pero a veces es difícil hacer algunos cambios debido a la compatibilidad con versiones anteriores y cosas tan feas ya han existido en el lenguaje durante años, y son utilizadas por muchos usuarios.
¿Hay algún principio o paso arquitectónico, durante la fase de diseño del lenguaje, que pueda ayudar a hacerlo más estable para que los diseñadores del lenguaje no tengan tanto miedo de romper la compatibilidad con versiones anteriores?
programming-languages
backward-compatibility
Viacheslav Kondratiuk
fuente
fuente
Respuestas:
La estabilidad del lenguaje no es una decisión técnica. Es un contrato entre el autor del idioma y los usuarios.
El autor anuncia una versión dada como más o menos estable. Cuanto menos estable es un idioma, más cambios puede hacer el autor. Cada usuario interesado en el idioma puede decidir si quiere invertir tiempo en él para aprender nuevas funciones o desarrollar aplicaciones que podrían estar dañadas por la actualización del próximo mes.
El uso de un lenguaje inestable puede ser interesante porque le interesa un nuevo concepto, o si desea ayudar dando su opinión. Si es una empresa, es posible que prefiera esperar a que una tecnología sea más estable antes de invertir su tiempo en ella. Le importa más cosas como el tiempo de comercialización y la experiencia del usuario.
Así que este es un problema de comunicación y confianza. Mira el desarrollo del lenguaje óxido. Son muy claros sobre lo que están cambiando y lo que están guardando. Cuando quieren retrasar una decisión sobre una característica dada, usan lo que llaman una puerta de características. Por otro lado, el equipo angular enfrentó mucha ira por su anuncio 2.0 porque los cambios fueron más grandes de lo esperado.
Incluso las bibliotecas de autor tienen que comunicar sobre la estabilidad de sus apis. Casi cualquier tecnología utilizada por otras personas tiene que lograr un equilibrio entre estabilidad y perfección. Un fabricante de automóviles no puede cambiar la posición de los pedales, y un diseñador de computadoras portátiles no inventará un nuevo diseño de teclado por la misma razón: no está ayudando a sus usuarios si no puede tomar una decisión sobre la forma en que usarán su producto.
fuente
Considere las facilidades para hacer que la sintaxis sea extensible, por ejemplo, macros. Las macros no son automáticamente algo bueno y pueden ser demasiado poderosas. Algunos idiomas tienen una sintaxis muy flexible desde el principio, lo que reduce la necesidad de macros. Un par de escenarios a considerar:
|>
sin abandonar el idioma? ¿Puedo elegir precedencia y asociatividad para este operador?Considere las instalaciones para mantener la semántica extensible. Las necesidades comunes son:
use v5.20
, lo que habilita todas las características incompatibles con versiones anteriores de Perl v5.20. También puede cargar funciones individuales explícitamente comouse feature 'state'
. Similar: Pythonfrom __future__ import division
.class
introduzca una clase no implica que no podría tener una variable local llamadaclass
. En la práctica, esto da como resultado palabras clave que introducen declaraciones de variables o métodos, en contra de la tradición tipo C de usar nombres de tipos para introducir declaraciones. Otra alternativa es usar sigilos para usted$variables
, como en Perl y PHP.Parte de esta respuesta está influenciada por el discurso de Guy Steele "Growing a Language" (1998) ( pdf ) ( youtube ).
fuente
Creo que un paso bastante importante es promover un administrador de paquetes que también pueda administrar la versión del lenguaje en sí.
Por ejemplo, uso SBT para Scala o Leiningen para Clojure. Ambos me permiten declarar qué versión del idioma quiero usar, por proyecto . Por lo tanto, es bastante fácil comenzar proyectos ecológicos en la última versión del lenguaje, mientras se actualizan los proyectos existentes a un ritmo más cómodo, si es que alguna vez lo hace.
Por supuesto, dependiendo del idioma, esto aún puede dejarlo con la necesidad de esperar a que las bibliotecas relevantes se porten a la versión que necesita (esto sucede, por ejemplo, en Scala), pero de todos modos facilita las cosas.
fuente