Determine whether it's acceptable to remain pinned to a particular version of `syn`, or choose a different workaround
joshlf opened this issue · 2 comments
joshlf commented
To work around #1085 until we have a more complete solution, we plan to pin our dependency on syn
to a specific version (#1089). We need to remove this workaround and implement a more complete solution before releasing 0.8.
Progress
- Determine whether continuing to remain pinned to a particular version of syn will be problematic for 0.8; consider both dependency resolution and build-time performance
- An alternative: could we pin to a particular version only on certain Rust toolchains, but leave it unpinned for more recent toolchains? We would need to consider whether we run the risk of future MSRV bumps, or whether we can structure the dependency in such a way that it just always works. This would resolve the build-time performance issues for most users.
- If we decide not to continue pinning, consider this workaround:
- Declare that zerocopy-derive's MSRV is just whatever syn's is (TODO: How do we pin this in CI for testing?)
- Document that zerocopy's
derive
feature is exempt from our MSRV - After 0.8, work to resolve this - in the most optimistic scenario, we can return to having both crates have the same MSRV, but at least we won't be blocked on it
joshlf commented
Bad news. Investigated this locally and it looks like it can cause problems:
$ ls -R
downstream zerocopy-derive
./downstream:
Cargo.toml src
./downstream/src:
lib.rs
./zerocopy-derive:
Cargo.toml src
./zerocopy-derive/src:
lib.rs
$ cat downstream/Cargo.toml
[package]
name = "downstream"
version = "0.1.0"
edition = "2021"
[dependencies]
syn = "=2.0.54"
zerocopy-derive = { path = "../zerocopy-derive" }
$ cat zerocopy-derive/Cargo.toml
[package]
name = "zerocopy-derive"
version = "0.1.0"
edition = "2021"
[dependencies]
syn = "=2.0.55"
$ cd downstream && cargo check
Updating crates.io index
error: failed to select a version for `syn`.
... required by package `zerocopy-derive v0.1.0 (.../zerocopy-derive)`
... which satisfies path dependency `zerocopy-derive` of package `downstream v0.1.0 (.../downstream)`
versions that meet the requirements `=2.0.55` are: 2.0.55
all possible versions conflict with previously selected packages.
previously selected package `syn v2.0.54`
... which satisfies dependency `syn = "=2.0.54"` of package `downstream v0.1.0 (.../downstream)`
failed to select a version for `syn` which could resolve this conflict
joshlf commented
Discussed with @jswrenn and @djkoloski and decided that this isn't feasible.