11 pages tagged with "rust"
Checking semver in the presence of doc(hidden) items
November 18, 2023 - 2882 words - 15 minscargo-semver-checks
v0.25 squashes nearly all bugs related to doc(hidden)
items — its most common source of false-positives. What does doc(hidden)
mean in Rust, and why was handling it correctly so hard?
Semver violations are common, better tooling is the answer
September 07, 2023 - 3270 words - 17 minsThis post is coauthored by Tomasz Nowak and Predrag Gruevski. It describes work the two of us did together with Bartosz Smolarczyk, Michał Staniewski, and Mieszko Grodzicki.
Anecdotally, cargo-semver-checks
is a helpful tool for preventing the semver violations that every so often cause ecosystem-wide pain.
This is why it earned a spot in the CI pipelines of key Rust crates like tokio
, and also why the cargo
team hopes to integrate it into cargo
itself.
While anedotal evidence is nice, we wanted to get concrete data across a large sample of real-world Rust code. read more
Breaking semver in Rust by adding a private type, or by adding an import
May 08, 2023 - 3718 words - 19 minsA few days ago, I started polls on Mastodon and Twitter whether adding a new private type, or an import, can ever be a major breaking change. The consensus was that this should be impossible.
I agree with that. It should be impossible.
I've discovered a way to cause a previously-public type or function to disappear from a crate's public API by making innocuous-seeming changes like adding a private type or adding an import, etc. It is not a hypothetical problem, either — I've found at least one real-world Rust project that has been affected by it.
read moreA definitive guide to sealed traits in Rust
April 05, 2023 - 2166 words - 11 minsFor the longest time, I thought that "sealed trait" in Rust was a singular concept implementable in one specific way. To prevent downstream crates from implementing your traits, you make the traits sealed — done, end of story. I was wrong! It turns out there are multiple ways to seal traits, forming a pleasant spectrum of options:
read moreRe-exporting an enum with a type alias is breaking, but not major
March 06, 2023 - 813 words - 5 minsWe've already explored some of the dark corners of Rust semantic versioning on this blog:
read moreSpeeding up Rust semver-checking by over 2000x
February 07, 2023 - 3926 words - 20 minsThis post describes work in progress: how cargo-semver-checks
will benefit from the upcoming query optimization API in the Trustfall query engine. Read on to learn how a modern linter works under the hood, and how ideas from the world of databases can improve its performance.
Moving and re-exporting a Rust type can be a major breaking change
January 31, 2023 - 1194 words - 6 minsSome Rust breaking changes don't require a major version
January 26, 2023 - 1848 words - 10 minsTurning a Rust struct into an enum is not always a major breaking change
January 24, 2023 - 1611 words - 9 minscargo-semver-checks today and in 2023
December 23, 2022 - 1946 words - 10 minsToward fearless cargo update
August 25, 2022 - 1866 words - 10 minsI recently built cargo-semver-checks
, a linter that ensures crates adhere to semantic versioning. This is why and how I built it.
Fearless development is a key theme throughout Rust. "If it compiles, it works", fearless concurrency, etc.
But there's one aspect of Rust (and nearly all other languages) that isn't entirely fearless yet: cargo update
, upgrading the versions of the project's dependencies.