Sugar , en programación, generalmente se refiere a esas adiciones dulces , en su mayoría accesos directos, que hacen que algunas construcciones sean más fáciles de escribir y leer (siendo estas últimas, en la práctica, las más importantes durante el ciclo de vida de su programa).
Wikipedia tiene una definición de azúcar sintáctico, pero debe tener en cuenta que no todo el azúcar es, en esencia, sintáctico (no todas las adiciones dulces recientes fueron solo cambios del compilador).
Aquí están algunos ejemplos :
- los operadores de incremento de sufijo y prefijo (
i++
y ++i
). Su único propósito es evitar escribir una declaración adicional. Son pura azúcar.
+=
, |=
, &=
, Etc., están hechos del mismo tipo de azúcar.
- La conversión implícita entre tipos primitivos y objetos también es azúcar.
- la inferencia de tipo también es azúcar.
- La expresión lambda, que viene con Java 8, es algún otro tipo de azúcar (este no es solo sintáctico )
En general, se considera que Java no es lo suficientemente conciso, especialmente en comparación con los lenguajes modernos. Es por eso que esas adiciones que ayudan a que el código sea más rápido de leer son bienvenidos.
Para terminar, solo señalaré que, si bien la falta de azúcar puede hacer que su programa sea más pesado, un exceso de azúcar, que lleva a muchas formas diferentes de escribir las mismas cosas, puede hacer que su lenguaje sea mareado y su programa sea menos coherente y más difícil de mantener. . Otro tipo de azúcar, el azúcar API, suele ser una plaga que hace que la API sea más difícil de comprender, especialmente cuando está hecha de adiciones (sobrecarga, por ejemplo).
Dicho esto, desugaring se refiere a
- el proceso mediante el cual elimina todo lo que es redundante en un idioma
- el proceso mediante el cual un procesador de código descubre qué hay detrás de una declaración azucarada (esto puede, por ejemplo, implicar la inferencia de tipos)
"Desugaring" parece tener un significado muy específico en Java 8. Parece ser un término general para expresar las diversas formas en que una expresión lambda puede vincularse a una llamada real a un método concreto.
Este documento sobre "Traducción de expresiones Lambda" parece tener los detalles reales de lo que está sucediendo si está interesado en detalles específicos.
Una frase clave del documento:
fuente
En general, "desugaring" en javac permite representar algunas características del lenguaje con otras preexistentes. Esto permite representarlos en el código de bytes sin realizar grandes cambios en el formato del archivo de clase. También por esta razón el back-end del compilador es más estable que el front-end. Esto no significa que cada nueva característica del lenguaje sea simplemente azúcar sintáctica, como definitivamente no es el caso de las lambdas y las referencias a métodos. Hay más ejemplos de "desugaring" en el compilador:
También puede investigar qué sucede con el cambio de cadena, borrado de tipo, ...
fuente