Risposte:
sugar , in programmazione, si riferisce solitamente a quelle aggiunte dolci , per lo più scorciatoie, che rendono alcuni costrutti più facili da digitare e da leggere (questi ultimi sono, in pratica, i più importanti durante il ciclo di vita del programma).
Wikipedia ha una definizione di zucchero sintattico, ma dovresti notare che non tutto lo zucchero è, in sostanza, sintattico (non tutte le recenti aggiunte dolci erano solo modifiche al compilatore).
Ecco alcuni esempi:
i++
e ++i
). Il loro unico scopo è evitare di scrivere una dichiarazione aggiuntiva. Sono zucchero puro.+=
, |=
, &=
, Ecc sono fatti dello stesso tipo di zucchero.Java è ampiamente visto come non abbastanza conciso, soprattutto rispetto ai linguaggi moderni. Ecco perché quelle aggiunte che aiutano a rendere il codice più veloce da leggere sono benvenute.
Per finire, vorrei solo notare che mentre una mancanza di zucchero può rendere grasso il tuo programma, un eccesso di zucchero, che porta a molti modi diversi di scrivere le stesse cose, può rendere il tuo linguaggio nauseato e il tuo programma meno coerente e più difficile da mantenere . Un altro tipo di zucchero, lo zucchero API, è molto spesso una piaga che rende l'API più difficile da afferrare, specialmente quando è fatto di aggiunte (sovraccarico per esempio).
Detto questo, desugaring si riferisce a entrambi
"Desugaring" sembra avere un significato molto specifico in Java 8. Sembra essere un termine generico per esprimere i vari modi in cui un'espressione lambda può essere associata a una chiamata di metodo concreta.
Questo documento sulla "traduzione di espressioni lambda" sembra avere i dettagli reali di ciò che sta accadendo se sei interessato alle specifiche.
Una frase chiave dal documento:
Il primo passo per tradurre lambda in bytecode è desugaring il corpo lambda in un metodo.
In generale "desugaring" in javac permette di rappresentare alcune caratteristiche del linguaggio con altre preesistenti. Ciò consente di rappresentarli nel bytecode senza apportare grandi modifiche al formato del file di classe. Anche per questo motivo il back-end del compilatore è più stabile del front-end. Ciò non significa che ogni nuova funzionalità del linguaggio sia solo zucchero sintattico, come sicuramente non è il caso di lambda e riferimenti a metodi. Ci sono altri esempi di "desugaring" nel compilatore:
Puoi anche indagare su cosa succede con lo switch String, type erasure, ...