
On 09/08/2019 12:50:14, Steven D'Aprano wrote:
On Thu, Aug 08, 2019 at 04:28:28PM -0700, Barry Warsaw wrote: I find it difficult to imagine a more meaningful distinction than that between syntax and semantics. The distinction between syntax and semantics can sometimes be blurred. Certainly in spoken languages. What about program code?
Should x/0 be a SyntaxError? It too is "disallowed", and we have to change our code. No, because x might be an instance of a class (extended numbers?) that allows division by zero.
Should None[x] be a SyntaxError? It too is "disallowed", and we have to change our code.
It's allowable syntax with defined runtime semantics: raise a TypeError if x exists, and a NameError if it isn't. Conceivably some programmer might find a use for it. But since it always raises an exception, it would probably be more helpful in the long run if it *were* a SyntaxError. It *isn't*, because (I assume) detecting this and similar idioms, e.g. {}[0] , would complicate the parser/compiler too much. Your examples show, I claim, that even in program code the distinction between syntax and semantics is not always obvious. I suggest the only watertight definition of a syntax error is something which raises an exception at compile time. Obviously this can depend not only on the code, but also on the compiler. Rob Cliffe