Primeiro, vou abordar algumas das outras respostas com um exemplo concreto. O loop baseado em intervalo do C ++ 11 (muito parecido com loops foreach em várias outras linguagens)
for (auto value : container) {
do_something_with(value);
}
é exatamente equivalente a (ou seja, uma versão açucarada de)
for (auto iterator = begin(container); iterator != end(container); ++iterator) {
do_something_with(*iterator);
}
Agora, apesar de não adicionar nenhuma nova sintaxe abstrata ou semântica à linguagem, ela tem utilidade real.
A primeira versão torna explícita a intenção (visitar cada item em um contêiner). Ele também proíbe comportamentos incomuns, como modificar o contêiner durante o percurso, ou avançar ainda mais o iterator
no corpo do loop, ou fazer com que as condições do loop fiquem sutilmente erradas. Isso evita possíveis fontes de erros e, ao fazê-lo, reduz a dificuldade de leitura e raciocínio sobre o código.
Por exemplo, um erro de um caractere na segunda versão:
for (auto iterator = begin(container); iterator <= end(container); ++iterator) {
do_something_with(*iterator);
}
gera um erro de um a um e o final e um comportamento indefinido.
Assim, a versão açucarada é útil precisamente porque é mais restritiva e, portanto, mais simples de confiar & entender.
Em segundo lugar, para a pergunta original:
Is there a real difference between Syntax and Syntactic Sugar?
Não, "açúcar sintático" é a sintaxe da linguagem (concreta), considerada "açúcar" porque não estende a sintaxe abstrata nem a funcionalidade principal da linguagem. Eu gosto da resposta de Matt Fenwick sobre isso.
Who does it matter to?
É importante para os usuários do idioma, tanto quanto qualquer outra sintaxe, e em que o açúcar é fornecido para apoiar (e, de alguma forma, abençoar) idiomas específicos.
Finalmente, na questão bônus
The [] notation facilitates this abstraction.
isso soa muito como a definição do açúcar sintático: ele suporta (e fornece a bênção dos autores da linguagem) usando ponteiros como matrizes. A forma p[i]
não é realmente mais restritiva que *(p+i)
, então a única diferença é a clara comunicação da intenção (e um pequeno ganho de legibilidade).