Respostas:
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 :
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.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
"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:
O primeiro passo para traduzir lambdas em bytecode é transformar o corpo lambda em um método.
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, ...