Antworten:
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:
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.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
"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:
Der erste Schritt bei der Übersetzung von Lambdas in Bytecode besteht darin, den Lambda-Körper in eine Methode umzuwandeln.
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, ...