v0.0.18

QiuYannnn/Local-File-Organizerv0.0.18May 29, 2026by samuelcolvin

AI Summary

Focuses on performance improvements for garbage collection, async runtime enhancements, and the addition of Dart/Flutter bindings.

Key Highlights

  • Bumped to Rust 1.95
  • Implemented 'trial deletion' GC for cycle collection
  • Added Dart/Flutter bindings
  • Added Context manager support
  • Implemented `open` builtin

New Features

  • Dart/Flutter bindings
  • Context manager support
  • open builtin implementation
  • Async external function exception propagation
  • Buffered open() methods

Full Release Notes

## What's Changed
* switch `pre-commit` -> `prek` by @samuelcolvin in https://github.com/pydantic/monty/pull/392
* gc: properly release references held by values in cycles by @davidhewitt in https://github.com/pydantic/monty/pull/399
* bump to Rust 1.95 by @davidhewitt in https://github.com/pydantic/monty/pull/401
* fix GC tracking for `datetime.tzinfo` by @rsr5 in https://github.com/pydantic/monty/pull/397
* clean up some dict view implementations by @davidhewitt in https://github.com/pydantic/monty/pull/402
* convert `py_repr` methods to take `&mut VM` by @davidhewitt in https://github.com/pydantic/monty/pull/403
* make `Task` have owning references to its coroutine / gather by @davidhewitt in https://github.com/pydantic/monty/pull/404
* fix hash equality for trivial types by @davidhewitt in https://github.com/pydantic/monty/pull/405
* further isolate unsafe code within `Heap` implementation by @davidhewitt in https://github.com/pydantic/monty/pull/406
* fix: parse errors must not leak ruff AST Debug formatting by @smigolsmigol in https://github.com/pydantic/monty/pull/390
* ci: fix lint failures from nightly clippy by @davidhewitt in https://github.com/pydantic/monty/pull/415
* Add `gc.collect()` function only with `test-hooks` feature by @davidhewitt in https://github.com/pydantic/monty/pull/398
* merge lifetimes in `VM` to a single lifetime by @davidhewitt in https://github.com/pydantic/monty/pull/416
* fix lifetimes from conflicting merges to `main` by @davidhewitt in https://github.com/pydantic/monty/pull/417
* fix `no active frame` panic on duplicate coroutine in `gather` by @rsr5 in https://github.com/pydantic/monty/pull/410
* cache the hash value of interned / static strings by @davidhewitt in https://github.com/pydantic/monty/pull/418
* fix: avoid panic when list.sort() key callback mutates the list by @SAY-5 in https://github.com/pydantic/monty/pull/413
* implement "trial deletion" GC to collect cycles by @davidhewitt in https://github.com/pydantic/monty/pull/407
* reject reusing an already-awaited external future via `gather` by @rsr5 in https://github.com/pydantic/monty/pull/420
* Add dart/flutter bindings by @runyaga in https://github.com/pydantic/monty/pull/414
* inline hash caching directly into relevant types by @davidhewitt in https://github.com/pydantic/monty/pull/422
* Fix async external function exception propagation by @vivekraghuram in https://github.com/pydantic/monty/pull/424
* note that `make install-py` is often necessary in CLAUDE.md by @davidhewitt in https://github.com/pydantic/monty/pull/426
* fix typo in CLAUDE.md by @davidhewitt in https://github.com/pydantic/monty/pull/427
* fix exception stack corruption in various `raise` cases by @davidhewitt in https://github.com/pydantic/monty/pull/428
* avoid unbounded recursion in two tuple traversal cases by @davidhewitt in https://github.com/pydantic/monty/pull/429
* move all `String` heap allocation to go through `allocate_string` helper by @davidhewitt in https://github.com/pydantic/monty/pull/430
* Bound AST depth produced by folding flat elif and bool-op chains by @dsp-ant in https://github.com/pydantic/monty/pull/437
* Pre-check requested size in bytes(int) constructor against resource l… by @dsp-ant in https://github.com/pydantic/monty/pull/435
* Clean up compiler - no longer emit dead code, simpler exception handlers, ensure jumps hit the same depth by @davidhewitt in https://github.com/pydantic/monty/pull/432
* agents: note that certain heap operations only need `&Heap` by @davidhewitt in https://github.com/pydantic/monty/pull/441
* refactor `GatherFuture` to be a state machine by @davidhewitt in https://github.com/pydantic/monty/pull/433
* fix panic on duplicate parameter names by @smigolsmigol in https://github.com/pydantic/monty/pull/382
* only swallow `AttributeError` in `getattr` by @davidhewitt in https://github.com/pydantic/monty/pull/442
* deduplicate source lines in tracebacks by @davidhewitt in https://github.com/pydantic/monty/pull/443
* fix more panics by @davidhewitt in https://github.com/pydantic/monty/pull/372
* fix further panics in integer operations by @davidhewitt in https://github.com/pydantic/monty/pull/444
* optimize operand load on bytecode loop by @davidhewitt in https://github.com/pydantic/monty/pull/446
* simplify jump calculation by @davidhewitt in https://github.com/pydantic/monty/pull/445
* refactor futures to have state machines like gather by @davidhewitt in https://github.com/pydantic/monty/pull/447
* Bound except-clause tuple matching by the recursion-depth limit by @dsp-ant in https://github.com/pydantic/monty/pull/439
* Bound container pre-allocation driven by iterator size hints by @dsp-ant in https://github.com/pydantic/monty/pull/434
* optimize cycle collector to have per-node work stack, not per-edge by @davidhewitt in https://github.com/pydantic/monty/pull/450
* move limits in the compiler to return syntax errors rather than panic by @davidhewitt in https://github.com/pydantic/monty/pull/449
* enforce JSON integers do not exceed Monty's BigInt limits by @davidhewitt in https://github.com/pydantic/monty/pull/431
* avoid unbounded recursion in `monty_to_py` by @davidhewitt in https://github.com/pydantic/monty/pull/453
* avoid UB in `Heap::dec_ref` by @davidhewitt in https://github.com/pydantic/monty/pull/451
* Implement `open` builtin, with limitations by @samuelcolvin in https://github.com/pydantic/monty/pull/456
* add more limitations by @samuelcolvin in https://github.com/pydantic/monty/pull/460
* clean up unsupported results in `evaluate_function` by @davidhewitt in https://github.com/pydantic/monty/pull/463
* avoid panic on string id 128..255 by @davidhewitt in https://github.com/pydantic/monty/pull/466
* collect cell vars from `for` / `while` / `if` control flow expressions by @davidhewitt in https://github.com/pydantic/monty/pull/465
* Context manager support by @samuelcolvin in https://github.com/pydantic/monty/pull/462
* Implement buffered `open()` methods by @samuelcolvin in https://github.com/pydantic/monty/pull/461
* move `value_to_i32` by @samuelcolvin in https://github.com/pydantic/monty/pull/468
* fix(repl): Add local/global store operation in comprehension expressions by @Embers-of-the-Fire in https://github.com/pydantic/monty/pull/297
* Ruff depth limit by @samuelcolvin in https://github.com/pydantic/monty/pull/391
* fix: name-based identity and equality for external function values by @mbeschastn0v in https://github.com/pydantic/monty/pull/458
* Cap comprehension generator count to prevent compiler stack overflow by @samuelcolvin in https://github.com/pydantic/monty/pull/470
* fix overlay append quota by @samuelcolvin in https://github.com/pydantic/monty/pull/472
* Fstring precision limits by @samuelcolvin in https://github.com/pydantic/monty/pull/474
* fix(file): do not serialize OpenFile buffer_meta cache across snapshots by @samuelcolvin in https://github.com/pydantic/monty/pull/471
* proc macro for function signature parsing by @samuelcolvin in https://github.com/pydantic/monty/pull/467
* apply `INT_MAX_STR_DIGITS` guard to natural JSON BigInt path by @samuelcolvin in https://github.com/pydantic/monty/pull/475
* prep v0.0.18 release by @samuelcolvin in https://github.com/pydantic/monty/pull/476

## New Contributors
* @smigolsmigol made their first contribution in https://github.com/pydantic/monty/pull/390
* @SAY-5 made their first contribution in https://github.com/pydantic/monty/pull/413
* @vivekraghuram made their first contribution in https://github.com/pydantic/monty/pull/424
* @dsp-ant made their first contribution in https://github.com/pydantic/monty/pull/437
* @mbeschastn0v made their first contribution in https://github.com/pydantic/monty/pull/458

**Full Changelog**: https://github.com/pydantic/monty/compare/v0.0.17...v0.0.18