<div dir="ltr"><div class="gmail_default" style="font-family:monospace,monospace">The timing of all of this is unfortunate. I'm sorry that my participation in the discussion has been a bit "on-off" lately. But my recent contributions have involved studying things like the interaction of threading/concurrency aspects of signal handling, as well as investigating subtleties of various proposals for context variables, including my own. Those are not exactly low-hanging fruit, and I'm sorry about not being able to eat them.</div><div class="gmail_default" style="font-family:monospace,monospace"><br></div><div class="gmail_default" style="font-family:monospace,monospace">It is also unfortunate that I haven't written down this proposal ("versions" A-C) to anywhere near the amount of precision than I did for PEP 555, which wasn't 100% specified in the first draft either. For consideration, I just thought it's better to at least mention it, so that those that now have a good understanding of the issues involved could perhaps understand it. I can add more detail, but to make it a full proposal now, I would probably need to join forces with a coauthor (with a good understanding of these issues) to figure out missing parts. I could tune in later to finish the PEP and write docs in case the approach gets implemented.</div><div class="gmail_default" style="font-family:monospace,monospace"><br></div><div class="gmail_default" style="font-family:monospace,monospace">-- Koos</div><div class="gmail_default" style="font-family:monospace,monospace"><br></div><div class="gmail_default" style="font-family:monospace,monospace"><br></div><div class="gmail_extra"><div class="gmail_quote">On Wed, Jan 10, 2018 at 7:17 PM, Guido van Rossum <span dir="ltr"><<a href="mailto:guido@python.org" target="_blank">guido@python.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">I'm sorry, Koos, but based on your past contributions I am not interested in discussing this topic with you.<br></div><div class="gmail-HOEnZb"><div class="gmail-h5"><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jan 10, 2018 at 8:58 AM, Koos Zevenhoven <span dir="ltr"><<a href="mailto:k7hoven@gmail.com" target="_blank">k7hoven@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div style="font-family:monospace,monospace"><span style="font-family:arial,sans-serif">The status of PEP 555 is just a side track. Here, I took a step back compared to what went into PEP 555.</span></div><div style="font-family:monospace,monospace"><span style="font-family:arial,sans-serif"><br></span></div><div style="font-family:monospace,monospace"><span style="font-family:arial,sans-serif">—Koos</span></div><div><div class="gmail-m_4125955258575187494h5"><div style="font-family:monospace,monospace"><span style="font-family:arial,sans-serif"><br></span></div><div style="font-family:monospace,monospace"><span style="font-family:arial,sans-serif"><br></span></div><div style="font-family:monospace,monospace"><span style="font-family:arial,sans-serif">On Wed, Jan 10, 2018 at 6:21 PM, Guido van Rossum </span><span dir="ltr" style="font-family:arial,sans-serif"><<a href="mailto:guido@python.org" target="_blank">guido@python.org</a>></span><span style="font-family:arial,sans-serif"> wrote:</span><br></div></div></div><div class="gmail_extra"><div><div class="gmail-m_4125955258575187494h5"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">The current status of PEP 555 is "Withdrawn". I have no interest in considering it any more, so if you'd rather see a decision from me I'll be happy to change it to "Rejected".<br></div><div class="gmail_extra"><br><div class="gmail_quote"><div><div class="gmail-m_4125955258575187494m_5961169576523947482h5">On Tue, Jan 9, 2018 at 10:29 PM, Koos Zevenhoven <span dir="ltr"><<a href="mailto:k7hoven@gmail.com" target="_blank">k7hoven@gmail.com</a>></span> wrote:<br></div></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div class="gmail-m_4125955258575187494m_5961169576523947482h5"><div dir="auto"><span><div><div class="gmail_extra"><div class="gmail_quote">On Jan 10, 2018 07:17, "Yury Selivanov" <<a href="mailto:yselivanov.ml@gmail.com" target="_blank">yselivanov.ml@gmail.com</a>> wrote:<br type="attribution"><blockquote class="gmail-m_4125955258575187494m_5961169576523947482m_6504320668224131297m_-4000190248889614889quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div dir="auto">Wasn't PEP 555 rejected by Guido? What's the point of this post?</div><div dir="auto"></div></div></blockquote></div></div></div><div dir="auto"><br></div></span><div dir="auto">I sure hope there is a point. I don't think mentioning PEP 555 in the discussions should hurt. </div><div dir="auto"><br></div><div dir="auto">A typo in my post btw: should be "PEP 567 (+568 ?)" in the second paragraph of course.</div><div dir="auto"><br></div><div dir="auto">-- Koos (mobile)</div><div><div class="gmail-m_4125955258575187494m_5961169576523947482m_6504320668224131297h5"><div dir="auto"><br></div><div dir="auto"><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail-m_4125955258575187494m_5961169576523947482m_6504320668224131297m_-4000190248889614889quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div dir="auto"><br></div><div dir="auto">Yury</div><br><div class="gmail_quote"><div class="gmail-m_4125955258575187494m_5961169576523947482m_6504320668224131297m_-4000190248889614889elided-text"><div>On Wed, Jan 10, 2018 at 4:08 AM Koos Zevenhoven <<a href="mailto:k7hoven@gmail.com" target="_blank">k7hoven@gmail.com</a>> wrote:<br></div></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div class="gmail-m_4125955258575187494m_5961169576523947482m_6504320668224131297m_-4000190248889614889elided-text"><div><div><font face="arial, helvetica, sans-serif">Hi all,</font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">I feel like I should write some thoughts regarding the "context" discussion, related to the various PEPs. </font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">I like PEP 567 (+ 567 ?) better than PEP 550. However, besides providing cvar.set(), I'm not really sure about the gain compared to PEP 555 (which could easily have e.g. a dict-like interface to the context). I'm still not a big fan of "get"/"set" here, but the idea was indeed to provide those on top of a PEP 555 type thing too.</font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">"Tokens" in PEP 567, seems to resemble assignment context managers in PEP 555. However, they feel a bit messy to me, because they make it look like one could just set a variable and then revert the change at any point in time after that.</font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">PEP 555 is in fact a simplification of my previous sketch that had a .set(..) in it, but was somewhat different from PEP 550. The idea was to always explicitly define the scope of contextvar values. A context manager / with statement determined the scope of .set(..) operations inside the with statement:</font></div><div><br></div><div><font face="monospace, monospace"># Version A:</font></div><div><font face="monospace, monospace">cvar.set(1)</font></div><div><font face="monospace, monospace">with context_scope():</font></div><div><font face="monospace, monospace">    cvar.set(2)</font></div><div><font face="monospace, monospace">    </font></div><div><font face="monospace, monospace">    assert cvar.get() == 2</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">assert cvar.get() == 1</font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">Then I added the ability to define scopes for different variables separately:</font></div><div><br></div><div><font face="monospace, monospace"># Version B</font></div><div><font face="monospace, monospace">cvar1.set(1)</font></div><div><font face="monospace, monospace">cvar2.set(2)</font></div><div><font face="monospace, monospace">with context_scope(cvar1):</font></div><div><font face="monospace, monospace">    cvar1.set(11)</font></div><div><font face="monospace, monospace">    cvar2.set(22)<br></font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">assert cvar1.get() == 1</font></div><div><font face="monospace, monospace">assert cvar2.get() == 22</font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">However, in practice, most libraries would wrap __enter__, set and __exit__ into another context manager. So maybe one might want to allow something like </font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><div><font face="monospace, monospace"># Version C:</font></div><div><span style="font-family:monospace,monospace">assert cvar.get() == something</span><br></div><div><font face="monospace, monospace">with context_scope(cvar, 2):</font></div><div><span style="font-family:monospace,monospace">    assert cvar.get() == 2</span><br></div><div><font face="monospace, monospace"><br></font></div><div><span style="font-family:monospace,monospace">assert cvar.get() == something</span><br></div></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">But this then led to combining "__enter__" and ".set(..)" into Assignment.__enter__ -- and "__exit__" into Assignment.__exit__ like this:</font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif"># PEP 555 draft version:</font></div><div><font face="monospace, monospace">assert cvar.value == something</font></div><div><span style="font-family:monospace,monospace">with cvar.assign(1):</span><br></div><div><font face="monospace, monospace">    assert cvar.value == 1</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">assert cvar.value == something</font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><br></div><div>Anyway, given the schedule, I'm not really sure about the best thing to do here. In principle, something like in versions A, B and C above could be done (I hope the proposal was roughly self-explanatory based on earlier discussions). However, at this point, I'd probably need a lot of help to make that happen for 3.7.<br></div><div><div><br></div></div><div><font face="arial, helvetica, sans-serif">-- Koos</font></div><div><br></div>
</div></div>
______________________________<wbr>_________________<br>
Python-Dev mailing list<br>
<a href="mailto:Python-Dev@python.org" target="_blank">Python-Dev@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/python-dev" rel="noreferrer" target="_blank">https://mail.python.org/mailma<wbr>n/listinfo/python-dev</a><br>
Unsubscribe: <a href="https://mail.python.org/mailman/options/python-dev/yselivanov.ml%40gmail.com" rel="noreferrer" target="_blank">https://mail.python.org/mailma<wbr>n/options/python-dev/yselivano<wbr>v.ml%40gmail.com</a><br>
</blockquote></div></div>
</blockquote></div><br></div></div></div></div></div>
<br>______________________________<wbr>_________________<br>
Python-Dev mailing list<br>
<a href="mailto:Python-Dev@python.org" target="_blank">Python-Dev@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/python-dev" rel="noreferrer" target="_blank">https://mail.python.org/mailma<wbr>n/listinfo/python-dev</a><br></div></div>
Unsubscribe: <a href="https://mail.python.org/mailman/options/python-dev/guido%40python.org" rel="noreferrer" target="_blank">https://mail.python.org/mailma<wbr>n/options/python-dev/guido%40p<wbr>ython.org</a><br>
<br></blockquote></div><span class="gmail-m_4125955258575187494m_5961169576523947482HOEnZb"><font color="#888888"><br><br clear="all"><br>-- <br><div class="gmail-m_4125955258575187494m_5961169576523947482m_6504320668224131297gmail_signature">--Guido van Rossum (<a href="http://python.org/~guido" target="_blank">python.org/~guido</a>)</div>
</font></span></div>
</blockquote></div><br><br clear="all"><div><br></div></div></div><span class="gmail-m_4125955258575187494HOEnZb"><font color="#888888">-- <br><div class="gmail-m_4125955258575187494m_5961169576523947482gmail_signature">+ Koos Zevenhoven + <a href="http://twitter.com/k7hoven" target="_blank">http://twitter.com/k7hoven</a> +</div>
</font></span></div></div>
</blockquote></div><br><br clear="all"><br>-- <br><div class="gmail-m_4125955258575187494gmail_signature">--Guido van Rossum (<a href="http://python.org/~guido" target="_blank">python.org/~guido</a>)</div>
</div>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">+ Koos Zevenhoven + <a href="http://twitter.com/k7hoven" target="_blank">http://twitter.com/k7hoven</a> +</div>
</div></div>