From: "Gerd Möllmann" <gerd.moellmann@gmail.com>
To: Matt Armstrong <matt@rfc20.org>, Richard Stallman <rms@gnu.org>
Cc: emacs-devel@gnu.org
Subject: Re: Help sought understanding shorthands wrt modules/packages
Date: Wed, 23 Nov 2022 08:42:56 +0100 [thread overview]
Message-ID: <cefe4ea2-107b-8055-2c1b-6b5cc6cc3f9d@gmail.com> (raw)
In-Reply-To: <871qpubx1p.fsf@rfc20.org>
On 22.11.22 20:37, Matt Armstrong wrote:
> Gerd Möllmann <gerd.moellmann@gmail.com> writes:
>
>>> The grave problem of :USE in CL packages could be fixed by replacing
>>> it with a new construct that specifies a list of symbols to be
>>> inherited from each other package, perhaos with renaming.
>>
>> I fail to understand the "grave" problem, sorry. Could you please give
>> a more concrete example?
>
> A few weeks ago, in this thread or another, I attempted to explain my
> understanding of the point Richard was raising. As far as I can tell I
> still share the same concern Richard raises.
>
> The issue is that `(use-package "A")' brings all of A's exported symbols
> into the current namespace, and so allows them to be used unqualified.
> This implies that any addition to a package A's exported symbol list has
> a chance of breaking code in any package that "use-package"'s it. The
> breakage takes the form of an introduced ambiguity.
Hm, I must admit that I don't see an ambiguity here. Maybe you are
thinking of something like the following?
Assume packages A and B, A using B and containing a defun for f. Next,
B is modified to export B:f, which A inherits. A is recompiled, and the
compiler sees "(defun f () 42)". In this case, the 'f' refers to B:f,
but unambiguously.
If that's what you are thinking about, yes that's a known problem, which
is, in most, if not all, CL implementations, solved with "package
locks". In CLisp:
https://clisp.sourceforge.io/impnotes/pack-lock.html
>
> This is a problem for "programming in the large". If package's can't
> add new things without risking breaking their users then the approach is
> arguably worse than Emacs' current approach, at least in this respect.
> Adding a new name for a new piece of functionality is one of the most
> common ways packages evolve over time.
But that's not unique to adding symbols. The same is potentially true
for all sorts of API changes.
>> BTW, in CL, if you don't want to use-package you can also import just
>> the list of symbols you want. Without renaming, but I guess that
>> could be added, if somone wants that. (I mention the idea of renaming
>> in cl-packages.org, BTW, on the branch, but I'm still not sure it's
>> worth it.)
>
> Yes, Common Lisp provides ways to fix things *after* the breakage
> occurs, but the harm comes with the breakage, and is an inevitable
> consequence of the design.
>
> Yes, the danger can be avoided by refraining from using `use-package' at
> all. This is the root my suggestion to consider CL packages for Emacs
> but subtract `use-package'.
Here we have different opinions. I see no need to forbid use-package.
Imagine a CL without use-package, being in some package. I don't want
to write cl:car everywhere. What for?
>
> Yes, this kind of problem exists not only in Common Lisp but many other
> languages, to the extent that some might come to believe this sort of
> problem feels "natural" or is perhaps worth it for the convenience of
> using unqualified names from other packages. Python's "from foo
> import*" is like CL's use-package and is now widely considered poor
> style in the Python community (for the reasons I've stated).
Does Python have internal symbols?
> Guile has
> something like Common Lisp, with the same problem and the same kinds of
> mitigating workarounds. Ada has "use" with semantics similar to CL's.
> Perl has "use" but, presumably through experience, recognized a problem
> and has a "use VERSION" mechanism to limit potential harm from API
> changes. And on and on.
>
> The argument is that all of these languages are all flawed in the same
> way, and that a package/module system designed today should aim for
> better.
More power to you :-).
next prev parent reply other threads:[~2022-11-23 7:42 UTC|newest]
Thread overview: 125+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-30 6:45 Help sought understanding shorthands wrt modules/packages Gerd Möllmann
2022-10-30 8:38 ` tomas
2022-10-30 8:54 ` Eli Zaretskii
2022-10-30 9:14 ` tomas
2022-10-30 10:26 ` Gerd Möllmann
2022-10-30 10:52 ` Eli Zaretskii
2022-10-30 11:24 ` Is there a need for a module system Gerd Möllmann
2022-10-30 11:38 ` Eli Zaretskii
2022-10-30 14:03 ` Gerd Möllmann
2022-10-30 10:40 ` Help sought understanding shorthands wrt modules/packages Eli Zaretskii
2022-10-30 11:06 ` tomas
2022-10-30 11:19 ` Eli Zaretskii
2022-10-30 12:50 ` Stefan Monnier
2022-10-30 13:48 ` Gerd Möllmann
2022-10-30 14:25 ` Stefan Monnier
2022-10-31 6:31 ` Gerd Möllmann
2022-10-30 20:16 ` Helmut Eller
2022-10-31 6:27 ` Gerd Möllmann
2022-10-31 12:13 ` Juanma Barranquero
2022-10-31 12:57 ` Gerd Möllmann
2022-10-31 13:38 ` Juanma Barranquero
2022-10-31 19:53 ` Stefan Monnier
2022-11-11 4:35 ` Richard Stallman
2022-11-11 9:33 ` Gerd Möllmann
2022-11-13 4:17 ` Richard Stallman
2022-11-13 6:41 ` Gerd Möllmann
2022-11-03 3:17 ` Richard Stallman
2022-11-03 5:33 ` Gerd Möllmann
2022-11-03 3:17 ` Richard Stallman
2022-11-03 8:12 ` Michael Albinus
2022-11-03 3:17 ` Richard Stallman
2022-11-03 8:46 ` Eli Zaretskii
2022-11-05 16:49 ` Richard Stallman
2022-11-05 17:04 ` Eli Zaretskii
2022-11-07 7:47 ` Richard Stallman
2022-11-07 12:52 ` Eli Zaretskii
2022-11-08 6:19 ` Gerd Möllmann
2022-11-08 9:54 ` João Távora
2022-11-08 10:35 ` Gerd Möllmann
2022-11-08 15:40 ` João Távora
2022-11-08 15:47 ` Stefan Kangas
2022-11-08 22:43 ` João Távora
2022-11-09 6:57 ` Gerd Möllmann
2022-11-09 7:23 ` Gerd Möllmann
2022-11-11 4:34 ` Richard Stallman
2022-11-11 9:25 ` Gerd Möllmann
2022-11-12 3:35 ` Richard Stallman
2022-11-19 22:51 ` [External] : " Drew Adams
2022-11-20 7:18 ` Eli Zaretskii
2022-11-20 18:55 ` [External] : " Drew Adams
2022-11-20 19:02 ` Eli Zaretskii
2022-11-22 12:14 ` [External] : " Richard Stallman
2022-11-22 14:22 ` Eli Zaretskii
2022-11-20 8:08 ` Gerd Möllmann
2022-11-12 3:35 ` Richard Stallman
2022-11-22 19:37 ` Matt Armstrong
2022-11-23 7:33 ` Juanma Barranquero
2022-11-26 23:32 ` Richard Stallman
2022-11-27 9:05 ` Juanma Barranquero
2022-11-30 23:55 ` Richard Stallman
2022-11-23 7:42 ` Gerd Möllmann [this message]
2022-12-14 22:21 ` Richard Stallman
2022-12-15 6:47 ` Eli Zaretskii
2022-12-17 14:53 ` Richard Stallman
2022-11-22 18:01 ` Matt Armstrong
2022-11-22 18:44 ` Eli Zaretskii
2022-11-23 0:55 ` Matt Armstrong
2022-11-23 7:49 ` Gerd Möllmann
2022-11-23 12:18 ` Eli Zaretskii
2022-11-11 4:35 ` Richard Stallman
2022-11-11 9:35 ` Gerd Möllmann
2022-11-11 12:09 ` João Távora
2022-11-11 13:01 ` Gerd Möllmann
2022-11-11 14:23 ` João Távora
2022-11-11 15:12 ` Gerd Möllmann
2022-11-12 9:17 ` João Távora
2022-11-12 13:00 ` Gerd Möllmann
2022-11-12 3:35 ` Richard Stallman
2022-11-05 21:47 ` Eduardo Ochs
2022-11-06 9:05 ` Michael Albinus
2022-11-06 11:19 ` João Távora
2022-11-11 4:35 ` Richard Stallman
2022-11-11 10:09 ` João Távora
2022-11-12 3:35 ` Richard Stallman
2022-11-12 10:11 ` João Távora
2022-11-12 14:36 ` Dmitry Gutov
2022-11-12 15:20 ` João Távora
2022-11-12 17:32 ` Dmitry Gutov
2022-11-12 18:45 ` João Távora
2022-11-14 1:03 ` Dmitry Gutov
2022-11-14 6:33 ` João Távora
2022-11-14 11:41 ` Dmitry Gutov
2022-11-14 13:41 ` João Távora
2022-11-14 3:13 ` Richard Stallman
2022-11-11 4:35 ` Richard Stallman
2022-11-11 8:53 ` Michael Albinus
2022-11-11 4:35 ` Richard Stallman
2022-11-11 7:10 ` Helmut Eller
2022-11-01 3:11 ` Ag Ibragimov
2022-11-02 20:11 ` João Távora
2022-11-03 5:12 ` Gerd Möllmann
2022-11-03 20:04 ` A short defense of shorthands.el (but CL packages are still better) (Was: Help sought understanding shorthands wrt modules/packages) João Távora
2022-11-04 3:28 ` Richard Stallman
2022-11-05 1:09 ` A short defense of shorthands.el (but CL packages are still better) João Távora
2022-11-07 7:44 ` Richard Stallman
2022-11-07 10:18 ` João Távora
2022-11-08 5:02 ` Richard Stallman
2022-11-08 5:18 ` João Távora
2022-11-05 3:13 ` Help sought understanding shorthands wrt modules/packages Richard Stallman
2022-11-06 11:31 ` João Távora
2022-11-08 0:27 ` Matt Armstrong
2022-11-08 4:52 ` João Távora
2022-11-08 5:34 ` Gerd Möllmann
2022-11-09 4:03 ` Richard Stallman
2022-11-09 5:13 ` Matt Armstrong
2022-11-09 4:03 ` Richard Stallman
2022-11-09 5:42 ` Yuri Khan
2022-11-09 5:48 ` tomas
2022-11-09 6:02 ` Matt Armstrong
2022-11-09 7:15 ` Juanma Barranquero
2022-11-09 8:34 ` Gerd Möllmann
2022-11-09 10:07 ` Helmut Eller
2022-11-09 18:22 ` Matt Armstrong
-- strict thread matches above, loose matches on Subject: below --
2022-11-07 21:20 Payas Relekar
2022-11-08 9:40 ` João Távora
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/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=cefe4ea2-107b-8055-2c1b-6b5cc6cc3f9d@gmail.com \
--to=gerd.moellmann@gmail.com \
--cc=emacs-devel@gnu.org \
--cc=matt@rfc20.org \
--cc=rms@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.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
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).