
On Wed, Jan 19, 2022 at 6:31 PM Ben Rudiak-Gould <benrudiak@gmail.com> wrote:
My preferred syntax for a frozenset literal would be something like
{1, 2, 3}.freeze()
This requires no new syntax, and can be safely optimized at compile time (as far as I can tell).
set.freeze would be a new method of sets which could also be used at run time. It would return a new frozenset object and wouldn't alter the set object (so perhaps the name I suggested isn't ideal). Of course frozenset.freeze would just return itself.
+0.5. I'm not sure if CPython is currently optimizing this (I tried "spam".upper() and it didn't constant-fold), but it certainly could. Making this work would depend on several optimizations: 1) Recognize literal.method() as being potentially constant-foldable 2) Marke some methods as pure and therefore optimizable 3) Recognize that the (mutable) set to the left of .freeze() can be frozen just as "a in {1,2,3}" can But yes, in theory, this could work. There's no way that it can be semantically wrong, no way to shadow that method. ChrisA