> >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'd argue with the statement that an aesthetic glitch is a non-issue.

>the short version: see the Broken Window phenomenon, and the Turing Tarpit.

'define-module2’ and ‘define-module’ aren’t Turing tarpits:

• Neither are Turing-complete (unless perhaps you do fancy stuff with 
merge-generics and custom (GOOPS) method metaclasses, but then it was your own 
choice to turn it into a Turing-tarpit).
• Both are (relatively speaking) easy to use. A slight difficulty for beginners 
is determining where in the file system to put the module (hence the relatively 
qualifier), but both define-module and define-module2 have the exact same 
problem, and AFAIK other programming languages aren’t any better at this (hence 
‘relatively’).

‘define-module2’ is not a broken window, it is a fixed window. Neither is 
‘define-module’, it would be slightly outdated in its precise semantics (and 
hence not recommended), but it does work decently.

The broken window here, is breaking the backwards incompatibility by _not_ 
doing ‘define-module2’ or the like. (Doesn’t need to be ‘define-module2’ per 
se, other methods for preserving compatibility exist as well.) ‘define-module2’ 
would be the replacement glass (for the broken window) here.

>the longer version:

>you do not see how many potential contributors end up never touching the 
>codebase because of stuff like `define-module2`. i know how i operate, and 
>i've seen great coders exhibit similar behavior. i also participated in a few 
>discussions about how and why we got our impressions and made our decisions.

Neither do you (or me, for that matter) see how many potential contributors 
never touch Guile, or stop touching Guile, or stay touching Guile but are 
frustrated about Guile because of the _lack_ of stuff like ‘define-module2’. 
That ‘2’-suffix can be quite useful (for compatibility).

Also, almost by definition, those ‘great coders’ you are mentioning, aren’t 
actually great because of their lack of appreciation of backwards compatibility 
(*). Going by what I’m hearing about these coders, I think I prefer _not_ 
having them touch the codebase.

(*) In the past I’ve sometimes argued for _not_ preserving backwards 
compatibility, but my opinion changed over time and this is not the same 
situation.

>there are various signs of disorder; a few major ones that quickly come to 
>mind:
>
> - a messy filesystem structure
>
> - badly chosen names for abstractions
>
> - a lot of work for M-x whitespace-cleanup
>
> - inconsystent code formatting
>
> - lack of code comments next to kludges. kludges are ok, but
>  uncommented kludges are a big red sign.
>
> - no attention for failing as early and as loudly as possible.
>
> - a lot of DWIM stuff, where e.g. some names are unnecessarily
>  generated, which makes navigating (grep'ping) the codebase
>   hopeless.  IOW, unnecessary hindrance for code discoverability.

None of these is the hypothetical ‘define-module2’. The only thing that comes 
close is ‘badly chosen name for abstractions’, but well, ‘define-module2’ would 
define a module, and it is the second (*) incompatible version of this method 
to defining modules. As such it seems a pretty decent choice of name (just a 
bit boring).

(*) or maybe third, I’m assuming things here about Guile <2.2 that I don’t 
actually know, the hypothetical ‘define-module2’ / ‘define-module’ is just an 
example.

> [...]
>
> and this is the reason i spoke up in this thread, not to argue for 
> indiscriminate
> cleanups. retaining an ice-9 compatibility falls into the kludge category, 
> i.e. it's ok if
> it's clearly marked as a kludge, and if it incurrs little extra maintenance 
> costs.

Nowhere did I say anything about not properly deprecating ‘define-module’.

Best regards,
Maxime Devos

Reply via email to