SWI-Prolog versioning

Originally posted by Jan W. with regards to changing the SWI-Prolog major version number from 8 to 9. (ref)

I think SWI-Prolog is not subject to semantic versioning. That schema is fine for libraries with a fairly small and well defined API and functionality. For a complex system as SWI-Prolog that doesn’t really work. Patch levels in the development series are merely approximately 2 week snapshots of the development. Actual patches as in bug fixes are in there, but usually there is also new functionality (which would ask for a minor bump) or even compatibility breaking modifications (which would ask for a major bump). So, the whole model breaks :frowning: In the stable series, patch levels should only fix stuff and possibly add stuff that is very unlikely to break anything and is valuable for allowing code to run on the stable and devel series or simply adds something considered valuable enough to take the small risk that it breaks something. Note that (not even) theoretically any change can break things, even bug fixes.

So, we do not do semantic versioning because it does not work for us :frowning: Our patch level increments, but is otherwise meaningless. Our minor increments when we do a devel → stable merge (on both series with 2). The major is meaningless. Pretty much as e.g., Linux. Also here Linus Thorvalds decides to bump the major at rather random moments if I understand that correctly. A major bump sends a message “the system is now a lot better” and resets the minor. Or, maybe, “even if you are really conservative, it gets time to upgrade”. The only real major was version 7 :slight_smile:

So far, the 8.x series brought this. It may be time to upgrade if you are still at 8.0 :slight_smile:

  • multi-argument and deep indexing
  • Tabling with answer subsumption, well founded semantics, restraints, incremental tabling, shared tabling and monotonic tabling.
  • Rational numbers as prime citizens. IEEE754 float support, more use of rationals, “mostly” correct float rounding :frowning:
  • transactions
  • The $/0, $/1, det/1 and => operators for safe “functional” code.
  • CMake based builds
  • Yield from foreign code.
  • WASM port
1 Like