>Maxime Devos <maximede...@telenet.be> writes:
>>> I suggest that we design a new module hierarchy, introduce aliases for
>>> module bindings, and still supply the old module hierarchy during a few
>>> years for backward compatibility.
>> Also, on deprecation and removal: just because you deprecate something, 
>> doesn’t mean it has to be removed. And just because something
>> deprecated will be removed or because something is volatile, doesn’t mean it 
>> has to be an incompatible change! 
>Change can be done without breaking things, but that’s not what was
proposed.

Unless you are referring to the ‘during a few years’ (and in particular, the 
implied ‘remove it afterwards’) or (*), I don’t follow – renaming things and 
keeping the old names available doesn’t break things.

>I’m not saying that there shouldn’t be change, just that there shouldn’t
be *breaking* change.

What breaking change are you referring to?

>And that a new hierarchy we define is not guaranteed to actually *stay*
better. There would be errors, but different ones. We can only expect
that the new one will be significantly better in case where either the
computing environment changed substantially or where our knowledge and
skill of how to define such a structure improved substantially.

>Also take into account whether we can adapt third party tutorials. These
are an often forgotten part of software and when they no longer work due
to chages, this seriously hampers adoption.

We don’t need to account for third party tutorials here, renaming things while 
keeping the old names available is a compatible change so third party tutorials 
remain valid (just a bit outdated in naming).

>One such case was making modules declarative by default. This broke
tutorials which described how to create a live-REPL for interactive game
development. It cost me hours of time to find the cause. And then again
when I worked on a system with only Guile 2.0 where that module-option
#:declarative #f is illegal. The compatibility change for the REPL
completely broke the code on that other system. And the deployment
system had another Guile version again, causing more breakage.

I am proposing a compatible change except for (*), not an incompatible change, 
but this is an example of an incompatible change instead of a compatible 
change, so this doesn’t seem an analogous situation unless this is about (*).

(*) different default environment for “guile -l” and the like.

And (*) can be resolved with some automatic warning messages – if things are in 
the (implicit) interaction environment and a binding could not be found, 
propose explicitly choosing (guile) as interaction environment).

p.s. forgot to mention that (define-module ...) also has default environment 
and hence should also be adjusted to explicitly choose _which_ environment.

Best regards,
Maxime Devos

Reply via email to