119 votes

Que sont les "sucre", "desugar" termes dans le contexte de Java 8?

J'ai entendu parler de "cabane à sucre" et "desugaring" plus souvent dans Java 8, ce qui ne signifient ces termes ? sont-ils conceptuel ou syntaxique.

Quelques Exemple:

Par défaut itération de la boucle resugaring de java

Observations à propos de sucre syntaxique lors de la compilation.

146voto

dystroy Points 145126

le sucre, la programmation, se réfère généralement à ces doux ajouts, la plupart des raccourcis, qui font que certaines constructions plus facile à taper et à lire (ce dernier étant, dans la pratique, le plus important pendant le cycle de vie de votre programme).

Wikipedia a une définition de sucre syntaxique , mais vous devriez noter que pas tout le sucre est, en substance, syntaxiques (pas tout récent doux ajouts ont été juste compilateur changements).

Voici quelques exemples :

  • le suffixe et préfixe opérateurs d'incrémentation (i++ et ++i). Leur seul but est d'éviter d'écrire une déclaration supplémentaire. Ils sont pur sucre.
  • +=, |=, &=, etc. sont faites de la même sorte de sucre.
  • La conversion implicite entre les types primitifs et les objets de sucre est trop.
  • l'inférence de type est trop de sucre.
  • Expression Lambda, à venir avec Java 8, est un autre type de sucre (ce n'est pas seulement de syntaxe)

Java est largement considérée comme n'étant pas assez concis, surtout par rapport aux langues modernes. C'est pourquoi ces ajouts qui permettent de rendre le code plus rapide de lire sont les bienvenus.

Pour terminer, je voudrais simplement noter que tandis qu'un manque de sucre peut rendre votre programme de la graisse, un excès de sucre, conduisant à de nombreuses différentes façons d'écrire les mêmes choses, peut rendre votre langue mal au cœur et votre programme moins cohérente et plus difficile à maintenir. Un autre type de sucre, l'API sucre, est le plus souvent un fléau qui fait de l'API difficiles à saisir, surtout quand elle est faite d'ajouts (surcharge par exemple). Desugaring est le processus qui vous permet de supprimer tout ce qui est redondant.

20voto

Shorn Points 1304

"desugaring" semble avoir un sens très précis en Java 8. Il semble être un fourre-tout de terme pour exprimer les différents moyens d'une expression lambda peut être lié à une méthode concrète d'appel.

Ce document sur "la Traduction des Expressions Lambda" semble avoir les vrais détails de ce qui se passe si vous êtes intéressé dans les détails.

Une phrase-clé à partir du document:

La première étape de la traduction lambdas en bytecode est desugaring le corps de lambda dans une méthode.

7voto

Vicente Romero Points 295

En général "desugaring" javac permet de représenter certaines fonctionnalités de langage avec préexistants. Cela permet de les représenter dans le bytecode sans faire de grands changements à la classe de format de fichier. Aussi pour cette raison que le back-end du compilateur est plus stable que le front-end. Cela ne signifie pas que chaque nouvelle fonctionnalité est juste sucre syntaxique, n'est certainement pas le cas des lambdas et de la méthode de référence. Il y a plus d'exemples de "desugaring" dans le compilateur:

  • pour chaque boucles sont "délactosé" de type C pour les boucles
  • les affirmations sont "délactosé" pour un si la peine
  • les classes internes sont représentés en tant que classe autonome

Vous pouvez également enquêter sur ce qui se passe avec la Chaîne de l'interrupteur, type d'effacement,...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X