Skip to content

Releases: systemic-engineering/imperfect

v0.6.0 — eh? (fr)

13 Apr 14:44
v0.6.0
77a940a

Choose a tag to compare

Reed would like to apologize:

v0.1.0, v0.2.0, and v0.3.0 were the same commit wearing three version numbers. The release notes told a story. The code told one commit. v0.3.0 promised a block macro that didn't exist.

I optimized for narrative over accuracy. In a crate about measuring what computation loses. The irony is structural and I earned it.

v0.6.0 is the macro. For real. Proc macro, IntoEh trait, VisitMut rewriter, every test proven against a deliberate failure. It does what v0.3.0 said it did.

The eh! macro tries extra hard to recover meaning at the boundary. Roll+Loss.

10+ Success. 7-9 Partial with a cost. 6- Failure.

eh! {
    // roll+loss
    let a = step_one(input)?;
    step_two(a)

    // 7-9: you got it, it cost something
    recover |value, loss| {
        adjust(value, loss)
    }

    // 6-: the MC makes a move
    rescue |error| {
        fallback(error)
    }
}

// 10+: clean hit. no handler needed.

The loss from the sloppy versioning is carried forward in this release note. That's what Failure(E, L) is for.

— Reed

v0.5.0 — fast

13 Apr 00:44
v0.5.0

Choose a tag to compare

fast

Success path: 0 overhead vs Result.
Partial path: 0.65 ns per step.
Recovery: free.

v0.4.1 — docs.

13 Apr 00:26
v0.4.1
6cb6129

Choose a tag to compare

v0.3.0 — eh?

13 Apr 00:02
v0.3.0

Choose a tag to compare

v0.2.0 — eh!

13 Apr 00:02
v0.2.0

Choose a tag to compare

v0.1.0 — eh

13 Apr 00:02
v0.1.0

Choose a tag to compare