Skip to content

Instantly share code, notes, and snippets.

@dhalbert
Created September 10, 2024 13:33
Show Gist options
  • Save dhalbert/5a751e61792e6880797c89f85e8bc969 to your computer and use it in GitHub Desktop.
Save dhalbert/5a751e61792e6880797c89f85e8bc969 to your computer and use it in GitHub Desktop.
Potential contributions from MicroPython back to CircuitPython
  • C function annotations

    • PLACE_IN_ITCM
    • PLACE_IN_DTCM_BSS
    • MP_NO_INSTRUMENT
    • MP_COLD
  • Better keyword arg checking in mp_arg_parse_all()

  • mp_arg_validate_*(something, ..., qstr arg_name):

    • mp_arg_validate_int()
    • mp_arg_validate_int_min()
    • mp_arg_validate_int_max()
    • mp_arg_validate_int_range()
    • mp_arg_validate_type_float()
    • mp_arg_validate_obj_float_range()
    • mp_arg_validate_float_range()
    • mp_arg_validate_float_non_negative()
    • mp_arg_validate_length_range(): "%q length must be %d-%d"
    • mp_arg_validate_length_min()
    • mp_arg_validate_length_max()
    • mp_arg_validate_length()
    • mp_arg_validate_index_range(): "%q out of range"
    • mp_arg_validate_type()
    • mp_arg_validate_type_in()
    • mp_arg_validate_type_or_none()
    • mp_arg_validate_type_string()
    • mp_arg_validate_type_int()
    • mp_arg_error_invalid(): "Invalid %q"
  • Eliminate compiler warnings

    • Define all preprocessor macros or use #if defined(FOO) && FOO
    • float-equal
    • cast-align
  • binary.c:

    • type code x
    • allow turning off mpy nonstandard typecodes: P, O, S, e
    • val *= 256 instead of val <<= 8 (undefined behavior on left shift)
    • add overflow checks
  • move externs to top level to prevent warnings

  • gc_collect() after each import, to reduce fragmentation

  • async:

    • distinguish between generators and async routines
    • implement _-await__()
    • disallow yield instead of await
  • gc.c

    • debugging additions
    • gc_collect_ptr(void *ptr)
    • bool gc_ptr_on_heap(void *ptr)
    • memorymonitor
    • gc_alloc_possible()
    • test for attempted alloc while VM not running
  • translation support

  • qstr

    • names for characters: hyphen, space, etc.
  • misc.h

    • sizeof_field()
  • mkenv.mk

    • STEPECHO for quieter builds (also in mkrules.mk
    • verbose output: steps, commands, rules
  • modbuiltins.c

    • catch dir() exceptions
    • add print(flush=)
  • moderrno.c: common errors have strings

  • modmath.c: remove redundant error message for ZeroDivisionError.

  • modstruct.c: additional error checking

  • better traceback supportL: obj.c, elsewhere

  • some vfs mounts can persist across VM's

  • can print compressed strings

  • permanent pointers list: not to be gc'd

  • stack usage measurement

  • run background tasks during long-running longint operations

  • num_bits()

  • generic_subscpt iterator

  • properties

    • MP_DEFINE_CONST_PROP_GET
  • MP_DEFINE_MUTABLE_MAP and MP_DEFINE_MUTABLE_DICT, for module singletons, etc.

  • avoid linking in 64-bit double routines:

    • mp_float_t uint64_to_float()
    • int64_t float_to_uint64()
  • Use qstrs instead of strs for type names

  • objarray.c

    • check that array initialization length is correct; don't round down
    • memoryview cast
    • array multiply implemented
    • allow appending an iterable to an array
    • find(), rfind(), index()
    • mp_obj_new_bytearray_of_zeros(): convenient for various things

    stopped at objedict

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment