efecto beaujolais


El efecto Beaujolais es el nombre dado a una clase de errores semánticos potenciales en el borrador de especificaciones de Jean Ichbiah para el lenguaje de programación Ada . El nombre surgió de la promesa de Ichbiah de regalar una botella de vino tinto Beaujolais nouveau a cualquiera que pudiera encontrar tal situación en el proyecto de norma lingüística. Al menos una botella fue premiada por tal descubrimiento. [1]

El efecto Beaujolais es una situación en la que agregar o eliminar una cláusula de un solo uso en un programa Ada cambia el comportamiento del programa compilado, un efecto muy indeseable en un lenguaje diseñado para la precisión semántica. Ichbiah tomó medidas para evitar el efecto cuando actualizó su borrador estándar para producir el estándar de idioma Ada 83 final. Las posibles situaciones restantes para producir el efecto se identificaron posteriormente mediante análisis matemático y se abordaron mediante el estándar de idioma Ada 95, lo que hace que cualquier situación que aún resulte en un efecto Beaujolais en Ada 83 sea una construcción ilegal en el estándar de idioma Ada 95 más reciente.

En principio, el Efecto Beaujolais puede ocurrir en otros lenguajes que usan espacios de nombres o paquetes , si la especificación del lenguaje no garantiza que sea ilegal.

El lenguaje de programación Ada permite dividir el código fuente en paquetes de biblioteca que contienen definiciones de datos y algoritmos que pueden ser utilizados por programas u otros paquetes de biblioteca. Las definiciones en un paquete se hacen visibles mediante una cláusula with . Por ejemplo, si la línea -

aparece en la parte superior del código fuente de un programa o paquete, entonces los datos, procedimientos y funciones declarados en el paquete de biblioteca Ada.Text_IO se pueden invocar dentro de ese código fuente. Esta es la implementación del concepto de espacio de nombres para Ada.

Por lo tanto, un programa que tiene la with Ada.Text_IO;directiva puede "ver" las definiciones allí, y para invocar el New_Lineprocedimiento en Ada.Text_IO se puede hacer referencia a él por su nombre,