On 2017-08-10 01:43 AM, Nick Coghlan wrote:
On 10 August 2017 at 01:49, Soni L. <fakedme...@gmail.com> wrote:
On 2017-08-09 11:54 AM, Nick Coghlan wrote:
Right, I was separating the original request to make "{x for x in
integers if 1000 <= x < 1000000}" work into the concrete proposal to
make exactly *that* syntax work (which I don't think is feasible), and
the slightly more general notion of offering a more math-like syntax
that allows finite sets to be built from infinite iterators by
defining a termination condition in addition to a filter condition.
Ok. A concrete proposal would give a read-only 'filter' argument to the
iterator somehow, which represents some form of simplified AST of the
condition.

So e.g. {x for x in integers if (lambda v: 1000 <= v < 1000000)(x)} would
never complete, but {x for x in integers if 1000 <= x < 1000000} would. (But
perhaps lambda objects should include an AST attribute... Having it for
normal functions would introduce too much overhead tho, and then it would no
longer be a simplified AST, but rather a complete python AST, which we don't
want.)
There have been a variety of different "thunking" proposals over the
years, but they've all foundered on the question of what the
*primitive* quoted form should look like, and how the thunks should
subsequently be executed.

For cases like this, where integration with Python's name resolution
mechanism isn't actually required, folks have ended up just using
strings, where the only downside is the fact that syntax highlighters
and other static analysers don't know that the contents are supposed
to be valid Python code. In a case like this, that might look like:

     {x for x in integers.build_set("1000 <= x < 1000000")}

As with regexes, the cost of dynamically parsing such strings can then
be amortised at runtime through the use of an appropriate caching
strategy.

I'm pretty sure I read somewhere that lambdas and generators share their syntax, and that syntax is already a subset of python syntax. Would it be too hard to expose that with a "simplified AST" API?


Cheers,
Nick.


_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to