Not sure whether they're supported on all the architectures, though.
ARM or RISC-V?
Integers are much faster than floats (floats involve a pointer and a heap allocation, integers are stored in a single word/object).
array.array is preferred over list for something like sort. Continuous memory representation of numbers versus general purpose list of objects.
MicroPython has on-board "JIT" (native/viper emitters), have to explicitly annotate the function. Should give 4-10x improvements for this case.
MicroPython has an on-board assembler, so one can write ARM assembly and get that to a function.
MicroPython also has support for C modules, which expose a Python API. Including dynamic native modules which can be installed at runtime with the package manager.
Bubblesort is O(n*2), which hurts for even a few thousand numbers. Actual sorting on a microcontroller should be done with an O(n log n) algorithm.
bubble.py 19.119
bubble_native.py 9.482
bubble_viper.py 0.904
heapsort_viper.py 0.02
So one can do 100x better without changing the algorithm, and 1000x by changing it :)
Microcontrollers are a constrained platform. They can be plenty fast - but it is much more important to use the tools available, compared to on PC. MicroPython has excellent tools available for this.
Of course, you have to recompile your C every time it changes, which is annoying when you're used to the REPL workflow.
drewcoo•19h ago