<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto"><div>On Jun 7, 2015, at 03:20, s.krah <<a href="mailto:stefan@bytereef.org">stefan@bytereef.org</a>> wrote:</div><div><br></div><blockquote type="cite"><div><meta content="text/html;charset=UTF-8" http-equiv="Content-Type"><div style="font-size:10pt;font-family:Verdana,Arial,Helvetica,sans-serif;"><br><div class="zmail_extra"><div id="1"><br><b>Steven D'Aprano <<a href="mailto:steve@pearwood.info">steve@pearwood.info</a>></b> wrote:<br></div><blockquote style="border-left: 1px solid #0000FF;padding-left: 6px; margin: 0 0 0 5px">On Sat, Jun 06, 2015 at 11:40:55PM -0400, <a href="mailto:random832@fastmail.us" target="_blank">random832@fastmail.us</a> wrote: <br>>> Well you could always go with if aisb = a == b. <br> <br>> No, that is a terrible design and a source of many bugs in languages  <br>> that allow it. <br> <br>> if a = expr:  ... <br> <br>> Oops, I meant to compare a == expr, instead I assigned the result of the  <br>> expression to a. <br> <br></blockquote></div></div></div></blockquote><div><div style="font-size:10pt;font-family:Verdana,Arial,Helvetica,sans-serif;"><div class="zmail_extra"><blockquote style="border-left: 1px solid #0000FF;padding-left: 6px; margin: 0 0 0 5px">In C I've mistyped this perhaps twice</blockquote></div></div></div><div><br></div><div>Then you must be an amazing programmer. Or maybe you don't code in C very much. Look through the commit history of any major early C project and you'll find plenty of these errors. Dennis Ritchie made this mistake more than two times just in the Unix source.</div><div><br></div><div>Why do you think compilers added the warning? If this really were a non-issue that nobody ever faces in real life, no compiler vendor would have bothered to write a warning that will annoy people far more often than it helps. Or, if someone did just to satisfy some rare clumsy user, nobody else would have copied it.</div><div><br></div><div><div><div class="zmail_extra"><blockquote style="border-left-width: 1px; border-left-style: solid; border-left-color: rgb(0, 0, 255); padding-left: 6px; margin: 0px 0px 0px 5px;"><font face="Verdana, Arial, Helvetica, sans-serif"><span style="font-size: 10pt;">in which case you get a compiler</span></font><br></blockquote></div></div></div><div><div><div class="zmail_extra"><blockquote style="border-left-width: 1px; border-left-style: solid; border-left-color: rgb(0, 0, 255); padding-left: 6px; margin: 0px 0px 0px 5px;"><font face="Verdana, Arial, Helvetica, sans-serif"><span style="font-size: 10pt;">warning.</span></font><br></blockquote></div></div></div><div><br></div><div>Of course you also get the compiler warning when you use this feature _intentionally_, which means it's actually not usable syntax (unless you like to ignore warnings from the compiler, or pepper your code with pragmas). </div><div><br></div><div>Most compilers let you use some variant on the syntax, typically throwing meaningless extra parentheses around the assignment, to make the warning go away. But this implies that C chose the wrong syntax in the first place.</div><div><br></div><div>If I were designing a new C-like language, I'd allow declarations, but not assignments, in the if condition (with the variable only live inside the if statement's scope). That would handle what you want 90% of the time, and usually better than the current rule, and would have no chance of confusing an assignment with a comparison, so the compiler warning would go away.</div><div><br></div><div>But of course this is irrelevant to Python, which doesn't have variable declarations (or sub-function scopes). In Python, I think not allowing assignment in an if condition was the right choice.</div></body></html>