At the end of the answer to “Can I do ++x and x++ in Python?” on this page: http://norvig.com/python-iaq.html, you can read:
[…] I’m with my fellow Dane, Bjarne Stroustrup, on this one. He said in The Design and Evolution of C++ “If I were to design a language from scratch, I would follow the Algol68 path and make every statement and declaration an expression that yields a value”.
Why?
1
As with any design, removing exceptional scenarios makes for a cleaner design – those branches interact with the rest of the design causing cascading impacts. By allowing all expressions (and statements) return a value (even if that value is unit
) allows the design to be simpler. Further, it allows you to get functionality for “free” without having to make specialized versions for statements versus expressions.
The main aims and principles of design of ALGOL 68:
- Completeness and clarity of description
- Orthogonal design,
- Security,
- Efficiency:
- Static mode checking
- Mode-independent parsing
- Independent compilation
- Loop optimization
- Representations – in minimal & larger character sets
0.1.2 Orthogonal design
The number of independent primitive concepts has been minimized in
order that the language be easy to describe, to learn, and to
implement. On the other hand, these concepts have been applied
“orthogonally” in order to maximize the expressive power of the
language while trying to avoid deleterious superfluities.
“ALGOL 68 was the first (and possibly one of the last) major language for which a full formal definition was made before it was implemented.” — C.H.A. Koster