Я слышал о "сахарировании" и "обессеривании" чаще в Java 8, что означают эти термины? являются ли они концептуальными или синтаксическими.
Пример:
Повторяемый цикл повторения по умолчанию в java
Наблюдения за синтаксическим сахаром в компиляции.
Я слышал о "сахарировании" и "обессеривании" чаще в Java 8, что означают эти термины? являются ли они концептуальными или синтаксическими.
Пример:
Повторяемый цикл повторения по умолчанию в java
Наблюдения за синтаксическим сахаром в компиляции.
"Сахар" в программировании обычно относится к тем приятным дополнениям, в основном ярлыкам, которые облегчают ввод и чтение некоторых конструкций (последние на практике являются наиболее важными в течение жизненного цикла вашей программы).
В Википедии есть определение синтаксического сахара, но вы должны заметить, что не весь сахар, по сути, является синтаксическим (не все недавние добавления сладостей были просто изменениями компилятора).
Вот несколько примеров:
i++
и ++i
). Их единственная цель - избежать написания дополнительного заявления. Они чистый сахар.+=
, |=
, &=
и т.д. сделаны из одного и того же вида сахара.Считается, что Java недостаточно лаконична, особенно по сравнению с современными языками. Вот почему приветствуются те дополнения, которые помогают ускорить чтение кода.
В заключение, я бы только отметил, что, хотя недостаток сахара может сделать вашу программу полной, избыток сахара, приводящий к множеству разных способов написания одних и тех же вещей, может сделать ваш язык проблемным, а вашу программу менее последовательной и трудной в обслуживании., Другой вид сахара, API-сахар, чаще всего является чумой, которая затрудняет понимание API, особенно когда он состоит из добавок (например, с перегрузкой).
При этом десагеринг относится либо к
"Desugaring", по-видимому, имеет очень специфическое значение в Java 8. Похоже, это универсальный термин для выражения различных способов, которыми лямбда-выражение может быть связано с реальным конкретным вызовом метода.
Этот документ "Перевод лямбда-выражений", кажется, содержит реальные детали того, что происходит, если вы заинтересованы в деталях.
Ключевая фраза из документа:
Первым шагом преобразования лямбда-выражений в байт-код является десагдация лямбда-тела в метод.
В целом "desugaring" в javac позволяет представить некоторые языковые функции с уже существующими. Это позволяет представить их в байт-коде, не внося больших изменений в формат файла класса. Кроме того, по этой причине контингер компилятора более стабилен, чем интерфейсный. Это не означает, что каждая новая языковая функция является просто синтаксическим сахаром, так как это определенно не относится к лямбдам и методам. В компиляторе есть больше примеров "desugaring":
Вы также можете исследовать, что происходит с переключателем String, стирать стили,...