Skip to content

Update rumba 1.0 - #4

Merged
mrexodia merged 2 commits into
LLVMParty:masterfrom
Garfield1002:update-rumba-1.0
Jul 28, 2026
Merged

mrexodia merged 2 commits into
LLVMParty:masterfrom
Garfield1002:update-rumba-1.0

Conversation

@Garfield1002

Copy link
Copy Markdown
Contributor

The most significant difference in the API change is that rumba no longer panics :)

Rumba published 1.0.0, so take it from the registry rather than pinning a
GitHub revision. The lockfile now records a checksum instead of a commit
hash, and binbit is the only remaining git dependency.

Two upstream changes reach us:

The solver returns Result. simplify_mba is now
fn(Expr, u8) -> Result<Expr, SolveError>; the four panics reachable from a
solve became error variants. simplify_mba_catching_panic goes away with
them, and with it the process-global panic-hook swap and the mutex that had
to serialize every island simplification to make that swap safe. A
SolveError means "Rumba declined this island", which lands on the same
copy-it-structurally path the caught panic used to.

Const payloads are plain u64. Expr::Const and Expr::Scale no longer wrap
VarInt, and the varint module is now pub(crate), so make_mask is gone from
the public API. Mask with & directly and keep a local mask_for_width.
MAX_RUMBA_VARIABLES counted island leaves at conversion time and abandoned
the island past 20. Rumba's own MAX_VARS counts a different thing: the
variable count of each linear sub-MBA after reduce_vars, checked inside
solve_linear. reduce_vars can shrink that count, so a 25-leaf island may
solve fine and we were refusing it; the nonlinear path can also grow it past
the leaf count when hide_in_var re-enters the solver. The cap was neither an
upper nor a lower bound on the limit it was mirroring, only a number that
happened to match.

It existed to dodge a panic, and the panic is gone: the same condition is now
Err(TooManyVariables), already routed to the copy-it-structurally path. Nor
was it guarding against blowup -- conversion is a linear walk over validated
in-memory nodes, and Rumba's limit fires before the 2^t truth table is built.

Both cap checks were also the only source of None in IslandConversion, so
removing them collapses the Option threaded through convert, convert_child,
children2, nary and named. boundary loses its Result too, having no fallible
path left.

Full CSV dataset suite (SMT_SERVER_RUMBA_FULL_DATASET=1) is unchanged.
@mrexodia
mrexodia merged commit 766bf13 into LLVMParty:master Jul 28, 2026
3 checks passed
@mrexodia

Copy link
Copy Markdown
Contributor

❤️

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants