問題は、「なぜ新しい言語にはまだ式だけではなく文があるのか?」ということですよね?
プログラミング言語の設計は、さまざまな問題に対処します。
- 簡単な文法、
- 簡単な実装、
- 単純なセマンティクス
より理論的な設計目標の 1 つであり、
- 結果のコンパイル済みコードの実行速度
- コンパイル速度
- 実行中のプログラムのリソース消費
- 使いやすさ(読みやすいなど)
より実用的なものの中にあります...
これらの設計目標には明確な定義がありません。たとえば、短い文法は必ずしも最も構造がきれいな文法であるとは限らないため、どちらがより単純でしょうか?
(あなたの例を考慮して)
使いやすさやコードの読みやすさのために、言語設計者は、関数の結果の値 (または式) の前に「return」と書くことを要求する場合があります。これはリターンステートメントです。「return」を省略できる場合でも、それは暗示され、return ステートメントと見なすことができます (コードではそれほど明白ではありません)。それが式と見なされる場合、これは、Scheme などの置換セマンティクスを意味しますが、おそらく Python ではありません。構文上の観点から、'return' が必要なステートメントと式を区別することは理にかなっています。
機械語コード (私はあまりやっていないので、間違っているかもしれません) を見ると、ステートメントしかなく、式がないように思えます。
あなたの例:
ld r1, 5
ld r2, 5
add r3, r1, r2
ret r3
(明らかに、私はこれを作っています)
したがって、(von Neumann) CPU コアが実際にどのように動作するかという観点から考えるのが好きな人、またはそのようなターゲット アーキテクチャのコンパイルを簡素化したい人にとっては、ステートメントがその方法です。
特定の「悪」(非機能的) 割り当てステートメントもあります。終了ループを再帰なしで表現するために必要です。Dijkstra によると、ループは再帰よりも単純なセマンティクスを持っています (ref. EW Dijkstra、「A Discipline of Programming」1976)。ループは、再帰よりも高速に実行され、消費するストレージが少なくなります。あなたの言語が (Scheme のように) 末尾再帰を最適化している場合を除きます。