← index #11929PR #12285
Related · medium · value 1.509
QUERY · ISSUE

Don't allow `micropython.const`

openby jimmoopened 2023-07-04updated 2023-07-04
enhancement

This came up in https://github.com/micropython/micropython-lib/pull/693

It does seem reasonable to expect that A = micropython.const(1) should do the right thing, but it only works if you write A = const(1). I would argue that the former should raise an error or otherwise indicate that it's not doing anything useful.

We need to support from micropython import const because this facilitates:

  1. Running MicroPython code on CPython (where you have a micropython.py that provides a dummy const function).
  2. On builds with MICROPY_COMP_CONST disabled (e.g. when settrace is enabled) there will be no "magic" const, so it needs to be imported.

I think 791b65f4b261a23e427664f0b86ce32b60e33cb5 confirms the above.

Some ideas:

  1. We could change parse.c to turn const(...) into a no-op, rather than not handling it at all when MICROPY_COMP_CONST is disabled. (I never realised until today that we had this implicit requirement to use from micropython import const to be able to use const() in all builds, I have written a lot of .py files that don't do this!). Then micropython.const should no longer be the identity function (it should raise an error).

or

  1. Only if MICROPY_COMP_CONST is enabled, then micropython.const should no longer be the identity function (it should raise an error to indicate incorrect usage).

or

  1. Make the parser also handle micropython.const.

My preference would be #1. Instead of making micropython.const raise an error, it could also just be None (enough to make the import work), but then it might be a bit confusing to figure out why it's failing.

CANDIDATE · PULL REQUEST

py/profile.c: Remove the requirement to disable the const optimisation when using sys.settrace.

mergedby jimmoopened 2023-08-23updated 2023-08-30
py-core

The only reason that const had to be disabled was to make the test
output match CPython when const was involved. Instead, this commit
fixes the test to handle the lines where const is used.

Also:

  • make the sys_settrace_features.py test work against newer CPython versions
  • remove the special handling for MICROPY_PERSISTENT_CODE_SAVE in
    unix/mpconfigport.h, and make this automatic.
  • move the check for MICROPY_PERSISTENT_CODE_SAVE to where it's used
    (like we do for other similar checks) and add a comment explaining
    it.

cc @andrewleech -- this is to support maybe making it possible to enable sys.settrace by default (see #12280).

This work was funded through GitHub Sponsors.

Keyboard

j / / n
next pair
k / / p
previous pair
1 / / h
show query pane
2 / / l
show candidate pane
c
copy suggested comment
r
toggle reasoning
g i
go to index
?
show this help
esc
close overlays

press ? or esc to close

copied