On Tue, Mar 25, 2008 at 5:06 PM, Adam Olsen <[EMAIL PROTECTED]> wrote:
> On Tue, Mar 25, 2008 at 2:43 PM, Alexander Belopolsky
>
> <[EMAIL PROTECTED]> wrote:
>
> > On Tue, Mar 25, 2008 at 4:26 PM, Adam Olsen <[EMAIL PROTECTED]> wrote:
>
> >  >  It does not even have to be a frozenset.  A set works just as well,
>  >  >  never modified by the produced bytecode.
>  >
>  >  With the current implementation, precomputed constants must be
>  >  hashable because the compiler uses a dictionary lookup in order to
>  >  eliminate duplicates.  This is of course just an implementation
>  >  detail, but it would actually be hard to work around it.
>
>  Only builtin types with literal syntax may be deemed "constant"
>  anyway.  I fail to see how that's relevant to my frozenset vs set
>  comment.

I realized that right after I hit the "send" button, so my comment
about optimizing
frozenset({...}) was wrong.  With respect to frozenset vs set comment,
I understand
your proposal as transforming current

>>> dis(lambda: i in {1,2,3})
  1           0 LOAD_GLOBAL              0 (i)
              3 LOAD_CONST               0 (1)
              6 LOAD_CONST               1 (2)
              9 LOAD_CONST               2 (3)
             12 BUILD_SET                3
             15 COMPARE_OP               6 (in)
             18 RETURN_VALUE


to

  1           0 LOAD_GLOBAL              0 (i)
              3 LOAD_CONST               3 ({1, 2, 3})
              6 COMPARE_OP               6 (in)
              9 RETURN_VALUE

This will not work because {1, 2, 3} is not hashable, but it should be
possible to do

  1           0 LOAD_GLOBAL              0 (i)
              3 LOAD_CONST               3 (frozenset({1, 2, 3}))
              6 COMPARE_OP               6 (in)
              9 RETURN_VALUE


On the other hand, our dialog is increasingly off-topic.  My original
question was whether or not it will be a good idea to unify how set
and dict literals are processed.  Please comment on the following
options:

1. Do nothing: dicts are built incrementally, and sets in batch.
2. Implement batch processing for dict literals.
3. Implement incremental processing for sets.

My order of preference is 2, 1, 3.
_______________________________________________
Python-3000 mailing list
Python-3000@python.org
http://mail.python.org/mailman/listinfo/python-3000
Unsubscribe: 
http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com

Reply via email to