J'entends parler plus souvent de «sucre» et «désucre» dans Java 8, que signifient ces termes? sont-ils conceptuels ou syntaxiques.
Quelques exemples:
Boucle itérée par défaut resugaring à java
Observations sur le sucre syntaxique en compilation.
le sucre , dans la programmation, fait généralement référence à ces sucrés ajouts , principalement des raccourcis, qui facilitent la saisie et la lecture de certaines constructions (ces dernières étant, en pratique, les plus importantes au cours du cycle de vie de votre programme).
Wikipedia a une définition du sucre syntaxique, mais vous devriez noter que tout le sucre n'est pas, par essence, syntaxique (tous les ajouts sucrés récents n'étaient pas que des changements de compilateur).
Voici quelques exemples :
i++
et++i
). Leur seul but est d'éviter d'écrire une déclaration supplémentaire. Ce sont du sucre pur.+=
, |=
,&=
, Etc. sont faits du même genre de sucre.Java est largement considéré comme n'étant pas assez concis, en particulier par rapport aux langages modernes. C'est pourquoi ces ajouts qui aident à rendre le code plus rapide à lire sont les bienvenus.
Pour terminer, je voudrais juste noter que si un manque de sucre peut rendre votre programme gras, un excès de sucre, conduisant à de nombreuses façons différentes d'écrire les mêmes choses, peut rendre votre langue mal à l'aise et votre programme moins cohérent et plus difficile à maintenir. . Un autre type de sucre, le sucre API, est le plus souvent un fléau qui rend l'API plus difficile à appréhender, surtout lorsqu'elle est faite d'ajouts (surcharge par exemple).
Cela étant dit, le désucrement fait référence soit à
"Desugaring" semble avoir une signification très spécifique en Java 8. Il semble être un terme fourre-tout pour exprimer les différentes manières dont une expression lambda peut être liée à un appel de méthode concret.
Ce document sur la "Traduction des expressions Lambda" semble avoir les vrais détails de ce qui se passe si vous êtes intéressé par des détails.
Une phrase clé du document:
la source
En général, "désugarer" en javac permet de représenter certaines fonctionnalités du langage avec des fonctionnalités préexistantes. Cela permet de les représenter dans le bytecode sans apporter de gros changements au format de fichier de classe. Aussi pour cette raison, le back-end du compilateur est plus stable que le front-end. Cela ne signifie pas que chaque nouvelle fonctionnalité de langage n'est que du sucre syntaxique, comme ce n'est certainement pas le cas des lambdas et des références de méthode. Il y a plus d'exemples de "désuétude" dans le compilateur:
Vous pouvez également étudier ce qui se passe avec le commutateur String, l'effacement de type, ...
la source