SyntaxとSyntactic Sugarの違いは何ですか?

背景

WikipediaのSyntactic Sugarのページには、次のように書かれています。

コンピュータサイエンスにおいて、構文解析とは、プログラミング言語において、読みやすく、表現しやすくするために設計された構文のことである。このような場合、より明確に、より簡潔に、あるいは一部の人が好むような別のスタイルで物事を表現することができる。

Syntactic SugarとSyntaxの違いがよくわからないのですが。

シュガー・バージョンは、より明確で簡潔で、定型的な表現を省くことができるという指摘は理解できます。しかし、あるレベルでは、すべてのシンタックスは、本質的に、コードがコンパイルされるものを抽象化するために行われているように感じます。

同じWikipediaのページより。

コンパイラや静的解析器などの言語処理系では、処理の前に、加糖された構文をより基本的な構文に展開することが多く、このプロセスは「デシュガー」と呼ばれることもある。

この文章にある「よくあること」を「いつもあること」と解釈してみると、次のようになります。もし、次の段階に移る前にコンパイラが構文を解析するかどうかだけの違いだとしたら、コンパイラの内部を知らないコーダーは、何がSugar'd Syntaxであるかどうかをどうやって知る(あるいは気にする)ことができるでしょうか。

このサイトにある非常に関連性の高い質問 "構文解析シュガーの厳密な定義 には 回答 があり、その冒頭に書かれています。

なぜなら、このフレーズはBSであり、本当のプログラマが本当のOSで本当のツールを使っていることを語る人たちが使う可能性が高いからです。

ということは、その言語を使うコーダーには大きな違いがないのでしょうか? おそらく、その違いはコンパイラを書く人にしかわからないのではないでしょうか?しかし、その言語を使うコーダーにとって、Syntactic Sugarのフードの下に何があるのかを知ることが役に立つ場合もあるのではないでしょうか? しかし、現実には、このテーマに関するあらゆる言説は、この用語を炎上する餌として使う傾向があるのではないでしょうか?

質問の核心

というわけで...質問の内容を簡単に説明します。

  • SyntaxとSyntactic Sugarの間に本当の違いはありますか?
  • それは誰にとって重要なのでしょうか?

思考のための余分な食品

トピックの矛盾に関するボーナス。

ウィキペディアのページでは、例が示されている。

例えば、C言語では a[i] という表記は *(a + i) のための構文上の糖分である。

一方、上記のリンク先の質問に対する別の回答では、同じ例について述べています。

ここで、a[i] == *(a + i)について考えてみましょう。配列が実質的に使われているCのプログラムを考えてみてください。

とまとめています。

[] 表記はこの抽象化を容易にするものである。これは構文上の糖分ではありません。

同じ例で逆の結論!?

主な違いは、構文とは、ある機能を公開するために言語で定義された文法であるということです。その機能を得ることができれば、同じことをすることができる他の文法は「砂糖」とみなされます。もちろん、2つの構文のうちどちらがシュガーなのか、特にどちらが先かは必ずしも明らかではないので、奇妙なシナリオが発生します。

実際には、構文解析シュガーは、使いやすくするために言語に追加された構文を説明するためにのみ使われます。例えば、infixの lhs + rhslhs.Add(rhs) にマップするように。私は、C'の配列インデックスを構文上の糖だと考えています。

エレガントなデザインは重複の量を制限する傾向があるので、これは重要です。構文解析を必要とする(あるいは少なくとも必要とする)ことは、設計が失敗していることの表れだと考える人もいます。

解説 (11)

構文とは、言語処理系が言語の構成要素の意味を理解するために使用するものです。構文糖とみなされる構成要素は、言語処理系で解釈される必要があり、したがって言語の構文の一部となります。

構文解析を言語の他の構文と区別するのは、その言語で書けるプログラムに影響を与えることなく、言語から構文解析を取り除くことが可能であることです。

より形式的な定義をすると、次のようになります。 構文解析とは、言語の構文の中で、その効果が他の構文で定義されている部分です。

これは決して構文解析を否定するものではなく、また構文解析を持つ言語を否定するものでもありません。なぜなら、構文解析を使うことで、より意図を理解しやすいプログラムになることが多いからです。

解説 (13)

この言葉の本来の意味合いが何であれ、今日では主に蔑称であり、ほとんどの場合、"just" または "only" 構文糖という言い方をされます。 これは、読めないやり方を好み、それを同僚に正当化するための簡潔な方法を求めるプログラマーにとって、かなり重要なことなのです。 今日、この言葉を主に使っている人たちによる、彼らの視点からの定義は、次のようなものでしょう。

gt; より広く適用可能な他の構文と冗長である構文。 本当に理解していないプログラマーを助けるための冗長な構文。 といったところでしょうか。

そのため、同じ構文要素に対して、2つの異なる結論が導き出されるのです。 配列記法に関するあなたの最初の例は、この用語の本来の肯定的な意味を使っており、Bart'の答えと似たようなものです。 あなたの2つ目の例は、蔑称としての構文糖であるという非難に対して配列記法を擁護しています。 言い換えれば、この構文は松葉杖ではなく、有用な抽象化であると主張しているのです。

解説 (6)