问题是,“为什么新语言仍然有语句而不是表达式?”,对吗?
编程语言设计解决不同的问题,例如
- 简单的语法,
- 简单的实现,
- 简单语义
属于更具理论性的设计目标和
- 生成的编译代码的执行速度
- 编译速度
- 执行程序的资源消耗
- 易于使用(例如易于阅读)
属于更实用的...
这些设计目标没有明确的定义,例如简短的语法不一定是结构最清晰的,那么哪个更简单?
(考虑到你的例子)
为了易于使用或代码可读性,语言设计者可能会要求您在函数产生的值(或者更确切地说是表达式)前面写“return”。这是一个回报声明。如果你可以省略“return”,它仍然是隐含的,它仍然可以被视为一个 return 语句(它在代码中不会那么明显)。如果将其视为表达式,则这意味着替换语义,例如 Scheme,但可能不是 Python。从句法的角度来看,区分需要“return”的语句和表达式是有意义的。
查看机器代码(我没有做太多,所以我可能错了)在我看来只有语句,没有表达式。
例如你的例子:
ld r1, 5
ld r2, 5
add r3, r1, r2
ret r3
(显然,我正在编造这个)
So for people that like to think in terms of how a (von Neumann) CPU core actually operates, or who want to simplify compilation for such a target architecture, statements are the way.
There is also the particular 'evil' (as in non-functional) assignment statement. It is required for expressing terminating loops without recursion. According to Dijkstra, loops have simpler semantics than recursion (ref. E.W. Dijkstra, "A Discipline of Programming" 1976). A loop executes faster and consumes less storage than recursion. Unless your language optimizes for tail recursion (like Scheme).