There are a few possible approaches to stability. Yearly stable releases is one of them, but that's still moving very slowly.

Yes, yearly is quite slow, but I was trying to be realistic about how much we can do :) If a stable release comes with a spec, that adds some writing effort that is not fun to do several times a year while the interface is changing.

Another possible approach is something like Semantic Versioning: have rules about when the version of each module changes, and include that version in the module name.

So instead of something like (scheme-live string) you'd have (scheme-live string 1), and then if someone made a breaking change to the API (removed or renamed a procedure, changed the number of arguments to a procedure, etc.), the new change would have to be (scheme-live string 2), and the old version would still exist. Then updates won't break existing code.

This is good otherwise, but locks in the module boundaries; it doesn't provide a natural way to decide that adding a particular module was a mistake, or that the module should have a different name.

Sweeping module changes across stable versions may be a sign that something's wrong with the design mentality (I'm still not sure whether or not it's a problem) but module boundary changes in the unstable version over the course of a year sound like they'd make a lot of sense.

If there are stable versions at fixed intervals (e.g. yearly) that ought to be automatically SemVer compatible: version 2021 is followed by version 2022, then 2023, etc.

Reply via email to