Я думаю, что термин « синтаксический сахар» указывает на альтернативный синтаксис для выражения той же базовой семантики.
Возьмем, например, язык программирования A, в котором есть операция, sum
которая может составлять список целых чисел произвольной длины. На этом языке мы можем написать выражения
sum []
sum [3, 4, 5, 1]
sum [2, 7]
результаты которого 0, 13 и 9 соответственно.
Теперь предположим, что мы понимаем, что 90% случаев мы используем sum
с двумя аргументами, и поэтому мы вводим, для удобства, новые обозначения
2 + 7
который является просто синтаксическим сахаром для sum [2, 7]
.
Теперь возьмите второй язык B, который не имеет никакой операции добавления. У нас могут быть такие операторы, как <
, =
что позволяет нам сравнивать числа, но нет возможности добавлять числа. В выпуске 2 языка B мы вводим новую операцию добавления с синтаксисом
2 + 7
который добавляет цифры как обычно.
В контексте языка A +
нотация является синтаксическим сахаром (это альтернативная, упрощенная и специальная нотация, которую можно использовать вместо sum [...]
нотации). Точно так же, как указывалось в ответе Хоа Лонг Тэма, в С нотация p->field
является синтаксическим сахаром для (*p).field
.
В контексте языка B +
нотация не является синтаксическим сахаром (это единственный допустимый синтаксис, используемый для операции суммирования). Точно так же, если бы C мог получить доступ к элементам структуры только через указатели и если бы не имел нотации (*p).field
, то нотация p->field
не была бы синтаксическим сахаром.
На мой взгляд, есть некоторые недопонимания относительно синтаксического сахара, которые можно проследить до путаницы в отношении семантики языка программирования. Рассуждения звучат так:
- Семантика программы - это то, что программа вычисляет.
- Выразительная сила языка программирования представлена вычислениями, которые можно описать на этом языке.
- Два языка программирования, которые могут описывать все вычислимые функции (как определено с помощью машин Тьюринга), имеют одинаковую выразительную силу ...
- ... и поэтому отличаются только синтаксисом.
- Следствие: любое расширение языка, полного по Тьюрингу, является только синтаксисом (синтаксическим сахаром), потому что вы не изменяете выразительную силу языка.
Приведенная выше аргументация приводит к общим утверждениям типа «синтаксический сахар не может быть определен должным образом», это «дело вкуса» или «каждая функция языка программирования, в конце концов, просто синтаксический сахар».
Я думаю, что главная проблема в приведенном выше аргументе заключается в том, что семантика не только в том, что может быть вычислено программой, но также и в том, как она вычисляется , то есть, какие примитивные конструкции используются и как они комбинируются.
Так, например, объекты не являются синтаксическим сахаром для базовых битовых конфигураций и битовых преобразований, они представляют собой конструкцию, которая позволяет моделировать данные и операции и описывать вычисления. Вычисления с объектами, методами, вызовами методов - это не то же самое, что вычисления с байтами, регистрами процессоров, адресами памяти (даже если два вычисления имеют одинаковый результат, и даже если второе вычисление используется для реализации первого).
Я сделал это описание немного длинным, но я думаю, что это важный аспект, который я не видел в других ответах.
Итог: синтаксический сахар - это альтернативный (возможно, более удобный) синтаксис для конструкции, которая уже существует в языке и уже имеет четко определенный синтаксис и семантику. Новый синтаксис (синтаксический сахар) отличается от существующего, но имеет ту же семантику . Если вы введете новую конструкцию в язык и новый синтаксис для нее, у вас не будет синтаксического сахара.