Repository navigation
0.1.0b1
Pre-releaseBeta 1 covers the frontend (parser, IR, diagnostics) and the AVR backend as a matched pair: everything below was found or fixed compiling and running real programs against AVR silicon or the AVR emulator, and it ships with a regression test. The ARM/RP2040/RP2350, PIC, and RISC-V backends stay alpha on purpose (see their own CHANGELOG entries), but every frontend fix here applies to them too, since the frontend is shared across all backends. pymcu-avr, pymcu-circuitpython and pymcu-micropython move to 0.1.0b1 alongside this package; pymcu-sdk moves in lockstep because the release gate requires the compiler, stdlib, and SDK to publish at the same version.
First frozen at 83f05312 (2026-09-15), re-frozen from main since.
The 2026-09-15 freeze waited on three silent wrong-code bugs found by an orphan-method probe sweep the night before: a nested @inline function silently lost writes it made to self (#427), a factory function threaded the wrong value into an unannotated field it returned (#429), and super().method() miscomputed when a subclass field's constructor argument was a constant (#430). That release was never published, and on 2026-09-25 the decision reversed: ship from main as it stands rather than from the frozen branch. This section is regenerated against main at 11e8bbe5 (2026-09-30), 1732 commits past v0.1.0a10. See State of the beta for what the differential oracle still knows is wrong and discloses on purpose, as opposed to bugs like the three above that were silent until found.
Update, 2026-10-05: status since the release
Known issues:
- The first, second and fifth (a reassigned top-level string,
f"{'literal'}", tuple results of two@inlinecalls in one expression) are fixed onmainand ship in 0.1.0b2. - The third and fourth (instances appended to a list, a
(bytearray, scalar)tuple) have fixes on a branch that is in review for 0.1.0b2. Until then, the workarounds in State of the beta apply.
Found after the release by installing it from PyPI on a clean machine, all fixed on main for 0.1.0b2:
pymcu install <library>keeps the first copy of the library index it ever downloaded. If it answers that a library is not in the index, run it again with--refresh.pymcu install dhtis refused with "it does not compile for atmega328p", because the check compiles a program that only imports the library, and an entry file with nothing but imports did not link. The library itself works in a real program;pymcu install dht --no-verifyinstalls it.pymcu new --stdlib nonelists apymcu-nonepackage that does not exist in the generated requirements and pyproject. Remove that line; the project needs no compatibility layer.
Hardware validation
Two unmodified Adafruit libraries ran on a real Arduino Uno with this release's compiler: adafruit_ssd1306 (with adafruit_framebuf and adafruit_bus_device, Game of Life and text on an SSD1306 OLED over I2C) and adafruit_hcsr04 (its own simpletest). Every other Adafruit library figure in this release is a compile and emulator measurement, not a run on a board. Details in State of the beta.
Known issues
Five silent wrong values found after the candidate was cut, none of them announced by the compiler and none yet covered by an oracle probe or a filed issue in this release. Each is measured, with a minimal reproducer, a workaround that works today, and its fix status, in State of the beta. All five land in beta 2.
- A top-level name reassigned from a string literal to a run-time-built string (
text = f"{n}") keeps printing the old literal. - An f-string whose only interpolated part is a string literal (
text = f"{'literal string'}") prints the compiler's internal string id instead of the text. list.append()loses the fields of the instances it appends: every element read back reports0whatever the constructor stored.- Unpacking a
(bytearray, scalar)tuple returned by a function never delivers the buffer; the scalar element lands. - Two calls to the same
@inlinefunction returning a tuple, indexed in one expression (pair(a)[0] + pair(b)[0]), read the second call's result twice.
Full notes: CHANGELOG and State of the beta.