Multiple versions or not? ========================= [ old notes. multi-versioning support was removed for the reasons below ] Pros: 1. Mistakes or limitations in function definitions can be fixed without ugly "_v2" or "_ex" functions 2. API level bugs can be fixed. 3. Behavioral changes can be done. Cons: - Limitation: Types cannot be changed, due to the "diamon dependency chain" problem. - Public constants and inlined functions might not be possible to change in practice (for the same reasons as for types) - Complicates implementation. - Source code examples could fail to work or do the wrong thing. - Documentation needs to cover both new and old versions. Alternative solution with module v2 renames ------------------------------------------- - Enforce strict add-only versioning (no deletions or changes) - Allow symbol deprecations (= warning) and symbol hiding (= error) in incremental versions. - Cleanups in major versions can be done as new modules (e.g. module 1.9 vs module2 2.0) With the steps above, mistakes/limitations and API level bugs can be fixed.