>  1.8

>  2.0

>  2.2

>  3.0

> 

>If there were more concern about compatibility -- all 2.0 programs will

>compile an work with 3.0 -- then we would not need to keep the old

>versions.

 

One of these changes is how #:autoload works. One of the options to preserve compatibility yet introduce the new behaviour, could have been to define ‘define-module2’ (to be used instead of the (deprecated) ‘define-module’) with the new semantics. Since their implementations would share almost all code, there wouldn’t be serious implementation costs(*). The only significant downside I see here is that ‘define-module2’ is a rather uncool name, but that’s a non-issue.

 

(*) I refuse to call it ‘maintenance burden’. Software isn’t hardware and doesn’t rot, in the absence of changes in external demands and absence of internal changes, the quality of software is independent of time. The ‘burden’ that would be referred to, is not some oil to applied or gears to regularly replace, but rather a cleaning up past mistakes (once per mistake) that probably could have been prevented in the first place.

 

Best regards,

Maxime Devos.