Benchmarking MicroPython
blog.miguelgrinberg.com
blog.miguelgrinberg.com
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.
Not sure whether they're supported on all the architectures, though.
Of course, you have to recompile your C every time it changes, which is annoying when you're used to the REPL workflow.
ARM or RISC-V?