açúcar , na programação, geralmente se refere àquelas adições doces , principalmente atalhos, que tornam alguns constructos mais fáceis de digitar e ler (sendo este último, na prática, o mais importante durante o ciclo de vida de seu programa).
A Wikipedia tem uma definição de açúcar sintático, mas você deve notar que nem todo açúcar é, em essência, sintático (nem todas as adições recentes de doces foram apenas alterações do compilador).
Aqui estão alguns exemplos :
- os operadores de incremento postfix e prefix (
i++
e ++i
). Seu único propósito é evitar escrever uma declaração adicional. Eles são açúcar puro.
+=
, |=
, &=
, Etc, são feitos do mesmo tipo de açúcar.
- A conversão implícita entre tipos e objetos primitivos também é um açúcar.
- a inferência de tipo também é açúcar.
- A expressão lambda, que vem com o Java 8, é algum outro tipo de açúcar (este não é apenas sintático )
Java é amplamente visto como não sendo conciso o suficiente, especialmente em comparação com as linguagens modernas. É por isso que essas adições que ajudam a tornar o código mais rápido de ler são bem-vindas.
Para terminar, eu apenas observaria que, embora a falta de açúcar possa tornar seu programa gordo, um excesso de açúcar, levando a muitas maneiras diferentes de escrever as mesmas coisas, pode tornar sua linguagem enjoativa e seu programa menos coerente e mais difícil de manter . Outro tipo de açúcar, o açúcar API, é geralmente uma praga que torna o API mais difícil de entender, especialmente quando é feito de adições (sobrecarga, por exemplo).
Dito isto, desugaring refere-se a
- o processo pelo qual você remove tudo o que é redundante em um idioma
- o processo pelo qual um processador de código descobre o que está por trás de uma instrução açucarada (isso pode, por exemplo, envolver inferência de tipo)
"Desugaring" parece ter um significado muito específico em Java 8. Parece ser um termo abrangente para expressar as várias maneiras pelas quais uma expressão lambda pode ser associada a uma chamada de método concreto real.
Este documento sobre "Tradução de expressões lambda" parece ter os detalhes reais do que está acontecendo se você estiver interessado em detalhes.
Uma frase-chave do documento:
fonte
Em geral, "desugaring" em javac permite representar algumas características da linguagem com outras pré-existentes. Isso permite representá-los no bytecode sem fazer grandes mudanças no formato do arquivo de classe. Também por esta razão o back-end do compilador é mais estável do que o front-end. Isso não significa que cada novo recurso de linguagem seja apenas um açúcar sintático, como definitivamente não é o caso de lambdas e referências de método. Existem mais exemplos de "desugaring" no compilador:
Você também pode investigar o que acontece com a opção String, digite erasure, ...
fonte