News for hackers. Stuff that matters.
Re:Bevy 0.10: data oriented game engine built in Rust by trhr on Monday March 06, 2023 @01:37PM (#35045509)
Can you post on hn when the statement that reads like, "btw don't use this package if you're not cool with breaking changes every four days" leaves your docs? I pretty much immediately decided I wasn't cool with that, even though bevy looks like a really interesting project.
Re:Bevy 0.10: data oriented game engine built in Rust by sho_hn on Monday March 06, 2023 @01:42PM (#35045585)
It's sort of a cultural tradition in the Rust community to link to interesting or potentially more stable alternatives in READMEs.
Re:Bevy 0.10: data oriented game engine built in Rust by trhr on Monday March 06, 2023 @01:52PM (#35045769)
https://bevyengine.org/learn/book/introduction/

The problem is that "the prototyping phase" isn't a real phase, and this doesn't specify if breaking changes will occur between major, minor, or patch versions. It gives developers no guidance of what semver to track based on their own willingness to endure breaking changes. Using a library that still can't tell you that is just asking for trouble.

Re:Bevy 0.10: data oriented game engine built in Rust by IceSentry on Monday March 06, 2023 @02:07PM (#35046030)
Bevy and rust in general uses semver with a special case for 0.x releases. See https://doc.rust-lang.org/cargo/reference/semver.html

> Initial development releases starting with "0.y.z" can treat changes in "y" as a major release, and "z" as a minor release. "0.0.z" releases are always major changes. This is because Cargo uses the convention that only changes in the left-most non-zero component are considered incompatible.

The 0.x is essentially used as way to tell people to use at their own risk since it isn't considered stable yet. Using a library like this isn't asking for trouble if you know what you are dealing with and in the context of bevy it currently means a breaking change every 3 months with a blog post and migration guide.

Re:Bevy 0.10: data oriented game engine built in Rust by nicoburns on Monday March 06, 2023 @02:06PM (#35046001)
> this doesn't specify if breaking changes will occur between major, minor, or patch versions

The entire Rust ecosystem works on a model of breaking changes for 0.x version happening in minor but not patch releases. In fact, I'm struggling to think of any software project that intentionally releases breaking changes in patch releases.

Re:Bevy 0.10: data oriented game engine built in Rust by trhr on Monday March 06, 2023 @02:10PM (#35046067)
I'm not sure what we're arguing about. You say "don't break bugfix releases." I say "don't break bugfix releases." Docs don't say "we don't break bugfix releases." Instead, docs say "we break all the time don't trust us" instead of "pin to a minor version if you don't want to break all the time."

It's specifically not a question of knowing how the Rust community usually does these things, it's a question of "does this package conform to Rust's semver conventions, the official semver conventions, or something custom?"

The statement, _as its written in the docs_ implies "we do something custom." Whether that's true or not is irrelevant. I read it, interpreted it as a lack of governance or adherence to standards, and moved on. Any professional engineer would do the same.

Re:Bevy 0.10: data oriented game engine built in Rust by laundmo on Monday March 06, 2023 @02:25PM (#35046294)
you're right, that warning could be improved as it assumes knowledge of how the Rust community usually does these things.
Re:Bevy 0.10: data oriented game engine built in Rust by IceSentry on Monday March 06, 2023 @02:49PM (#35046640)
No, the statement says that there will be frequent breaking APIs, it doesn't make any claim about release strategy. Releasing breaking changes on every 0.minor release perfectly fits in this definition.

Making a quick judgement based on an assumption that's provably wrong isn't really the definition of a professional engineer.

Re:Bevy 0.10: data oriented game engine built in Rust by trhr on Tuesday March 07, 2023 @09:48AM (#35055919)
Tell me you've never had a job without telling me you've never had a job. Not having a release strategy at all is insta-trashcan at any enterprise I've ever worked at.
Re:Bevy 0.10: data oriented game engine built in Rust by cmeacham98 on Monday March 06, 2023 @02:07PM (#35046021)
Re:Bevy 0.10: data oriented game engine built in Rust by trhr on Monday March 06, 2023 @02:13PM (#35046117)
I'm not saying they're breaking the law and should be arrested, I'm saying if they're breaking shit in patch release, even on v0, I refuse to touch it until v1. If you're not breaking shit in patch releases, I'll touch v0 and pin to a minor.

People can run anything they want however the fuck they want, I just won't use it. How's that?

Re:Bevy 0.10: data oriented game engine built in Rust by cmeacham98 on Monday March 06, 2023 @02:34PM (#35046422)
You said

> doesn't specify if breaking changes will occur between major, minor, or patch versions

What I'm telling you is that it _does_ specify that: by using a 0.x.y version they are explicitly specifying that breaking changes can occur between _any_ version. If you don't want to use Bevy because of that, then that's fine.

Re:Bevy 0.10: data oriented game engine built in Rust by trhr on Monday March 06, 2023 @02:48PM (#35046625)
But you've just nailed the problem: this is NOT the convention used within Rust.

In Rust, 0.x.y would treat .y as NON-BREAKING, BACKWARDS-COMPATIBLE changes.

I don't think I'm stepping beyond the pale of reasonable engineering when I suggest that a package in the Rust ecosystem that doesn't follow the Rust semver guidance -- and doesn't EXPLICITLY STATE that they don't follow the Rust semver guidance -- is a library I won't touch.

The fact that there's so much confusion on this thread about what their semver policy actually is shows exactly why it should be stated upfront and not masked behind a generic "stability warning."

Re:Bevy 0.10: data oriented game engine built in Rust by cmeacham98 on Monday March 06, 2023 @04:02PM (#35047546)
This is incorrect. Using Semantic Versioning is the standard convention in Rust.
Re:Bevy 0.10: data oriented game engine built in Rust by burntsushi on Monday March 06, 2023 @04:52PM (#35048201)
Hi, I'm on libs-api. You are incorrect. Cargo always has, since its inception, treated changes to the leftmost non-zero number in the version as semver incompatible releases. That means 0.0.1 and 0.0.2 are semver incompatible. That means 0.1.2 and 0.2.8 are semver incompatible. 0.1.2 and 0.1.8 are semver compatible.

semver says that in 0.x.y, "anything goes." But that is just not true with Cargo.

This is also documented, emphasis mine:

> This guide uses the terms "major" and "minor" assuming this relates to a "1.0.0" release or later. Initial development releases starting with "0.y.z" can treat changes in "y" as a major release, and "z" as a minor release. "0.0.z" releases are always major changes. This is because Cargo uses the convention that only changes in the left-most non-zero component are considered incompatible.

https://doc.rust-lang.org/cargo/reference/semver.html

Re:Bevy 0.10: data oriented game engine built in Rust by steveklabnik on Monday March 06, 2023 @05:16PM (#35048522)
It’s more complicated than that. Maybe I’ll finally actually write a blog post.

While the semver spec has contained that line about 0.y.z, the semver spec also does not define ranges, that is, how specifying version requirements works. Cargo implements these things, like ^ and > and etc, the exact same way that every other semver implementation implements them.

That’s because very quickly the “use minor like major when major == 0” thing became the de facto way that people used semver in its earlier days. Implementations understood this, but the spec was never changed.

So Cargo does follow semver in practice, like everyone else. There’s a combination of discrepancy and under-specification in the spec; which is a great reminder that specifications tend to follow implementations, not the other way around.

It’s on my long list of things to do to eventually reconcile this in the semver specification, but it’s been a few years and I still haven’t managed it, so no promises there.

Re:Bevy 0.10: data oriented game engine built in Rust by burntsushi on Monday March 06, 2023 @05:24PM (#35048613)
Hmmm I'm struggling to see the difference between what you're saying and what I'm (and the Cargo docs) are saying. semver says anything goes at 0.x.y:

> Major version zero (0.y.z) is for initial development. Anything MAY change at any time. The public API SHOULD NOT be considered stable.

It is also simultaneously the case that "anything may change at 0.x.y" is not true for Cargo. Cargo is stricter than "anything may change."

Maybe what you're saying is that Cargo is consistent with semver, but "just" stricter? I'd agree with that, absolutely. That is why I try hard to not say "Cargo doesn't follow semver." (Although it's easy to slip on that one.)

Re:Bevy 0.10: data oriented game engine built in Rust by steveklabnik on Monday March 06, 2023 @05:37PM (#35048764)
Yeah I should probably actually write the post, haha. Commenting between sets at the gym just isn’t the same. I’ll let you know if/when I do. This comment of yours already helped me formulate a bit of it, I think, so thanks for that.

“Just stricter” is much more accurate than “doesn’t follow”, for sure.

“No semver implementation follows the major version zero sentence in the semver spec, and Cargo does what they all do” is maybe an even closer approximation. We’ll see how good I can do with more than 60 seconds rest between typing :)

Re:Bevy 0.10: data oriented game engine built in Rust by burntsushi on Monday March 06, 2023 @05:53PM (#35048953)
Ah okay great, sounds good! And yes, having something canonical to link to that explains this would be useful indeed.
Re:Bevy 0.10: data oriented game engine built in Rust by trhr on Monday March 06, 2023 @09:44PM (#35050901)
Rust's semver spec is very good, common-sense guidance that matches the level of risk most of us are comfortable with:

- Don't put 0.0.x in prod ever.

- Probably don't put 0.1.x in prod, either.

- Maybe put 0.40.x in prod. Pin to 0.40 if you do.

- Put 1.x.x in prod, because they're basically done with it.

I get upset when these conventions aren't followed and I'm using something expecting them to be.

Re:Bevy 0.10: data oriented game engine built in Rust by spoiler on Monday March 06, 2023 @02:20PM (#35046225)
FWIW, I've been tinkering with Bevy since like 0.6 I think, and don't remember many (if any?) patch breaking changes.

I did skip 0.7 since I remember upgrading from 0.6 to 0.8 directly, though.

The minor jumps are sometimes very small changes, sometimes giant ones (but alas, it's still a 0.x project, so I got not qualms)

Re:Bevy 0.10: data oriented game engine built in Rust by IceSentry on Monday March 06, 2023 @02:59PM (#35046758)
> I'm saying if they're breaking shit in patch release

You just assumed this, but this isn't true. Bevy uses semver like most of the rust ecosystem.

The warning is just telling people that the breaking changes will be frequent. It doesn't mean they will be in a patch release. I don't understand what's to be confused about here. Bevy never specified any custom release strategy because there isn't one, it's just semver like almost everything else in rust.

Re:Bevy 0.10: data oriented game engine built in Rust by pie_flavor on Monday March 06, 2023 @05:32PM (#35048709)
Rust has different rules. 0.x.y isn't compatible x-wise, but it is supposed to be compatible y-wise.
Re:Bevy 0.10: data oriented game engine built in Rust by LelouBil on Monday March 06, 2023 @01:51PM (#35045746)
Well, it's not even 1.0 yet
Re:Bevy 0.10: data oriented game engine built in Rust by nicoburns on Monday March 06, 2023 @01:56PM (#35045852)
You can see Bevy's release history here: https://github.com/bevyengine/bevy/releases where you can see that there have historically been releases with breaking roughly every 2 months (although the last one was back in Nov 2022)
Re:Bevy 0.10: data oriented game engine built in Rust by IceSentry on Monday March 06, 2023 @02:02PM (#35045940)
It's more like every >3 months because the .1 release aren't breaking
Re:Bevy 0.10: data oriented game engine built in Rust by _cart on Monday March 06, 2023 @02:28PM (#35046356)
Cheeky answer: I sure can! And people like it!

Real answer: Bevy is already very featureful, but we have a long way to go before we can start making "stable api guarantees". Locking things down right now would prevent us from achieving the best apis we can. We are building the engine in the open and people will naturally still take dependencies on us, even under these constraints. We are very careful about our messaging / provide warnings in the appropriate places.

In practice, migrating between versions is generally pretty straightforward and we provide migration guides to help the process. The dust is already settling on some of our APIs / they're starting to feel "stable". Many people (and companies) are happily building real products right now in Bevy (and porting them across versions).

Re:Bevy 0.10: data oriented game engine built in Rust by _cart on Monday March 06, 2023 @06:30PM (#35049362)
Follow up reply: I misinterpreted your question. I thought you were saying "(How) can you post this on HN when you are still unstable". But on a re-read it sounds like you just wanted me to post on HN when we have stability guarantees. I definitely can/will! If that is what you meant, I apologize for the misread (and unnecessary cheekiness).