unofficial mirror of guile-devel@gnu.org 
 help / color / mirror / Atom feed
From: Maxime Devos <maximedevos@telenet.be>
To: Attila Lendvai <attila@lendvai.name>
Cc: Greg Troxel <gdt@lexort.com>,
	 "Dr. Arne Babenhauserheide" <arne_bab@web.de>,
	 MSavoritias <email@msavoritias.me>,
	 "guile-devel@gnu.org" <guile-devel@gnu.org>
Subject: RE: The Guile junk drawer and a C plea
Date: Sat, 20 Jul 2024 17:26:01 +0200	[thread overview]
Message-ID: <20240720172548.prRm2C0062eE65L06rRme4@albert.telenet-ops.be> (raw)
In-Reply-To: <n24qeOLF22uHQBFf7LE0JgEfFzTyXDJBSeROQHX3VBM1lTbtDE5v7k1JeTvf8EpY808mPO3KV_pZDa6NpjXEKArao-xY2GyjbgFW_lXNN3k=@lendvai.name>

[-- Attachment #1: Type: text/plain, Size: 4544 bytes --]

> >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

[-- Attachment #2: Type: text/html, Size: 12088 bytes --]

  parent reply	other threads:[~2024-07-20 15:26 UTC|newest]

Thread overview: 81+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-06-29  0:19 [PATCH] Add nondestructive delq1, delv1, and delete1 Richard Sent
2024-06-29  2:52 ` The Guile junk drawer and a C plea (was: [PATCH] Add nondestructive delq1, delv1, and delete1.) Thompson, David
2024-06-29  7:37   ` Mikael Djurfeldt
2024-06-29  8:12     ` The Guile junk drawer and a C plea Dr. Arne Babenhauserheide
2024-06-29  8:33       ` Damien Mattei
2024-06-29  9:59         ` Dr. Arne Babenhauserheide
2024-06-29  9:07     ` The Guile junk drawer and a C plea (was: [PATCH] Addnondestructive delq1, delv1, and delete1.) Maxime Devos
2024-06-29 10:41     ` Maxime Devos
2024-06-29 18:12       ` The Guile junk drawer and a C plea Dr. Arne Babenhauserheide
2024-06-29 18:18         ` Lassi Kortela
2024-06-29 18:27         ` Maxime Devos
2024-06-29 19:04           ` GRFI [was: The Guile junk drawer and a C plea] Matt Wette
2024-06-29 19:13             ` Lassi Kortela
2024-07-02 19:42               ` Jason Hemann
2024-06-29 19:39             ` Jean Abou Samra
2024-06-29 21:53       ` The Guile junk drawer and a C plea Philip McGrath
2024-06-29 22:41         ` Maxime Devos
2024-06-30  7:12           ` Dr. Arne Babenhauserheide
2024-06-30  9:45             ` Maxime Devos
2024-06-30 14:34               ` Dr. Arne Babenhauserheide
2024-07-01  9:06                 ` Maxime Devos
2024-07-01 10:42                   ` Dr. Arne Babenhauserheide
2024-06-30  6:16         ` #lang header Lassi Kortela
2024-06-30  0:17     ` The Guile junk drawer and a C plea Thompson, David
2024-07-17  2:25     ` The Guile junk drawer and a C plea (was: [PATCH] Add nondestructive delq1, delv1, and delete1.) Olivier Dion
2024-07-17 10:01       ` Library namespaces (guile ...) and (srfi ...) Lassi Kortela
2024-07-17 10:45       ` The Guile junk drawer and a C plea Dr. Arne Babenhauserheide
2024-07-17 10:53         ` MSavoritias
2024-07-17 11:12           ` Lassi Kortela
2024-07-17 15:44             ` Olivier Dion
2024-07-17 16:09               ` tomas
2024-07-17 16:29                 ` Attila Lendvai
2024-07-17 20:32                   ` Dr. Arne Babenhauserheide
2024-07-18  9:04                     ` Attila Lendvai
2024-07-18 15:11                       ` Dr. Arne Babenhauserheide
2024-07-17 20:33           ` Dr. Arne Babenhauserheide
2024-07-18 22:56             ` Greg Troxel
2024-07-19  8:46               ` Maxime Devos
2024-07-20  9:34                 ` Attila Lendvai
2024-07-20 13:01                   ` [PATCH] " Dr. Arne Babenhauserheide
2024-07-20 13:30                     ` Name of the standard library Lassi Kortela
2024-07-20 14:52                       ` Dr. Arne Babenhauserheide
2024-07-20 15:24                         ` Lassi Kortela
2024-07-20 15:46                           ` Dr. Arne Babenhauserheide
2024-07-20 16:04                             ` Portable code Lassi Kortela
2024-07-20 16:24                               ` Dr. Arne Babenhauserheide
2024-07-20 16:37                                 ` Lassi Kortela
2024-07-20 21:48                                   ` Dr. Arne Babenhauserheide
2024-07-26  9:21                                     ` Lassi Kortela
2024-07-20 16:11                             ` Name of the standard library Maxime Devos
2024-07-20 16:26                               ` Dr. Arne Babenhauserheide
2024-07-20 16:48                                 ` Maxime Devos
2024-07-20 18:42                                   ` Portable imports Lassi Kortela
2024-07-20 19:18                                     ` Maxime Devos
2024-07-20 19:46                                       ` Encoding library names Lassi Kortela
2024-07-20 20:35                                         ` Maxime Devos
2024-07-21  5:55                                       ` Portable imports tomas
2024-07-20 19:23                                     ` Maxime Devos
2024-07-20 16:54                                 ` Name of the standard library Lassi Kortela
2024-07-20 21:56                                   ` Dr. Arne Babenhauserheide
2024-07-26  9:38                                     ` Lassi Kortela
2024-07-20 15:43                         ` Maxime Devos
2024-07-20 15:58                           ` Lassi Kortela
2024-07-21  7:15                         ` MSavoritias
2024-07-21  8:04                           ` Dr. Arne Babenhauserheide
2024-07-26 16:37                             ` Library names describe APIs Lassi Kortela
2024-07-21 16:50                           ` Name of the standard library Ricardo Wurmus
2024-07-21 13:00                         ` Attila Lendvai
2024-07-20 16:01                       ` Maxime Devos
2024-07-20 16:27                         ` Lassi Kortela
2024-07-20 16:55                           ` Maxime Devos
2024-07-21 12:16                     ` [PATCH] The Guile junk drawer and a C plea Attila Lendvai
2024-07-21 21:10                       ` Dr. Arne Babenhauserheide
2024-07-22 14:52                         ` Attila Lendvai
2024-07-20 15:26                   ` Maxime Devos [this message]
2024-07-17 11:04         ` Lassi Kortela
2024-06-29 18:38   ` The Guile junk drawer and a C plea (was: [PATCH] Add nondestructive delq1, delv1, and delete1.) Jean Abou Samra
2024-06-29 19:02   ` The Guile junk drawer and a C plea Richard Sent
2024-06-29 23:51     ` Thompson, David
2024-06-30  7:23       ` Dr. Arne Babenhauserheide
2024-07-01  2:55   ` Maxim Cournoyer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/guile/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240720172548.prRm2C0062eE65L06rRme4@albert.telenet-ops.be \
    --to=maximedevos@telenet.be \
    --cc=arne_bab@web.de \
    --cc=attila@lendvai.name \
    --cc=email@msavoritias.me \
    --cc=gdt@lexort.com \
    --cc=guile-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).