Zucker bezieht sich in der Programmierung normalerweise auf die süßen Zusätze, meistens Abkürzungen, die das Schreiben und Lesen einiger Konstrukte erleichtern (letzteres ist in der Praxis das wichtigste während des Lebenszyklus Ihres Programms).
Wikipedia hat eine Definition von syntaktischem Zucker, aber Sie sollten beachten, dass nicht jeder Zucker im Wesentlichen syntaktisch ist (nicht alle jüngsten süßen Ergänzungen waren nur Änderungen am Compiler).
Hier einige Beispiele:
- die Postfix- und Präfix-Inkrementoperatoren (
i++
und ++i
). Ihr einziger Zweck ist es, das Schreiben einer zusätzlichen Erklärung zu vermeiden. Sie sind reiner Zucker.
+=
, |=
, &=
Usw. sind von der gleichen Art von Zucker.
- Die implizite Umwandlung zwischen primitiven Typen und Objekten ist auch Zucker.
- Typinferenz ist auch Zucker.
- Der mit Java 8 gelieferte Lambda-Ausdruck ist eine andere Art von Zucker (dieser ist nicht nur syntaktisch ).
Java wird allgemein als nicht präzise genug angesehen, insbesondere im Vergleich zu modernen Sprachen. Aus diesem Grund sind Ergänzungen willkommen, die das Lesen des Codes beschleunigen.
Abschließend möchte ich nur darauf hinweisen, dass ein Mangel an Zucker Ihr Programm zwar fett machen kann, ein Überschuss an Zucker, der zu vielen verschiedenen Möglichkeiten führt, die gleichen Dinge zu schreiben, Ihre Sprache jedoch unruhig und Ihr Programm weniger kohärent und schwieriger zu pflegen machen kann . Eine andere Art von Zucker, API-Zucker, ist meistens eine Seuche, die es schwieriger macht, die API zu erfassen, insbesondere wenn sie aus Zusätzen besteht (z. B. Überladung).
Dies wird gesagt, Entzuckern bezieht sich entweder auf
- Der Prozess, mit dem Sie alles entfernen, was in einer Sprache redundant ist
- der Prozess, durch den ein Codeprozessor herausfindet, was hinter einer gezuckerten Anweisung steckt (dies kann beispielsweise eine Typinferenz beinhalten)
"Desugaring" scheint in Java 8 eine sehr spezifische Bedeutung zu haben. Es scheint ein Sammelbegriff zu sein, um die verschiedenen Arten auszudrücken, wie ein Lambda-Ausdruck an einen tatsächlichen konkreten Methodenaufruf gebunden sein kann.
Dieses Dokument über "Übersetzung von Lambda-Ausdrücken" scheint die wirklichen Details darüber zu enthalten, was passiert, wenn Sie an Einzelheiten interessiert sind.
Ein Schlüsselbegriff aus dem Dokument:
quelle
Im Allgemeinen ermöglicht "Desugaring" in Javac die Darstellung einiger Sprachfunktionen mit bereits vorhandenen. Auf diese Weise können sie im Bytecode dargestellt werden, ohne dass große Änderungen am Klassendateiformat vorgenommen werden müssen. Auch aus diesem Grund ist das Backend des Compilers stabiler als das Frontend. Dies bedeutet nicht, dass jedes neue Sprachmerkmal nur syntaktischer Zucker ist, wie dies bei Lambdas und Methodenreferenzen definitiv nicht der Fall ist. Es gibt weitere Beispiele für "Desugaring" im Compiler:
Sie können auch untersuchen, was mit dem String-Schalter passiert, Löschen eingeben, ...
quelle