On Wed, Aug 16, 2017 at 10:25 AM, Stefan Krah <ste...@bytereef.org> wrote: > On Wed, Aug 16, 2017 at 12:18:23AM -0700, Nathaniel Smith wrote: >> > Here's the PEP 550 version 2. >> >> Awesome! >> >> Some of the changes from v1 to v2 might be a bit confusing -- in >> particular the thing where ExecutionContext is now a stack of >> LocalContext objects instead of just being a mapping. So here's the >> big picture as I understand it: > > I'm still trying to digest this with very little time for it. It *is* > slightly confusing. > > > Perhaps it would be possible to name the data structures by their > functionality. > E.g. if ExecutionContext is a stack, use ExecutionStack? > > Or if the dynamic scope angle should be highlighted, perhaps ExecutionScope > or even DynamicScope.
I'm -1 on calling this thing a "scope" or "dynamic scope", as I think it will be even more confusing to Python users. When I think of "scoping" I usually think about Python name scopes -- locals, globals, nonlocals, etc. I'm afraid that adding another dimension to this vocabulary won't help anyone. "Context" is an established term for what PEP 550 tries to accomplish. It's used in multiple languages and runtimes, and while researching this topic I didn't see anybody confused with the concept on StackOverflow/etc. > This sounds like bikeshedding, but I find it difficult to have > ExecutionContext, > ContextItem, LocalContext in addition to the actual decimal.localcontext() > and PyDecContext. > > > For example, should PyDecContext inherit from ContextItem? I don't fully > understand. :-/ No, you wouldn't be able to extend ContextItem type. The way for decimal it so simply do the following: In Python: _current_ctx = sys.ContextItem('decimal context') # later when you set decimal context _current_ctx.set(DecimalContext) # whenever you need to get the current context dc = _current_ctx.get() In C: PyContextItem * _current_ctx = PyContext_NewItem("decimal context"); if (_current_ctx == NULL) { /* error */ } # later when you set decimal context PyDecContextObject *ctx; ... if (PyContext_SetItem(_current_ctx, (PyObject*)ctx)) { /* error */ } # whenever you need to get the current context PyDecContextObject *ctx = PyContext_GetItem(_current_ctx); if (ctx == NULL) { /* error */ } if (ctx == Py_None) { /* not initialized, nothing is there */ } We didn't really discuss C APIs at this point, and it's very likely that they will be adjusted, but the general idea should stay the same. All in all, the complexity of _decimal.c will only decrease with PEP 550, while getting better support for generators/async. Yury _______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/