<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<p><br>
</p>
<br>
<div class="moz-cite-prefix">On 13/05/2018 19:19, Guido van Rossum
wrote:<br>
</div>
<blockquote type="cite"
cite="mid:CAP7+vJLhLZufLZW_4HCi7qnjReCMsRVtz14sq4MAYf+BT=Hqag@mail.gmail.com">
<div dir="ltr">
<div>As anyone still following the inline assignment discussion
knows, a problem with designing new syntax is that it's hard
to introduce new keywords into the language, since all the
nice words seem to be used as method names in popular
packages. (E.g. we can't use 'where' because there's <a
href="https://docs.scipy.org/doc/numpy-1.14.0/reference/generated/numpy.where.html"
moz-do-not-send="true">numpy.where</a>, and we can't use
'given' because it's used in <a
href="http://hypothesis.readthedocs.io/en/latest/quickstart.html"
moz-do-not-send="true">Hypothesis</a>.)</div>
<div><br>
</div>
<div>The idea I had (not for the first time :-) is that in many
syntactic positions we could just treat keywords as names, and
that would free up these keywords.</div>
<div><br>
</div>
<div>For example, we could allow keywords after 'def' and after
a period, and then the following would become legal:</div>
<div><br>
</div>
<div>class C:</div>
<div> def and(self, other):</div>
<div> return ...</div>
<div><br>
</div>
<div>a = C()</div>
<div>b = C()<br>
</div>
<div>print(a.and(b))</div>
<div><br>
</div>
<div>This does not create syntactic ambiguities because after
'def' and after a period the grammar *always* requires a NAME.</div>
<div><br>
</div>
<div>There are other positions where we could perhaps allow
this, e.g. in a decorator, immediately after '@' (the only
keyword that's *syntactically* legal here is 'not', though I'm
not sure it would ever be useful).</div>
<div><br>
</div>
<br>
</div>
</blockquote>
This would not prevent code breakage when a new keyword was added.
It would only reduce the amount of code broken. Although in my
unsubstantiated opinion not by very much; I suspect that most of the
time an identifier is used in a module, it is used at least once in
contexts where it would still be a SyntaxError if it were a keyword.<br>
Rob Cliffe<br>
</body>
</html>