<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="gmail_extra"><div><div class="h5"><div class="gmail_quote">On Tue, May 15, 2018 at 8:41 PM, Steven D'Aprano <span dir="ltr"><<a href="mailto:steve@pearwood.info" target="_blank">steve@pearwood.info</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Inspired by Alex Brault's  post:<br>
<br>
<a href="https://mail.python.org/pipermail/python-ideas/2018-May/050750.html" rel="noreferrer" target="_blank">https://mail.python.org/piperm<wbr>ail/python-ideas/2018-May/<wbr>050750.html</a><br>
<br>
I'd like to suggest we copy C#'s idea of verbatim identifiers, but using <br>
a backslash rather than @ sign:<br>
<br>
    \name<br>
<br>
would allow "name" to be used as an identifier, even if it clashes with <br>
a keyword.</blockquote></div></div></div></div></blockquote><div><br></div><div><span style="color:rgb(0,0,0);font-family:verdana,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">I strongly disagree, but can't seem to get anyone</span><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0);display:inline">​ to bite.</div></div><div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0);display:inline"><br></div></div><div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0);display:inline">We want to be able to introduce a keyword that was formally a name, still</div></div><div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0);display:inline">allow </div><span style="color:rgb(0,0,0);font-family:verdana,sans-serif">it to be used as a name, still allow code that uses it as a keyword to</span></div><div><span style="color:rgb(0,0,0);font-family:verdana,sans-serif">interoperate<div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0);display:inline">​ ​</div></span><div class="gmail_default" style="font-family:verdana,sans-serif;color:rgb(0,0,0);display:inline">with code that uses it as a name</div><div class="gmail_default" style="font-family:verdana,sans-serif;color:rgb(0,0,0);display:inline">, without changing the language</div></div><div><div class="gmail_default" style="font-family:verdana,sans-serif;color:rgb(0,0,0);display:inline">or implementation </div><span style="color:rgb(0,0,0);font-family:verdana,sans-serif">too much.</span></div><div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0);display:inline"><br></div></div><div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">​Ideally, Python would still not allow the keyword to be used as a name and a</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">keyword in the same file??</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">The lexer could class the tokens as <i>keynames</i>, and the parser could use the</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">context of the first instance of each keyname to determine if it's a name or</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">keyword for the rest of that file. Projects that used the word as a name would</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">only be prevented from also using it as a keyword in the same file.</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">It's really then a question of whether users could elegantly and naturally</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">reference a name in another module without introducing the name to the</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">current module's namespace.</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">We only reference external names (as syntactic names) in import statements,</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">as properties after the dot operator, and as keyword arguments.</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">If code that used the word as a keyword was still allowed to use the word as</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">a name after the dot operator and as a keyword argument *in an invocation*,</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">it would only change the language in a subtle way.</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">If we could reference keynames in import statements, but not import the name,</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">so basically allow `from keyname import keyname as name`, but not allow</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">`import keyname`, we could still easily import things that used the keyname</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">as a name. This wouldn't change the language too dramatically either. </div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">Maybe I'm just being dumb, but it seems like three subtle changes to the</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">language would allow for everything we want to have, with only minor limitations</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">on the rare occasion that you want to use the new keyword with a library that is</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">also using the same keyword as a name.</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">I promise not to push this idea again, but would really appreciate someone taking</div></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">a couple of minutes to explain why it's not worth responding to. I'm not offended,</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">but would like to know what I'm doing wrong.</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">Thanks.</div></div><br></div></div>