Skip to content

Rewrite outdated backend notes in lib.rs #481

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Apr 1, 2025

Conversation

Shnatsel
Copy link
Member

@Shnatsel Shnatsel commented Apr 1, 2025

This documentation historically was out of sync with the README. For example, the version currently live on docs.rs doesn't mention the non-conflicting zlib-ng feature at all, even though it's been around for years.

Even now the documentation contains outdated statements such as "The compression ratios and performance of each of these feature should be roughly comparable"; these days zlib-ng and zlib-rs are significantly faster than the alternatives.

To avoid similar issues going forward, limit the description to the two most relevant backends, and defer to the README that historically has been kept much more up to date for all the details.

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
Copy link
Member

@Byron Byron left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks a lot for making lib.rs more approachable!

There is only a word that I think should be taken care of, and a question on how some additional context could help dealing with common issues, something the original text might have done but more implicitly.

Thanks again.

src/lib.rs Outdated
//! This backend is the fastest, at the cost of some `unsafe` Rust code.
//!
//! Several backends implemented in C are also available.
//! These are useful in the rare cases where you were already using a C implementation
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wouldn't assume these cases are rare and turn this into a listing of facts about why the C implementation may be useful. Remove rare would already do it for me.

Further, I'd love it if there was a way to mention typical problem with using any backend. What comes to mind is duplicate symbols, and issue even Rust backends have today, maybe along with a hint at workarounds. The trigger for this paragraph was me thinking zlib-ng-compat was probably good for that, but I wasn't sure.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Based on the experiments I've run it seemed like zlib-rs did not result in duplicate symbol issues. So you should be able to use the zlib-rs backend without worrying about what other C zlib flavors may be present, and the whole "use C to avoid duplicate symbols" angle should no longer be a thing.

I am not 100% certain about that though, it's been a while. I'll double-check.

Bit-identical output and symbol conflicts are the only reasons to use C backends, right?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmm, I cannot actually reproduce the linker errors due to conflicting symbols with my old setup.

@folkertdev do you know if zlib-rs would cause symbol conflicts if you try to link it into a binary that also links zlib?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it would cause conflicts right now, but we've added trifectatechfoundation/zlib-rs#322 and will release a new version soon where there should not be any conflicts so long as export-symbols is disabled (which is the default)

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
@Byron
Copy link
Member

Byron commented Apr 1, 2025

Thanks a lot!

I think it's good enough to merge now, and we can consider improving it further once the new release of zlib-rs lands. It would be my goal to make certain compatibility features in zlib-rs very approachable even (or particularly) from flate2

@Byron Byron merged commit a79bfe4 into rust-lang:main Apr 1, 2025
14 checks passed
@folkertdev
Copy link
Contributor

It would be my goal to make certain compatibility features in zlib-rs very approachable even (or particularly) from flate2

Do you have anything specific in mind here? E.g. with the symbols it's straightforward I think: flate2 will just not enable the feature flag to export symbols, and if users do want that functionality, they can explicitly depend on libz-rs-sys with the feature enabled (and cargo using the union of features should make that work out). Is there anything else/that I'm missing?

@Shnatsel Shnatsel deleted the backend-docs branch April 1, 2025 09:35
@Byron
Copy link
Member

Byron commented Apr 1, 2025

That sounds like a plan - mitigating issues from the start is certainly better than writing about them in lib.rs :). Thanks, I only have vague ideas about this one, but it looks like we will sort this out with the zlib-rs update PR and using zlib-rs will be a very compatible (or the more compatible) choice then.

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.

None yet

3 participants