On Wed, 08 Jul 2020 12:45:09 +1200 Greg Ewing email@example.com wrote:
On 8/07/20 5:30 am, Paul Sokolovsky wrote:
from __future__ import const
FOO: const = 1
match val: case FOO: # obviously matches by constant's value
This would make it *more* difficult to distinguish constants from assignment targets when looking at the match statement, unless you choose names which "look constant-like" somehow.
Sure, the talk was about good technical means to distinguish symbolic constants and variables for pattern matching. These technical means alone are no replacement for stylistic conventions which improve readability of the code. In this regard, it's no different than e.g. conventions of naming classes vs variables.
It also has the general problem of const-declarations in Python. Currently the compiler only has to analyse one module at a time; this would require it to also look inside imported modules to determine whether things were declared const.
Indeed, adding some "const" at the core language level would give many benefits, which certainly would be utilized by (even simple, as embedded in CPython) compilers. E.g. better inter-module scope resolution and optimization, an example of which you give. In terms of complexity, that would be minor comparing to e.g. introducing a parser with unbound memory usage, as done in https://www.python.org/dev/peps/pep-0617 .