java semantics java-8

¿Qué son los términos "azúcar", "azúcar" en el contexto de Java 8?



semantics java-8 (3)

"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 estar vinculada a una llamada concreta al método concreto.

Este documento sobre "Traducción de expresiones lambda" parece tener los detalles reales de lo que está sucediendo si le interesan detalles.

Una frase clave del documento:

El primer paso para traducir lambdas a bytecode es deslumbrar el cuerpo lambda en un método.

Oí hablar de ''azúcar'' y ''desgrase'' más a menudo en Java 8, ¿qué significan estos términos? son ellos conceptuales o sintácticos.

Algunos ejemplos:

Default iterated loop resugaring to java

Observaciones sobre azúcar sintáctico en compilación.


En general, "desugaring" en javac permite representar algunas características del lenguaje con otras ya existentes. Esto permite representarlos en el bytecode 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 característica del lenguaje nuevo sea solo azúcar sintáctica, como definitivamente no es el caso de lambdas y referencias de métodos. Hay más ejemplos de "desugaring" en el compilador:

  • para cada bucle se "desajusta" al estilo C para bucles
  • las aserciones son "desagrupadas" a una oración if
  • las clases internas se representan como una clase independiente

También puede investigar qué sucede con el interruptor de cadena, tipo borrado, ...


el azúcar , en la programación, generalmente se refiere a esas adiciones dulces , en su mayoría accesos directos, que hacen que algunos constructos sean más fáciles de escribir y de leer (siendo este último, en la práctica, el más importante durante el ciclo de vida de su programa).

Wikipedia tiene una definición de azúcar sintáctica, 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 en el compilador).

Aquí están algunos ejemplos :

  • los operadores de incremento de prefijo y prefijo ( i++ y ++i ). Su único propósito es evitar escribir una declaración adicional. Son azúcar puro
  • += , |= , &= , 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.
  • tipo de inferencia es el azúcar también.
  • La expresión Lambda, que viene con Java 8, es otro tipo de azúcar (esta no es solo sintáctica)

Se considera que Java es bastante poco conciso, especialmente en comparación con los lenguajes modernos. Es por eso que son bienvenidas las adiciones que ayudan a que el código sea más rápido de leer.

Para terminar, me gustaría señalar que si bien la falta de azúcar puede hacer que tu programa sea graso, un exceso de azúcar, lo que lleva a muchas formas distintas de escribir las mismas cosas, puede hacer que tu lenguaje sea menos fluido y tu programa 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á compuesta de adiciones (sobrecarga, por ejemplo).

Dicho esto, desugaring se refiere a

  • el proceso por el cual elimina todo lo que es redundante en un idioma
  • el proceso por el cual un procesador de código descubre qué hay detrás de un enunciado azucarado (esto puede, por ejemplo, implica una inferencia de tipo)