On Sat, Aug 8, 2020, 7:40 PM Steven D'Aprano > Any checker capable of doing bounds checks would know that the range of > possible ints is unbounded in both directions, and therefore an int does > not fit into the range [1:10**9]. Hence that will be a static bounds > check failure:
Just so you can win a bet at the library or the bar, the largest Python int is 2**(2**63)-1, and the smallest -2**(2**63). Ints have a struct member of bit_length that is a fixed size in C. :-) A computer capable of storing that number cannot, of course, fit in the physical universe. Let's be less vague: > > def step()->int[-3:4]: > pass > > n = 0: int[-100:101] > for i in range(N): > n += step() > > You and I can reason that after N steps, the maximum possible value of n > is 3*N, which could be greater than 100 unless N was provably less than 34, > which it may not be. And so the bounds check fails. > Yes, this is absolutely doable! I guess my argument in several posts is that this simple level of analysis of "possible bounds violation" is rarely useful (at least in a Python context[*]). Vastly more complicated formal proofs might be useful... But, y'know, way more work for tools. [*] For languages with bounded data types, this is more compelling. If I think a variable will *definitely* fit in a uint8, having the static tool tell me it might not is powerful.
_______________________________________________ Python-ideas mailing list -- python-ideas@python.org To unsubscribe send an email to python-ideas-le...@python.org https://mail.python.org/mailman3/lists/python-ideas.python.org/ Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/L5NCUMURE7ZA2UYNHSBLZG76BUYCHAEG/ Code of Conduct: http://python.org/psf/codeofconduct/