4 ms·
It's unfortunate that Rust is so tied to cargo, and unfortunate that cargo insists on allowing multiple versions of a dependency. If you point out that cargo is
by vmchale 7y ago
It's unfortunate that Rust is so tied to cargo, and unfortunate that cargo insists on allowing multiple versions of a dependency. If you point out that cargo is poorly designed everyone just yells and you and says you don't understand.
- damnyou 7y agoOnly incompatible versions though — Rust dedups dependencies up to semver compatibility. I think that's the right balance. clap 3 is and should be treated as a totally different package from clap 2.
- vmchale 7y agoIt's not as bad as cabal back in the day. Nonetheless I have run into the diamond dependency problem in practice. Their solution is unprincipled and there's no way to turn off the default behavior.
- damnyou 7y agoDo you mean passing a struct from e.g. clap 2 into clap 3? Yeah that won't work directly, nor should it in my opinion. If it is frequently required, projects can and should provide a compatibility layer which does any necessary conversions.
- vmchale 7y ago> Do you mean passing a struct from e.g. clap 2 into clap 3? Yeah that won't work directly, nor should it in my opinion. I agree! But it shouldn't fail at compile time with a vexing error message. It should fail to resolve dependencies when calculating a build plan.
- damnyou 7y agoThat would seem to completely disallow any compatibility layers, which seems like a bad outcome. Unless you had some sort of solution in mind for that? I agree that the error message sucks, for what it's worth.
- nieksand 7y agoCan you elaborate on the design flaws that you perceive in Cargo?
- umanwizard 7y agoThe biggest flaw is that it makes taking new dependencies easy. I would prefer that it be hard, like in C++, so people think before doing it. The second biggest flaw is that it couples package management to a programming language, despite those being almost completely unrelated concerns.
- vmchale 7y ago> The second biggest flaw is that it couples package management to a programming language, despite those being almost completely unrelated concerns. Yes it's frustrating. I wish it was more decoupled, maybe with package standards like Haskell tried to do with Cabal. It makes it hard to use Rust as a drop-in replacement for C. I can add a few C files to a Haskell project without much problem, but most rust code goes via cargo.