<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>