unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Installing cond* in core
@ 2024-01-27 21:36 Stefan Kangas
  2024-01-27 23:33 ` Alan Mackenzie
                   ` (4 more replies)
  0 siblings, 5 replies; 52+ messages in thread
From: Stefan Kangas @ 2024-01-27 21:36 UTC (permalink / raw)
  To: emacs-devel

Hi emacs-devel,

After careful consideration and off-line discussions between Eli and
myself, we have come up with the following proposed plan:

 1. We will install cond* in core and let people who prefer it use it,
    while people who prefer pcase are free to keep using pcase.

 2. cond* vs pcase is to be considered a matter of stylistic preference.

 3. There is no intention to forcibly replace pcase with cond* in our
    code.

Everyone will be free to maintain the code that falls within their area
of responsibility using the style that they like best.  We hope that
this will make sense to proponents of both sides of the argument.

I have myself expressed significant reservations about installing cond*
in core.  The above could be seen as a politicians response to a
technical problem, and to some extent it is.

Our responsibility as maintainers is first and foremost to ensure that
we can all work together, and unite under a common banner.  Our success
as a project depends on it.  Thus, the last thing we want to do is to
alienate any group of contributors, big or small.

We believe that this is a more important concern than the arguments for
or against cond* or pcase.  The simple fact is that we have different
backgrounds and experiences, which have tended to land us on either side
of this discussion.  This diversity is a strength, and not a weakness.

However, the strong emotions and significant differences of personal
preferences between several very active contributors over months of
discussions have not left us with many reasonable choices.

Note that this decision does not throw our basic coding guidelines out
the window: we will still try to respect the local style of files we
change, the maintainers of various files typically have final say, etc.

It also goes without saying that it's probably best if the proposed
improvements to cond* are considered before the macro is installed.
It is our understanding that Richard intends to work on that.

Finally, this co-maintainer would like to draw everyone's attention to
this paragraph in a recent article[1] on sharp technical divisions over
typing in the Python community:

    The discussion highlighted another thing that is something of a
    hallmark of the Python world: cordiality even in the face of strong
    disagreement ...  Python conversations are almost always
    collegial—and have been for decades.  For example, several took the
    opportunity of the thread to thank the typing developers and to
    recognize that the feature does have uses (and users), even if they
    were not particularly inclined toward using typing themselves.  It
    all helps reinforce Brett Cannon's adage that he came for the
    language, but stayed for the community.  It also bodes well for
    finding reasonable solutions and compromises for typing—and more.

If it is true that Python "can be seen as a dialect of Lisp with
'traditional' syntax",[2] then perhaps it is our turn to take a cue
from them.


Footnotes:
[1]  https://lwn.net/Articles/958326/

[2]  https://norvig.com/python-lisp.html



^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-01-27 21:36 Installing cond* in core Stefan Kangas
@ 2024-01-27 23:33 ` Alan Mackenzie
  2024-01-28  0:26   ` Stefan Kangas
  2024-01-28  6:09   ` Eli Zaretskii
  2024-01-28  4:28 ` Stefan Monnier via Emacs development discussions.
                   ` (3 subsequent siblings)
  4 siblings, 2 replies; 52+ messages in thread
From: Alan Mackenzie @ 2024-01-27 23:33 UTC (permalink / raw)
  To: Stefan Kangas; +Cc: emacs-devel

Hello, Stefan.

On Sat, Jan 27, 2024 at 13:36:50 -0800, Stefan Kangas wrote:
> Hi emacs-devel,

> After careful consideration and off-line discussions between Eli and
> myself, we have come up with the following proposed plan:

>  1. We will install cond* in core and let people who prefer it use it,
>     while people who prefer pcase are free to keep using pcase.

>  2. cond* vs pcase is to be considered a matter of stylistic preference.

>  3. There is no intention to forcibly replace pcase with cond* in our
>     code.

Thanks for taking the trouble to work this through.

Can you further confirm that there will be no technical advantages given
to pcase over cond*?  In particular, that condstar.el will be in
lisp/emacs-lisp, and that it will be available from early mid-bootstrap
onwards, just as pcase is?

> Everyone will be free to maintain the code that falls within their area
> of responsibility using the style that they like best.  We hope that
> this will make sense to proponents of both sides of the argument.

> I have myself expressed significant reservations about installing cond*
> in core.  The above could be seen as a politicians response to a
> technical problem, and to some extent it is.

> Our responsibility as maintainers is first and foremost to ensure that
> we can all work together, and unite under a common banner.  Our success
> as a project depends on it.  Thus, the last thing we want to do is to
> alienate any group of contributors, big or small.

On this point, it's worth noting that pcase was silently slipped into
Emacs in the dead of night without any public discussion, and was then
widely proliferated through working code, again without discussion.
That has relevance to "alienation", and goes some way towards explaining
my attitude towards cond* and pcase.

[ .... ]

-- 
Alan Mackenzie (Nuremberg, Germany).



^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-01-27 23:33 ` Alan Mackenzie
@ 2024-01-28  0:26   ` Stefan Kangas
  2024-01-28  2:43     ` Po Lu
                       ` (2 more replies)
  2024-01-28  6:09   ` Eli Zaretskii
  1 sibling, 3 replies; 52+ messages in thread
From: Stefan Kangas @ 2024-01-28  0:26 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: emacs-devel, Stefan Monnier

Alan Mackenzie <acm@muc.de> writes:

> Can you further confirm that there will be no technical advantages given
> to pcase over cond*?

I see cond* as an alternative to pcase for those that prefer it.
This is one consequence of deciding not to get rid of pcase.

> In particular, that condstar.el will be in lisp/emacs-lisp,

We didn't discuss that.  I'd put it in lisp/, myself.

> and that it will be available from early mid-bootstrap onwards, just
> as pcase is?

We didn't discuss that.  It sounds like a separate change from adding
cond* to core, and I'm not sure it makes sense to commit to it off-hand,
without first understanding the details.

In general, there is no point to loading something early unless it is
used early.  Do you have something more specific in mind?

> On this point, it's worth noting that pcase was silently slipped into
> Emacs in the dead of night without any public discussion, and was then
> widely proliferated through working code, again without discussion.
> That has relevance to "alienation", and goes some way towards explaining
> my attitude towards cond* and pcase.

I can't speak to that, as I wasn't around.

I would propose that we start looking forward, and go back to working on
the things that we enjoy and find interesting.  That's likely to be more
productive than discussing the details of how things happened or didn't
happen 14 years ago.



^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-01-28  0:26   ` Stefan Kangas
@ 2024-01-28  2:43     ` Po Lu
  2024-01-28  6:46       ` Eli Zaretskii
  2024-01-28  6:14     ` Eli Zaretskii
  2024-01-28 15:58     ` Alan Mackenzie
  2 siblings, 1 reply; 52+ messages in thread
From: Po Lu @ 2024-01-28  2:43 UTC (permalink / raw)
  To: Stefan Kangas; +Cc: Alan Mackenzie, emacs-devel, Stefan Monnier

Stefan Kangas <stefankangas@gmail.com> writes:

> I see cond* as an alternative to pcase for those that prefer it.
> This is one consequence of deciding not to get rid of pcase.

[...]

> We didn't discuss that.  It sounds like a separate change from adding
> cond* to core, and I'm not sure it makes sense to commit to it off-hand,
> without first understanding the details.
>
> In general, there is no point to loading something early unless it is
> used early.  Do you have something more specific in mind?

With consideration to its role as an alternative to pcase, it's
reasonable to request that it not be placed at a disadvantage by not
being available at the same stage of the bootstrap process as pcase.



^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-01-27 21:36 Installing cond* in core Stefan Kangas
  2024-01-27 23:33 ` Alan Mackenzie
@ 2024-01-28  4:28 ` Stefan Monnier via Emacs development discussions.
  2024-01-30  3:58   ` Richard Stallman
  2024-01-28 14:28 ` Emanuel Berg
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 52+ messages in thread
From: Stefan Monnier via Emacs development discussions. @ 2024-01-28  4:28 UTC (permalink / raw)
  To: emacs-devel

> I have myself expressed significant reservations about installing cond*
> in core.  The above could be seen as a politicians response to a
> technical problem, and to some extent it is.

I like the addition of binding constructs to `cond`, so I think `cond*`
could be a worthwhile addition, actually.

But I think the two pattern languages (that of `cond*`s `match*` and
that of Pcase) need to be unified, because they're already too similar
to justify having them both.  This would be a very simple change that
simplifies the implementation (and the doc) significantly.


        Stefan




^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-01-27 23:33 ` Alan Mackenzie
  2024-01-28  0:26   ` Stefan Kangas
@ 2024-01-28  6:09   ` Eli Zaretskii
  2024-01-28 12:38     ` Alan Mackenzie
  1 sibling, 1 reply; 52+ messages in thread
From: Eli Zaretskii @ 2024-01-28  6:09 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: stefankangas, emacs-devel

> Date: Sat, 27 Jan 2024 23:33:52 +0000
> Cc: emacs-devel@gnu.org
> From: Alan Mackenzie <acm@muc.de>
> 
> Can you further confirm that there will be no technical advantages given
> to pcase over cond*?

This remains to be seen.  Only actual usage of cond* and experience we
gain from that will allow us to realize the relative merits and
demerits of each one of the macros.

> In particular, that condstar.el will be in lisp/emacs-lisp

That's probably a good place, yes.

> and that it will be available from early mid-bootstrap onwards, just
> as pcase is?

Only if really needed.  I object in general to preloading anything
that is not actually needed, and for that reason I will keep an eye on
uses of cond* in preloaded files, with the purpose of avoiding that as
much as possible, so that we don't have to preload another package
unless we must.

> On this point, it's worth noting that pcase was silently slipped into
> Emacs in the dead of night without any public discussion, and was then
> widely proliferated through working code, again without discussion.

Please drop this attitude: it is not useful.  In Emacs development,
stuff is routinely "slipped into Emacs in the dead of the night
without any public discussion", for better and for worse.  I'm sure
that if you examine the logs of your own changes, you will see many
examples of that; I know I see that in mine and in most other's.
E.g., I installed a user-facing change just yesterday without asking
anyone's opinion.  This is how Emacs is developed for decades, and we
should by now realize that this is our strength, although it does have
known downsides.  The stuff that goes into the repository is sent to a
special mailing list, so people who want to be aware of things
"slipping in the dead of night" have ample opportunity to pay
attention and holler.



^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-01-28  0:26   ` Stefan Kangas
  2024-01-28  2:43     ` Po Lu
@ 2024-01-28  6:14     ` Eli Zaretskii
  2024-01-28 15:58     ` Alan Mackenzie
  2 siblings, 0 replies; 52+ messages in thread
From: Eli Zaretskii @ 2024-01-28  6:14 UTC (permalink / raw)
  To: Stefan Kangas; +Cc: acm, emacs-devel, monnier

> From: Stefan Kangas <stefankangas@gmail.com>
> Date: Sat, 27 Jan 2024 16:26:17 -0800
> Cc: emacs-devel@gnu.org, Stefan Monnier <monnier@iro.umontreal.ca>
> 
> Alan Mackenzie <acm@muc.de> writes:
> 
> > In particular, that condstar.el will be in lisp/emacs-lisp,
> 
> We didn't discuss that.  I'd put it in lisp/, myself.

FWIW, I think lisp/emacs-lisp/ is better, since we are talking about a
macro that is (going to be) part of Emacs Lisp.



^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-01-28  2:43     ` Po Lu
@ 2024-01-28  6:46       ` Eli Zaretskii
  2024-01-28  7:21         ` Po Lu
  0 siblings, 1 reply; 52+ messages in thread
From: Eli Zaretskii @ 2024-01-28  6:46 UTC (permalink / raw)
  To: Po Lu; +Cc: stefankangas, acm, emacs-devel, monnier

> From: Po Lu <luangruo@yahoo.com>
> Cc: Alan Mackenzie <acm@muc.de>,  emacs-devel@gnu.org,  Stefan Monnier
>  <monnier@iro.umontreal.ca>
> Date: Sun, 28 Jan 2024 10:43:59 +0800
> 
> With consideration to its role as an alternative to pcase, it's
> reasonable to request that it not be placed at a disadvantage by not
> being available at the same stage of the bootstrap process as pcase.

This is not a "fair competition" kind of issue.  Whether cond* will
fly on the same flight level as pcase, or higher or lower, will be
decided based on actual experience and other relevant technical
aspects, and nothing else.



^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-01-28  6:46       ` Eli Zaretskii
@ 2024-01-28  7:21         ` Po Lu
  2024-01-28  7:32           ` Eli Zaretskii
  0 siblings, 1 reply; 52+ messages in thread
From: Po Lu @ 2024-01-28  7:21 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: stefankangas, acm, emacs-devel, monnier

Eli Zaretskii <eliz@gnu.org> writes:

> This is not a "fair competition" kind of issue.  Whether cond* will
> fly on the same flight level as pcase, or higher or lower, will be
> decided based on actual experience and other relevant technical
> aspects, and nothing else.

Fair enough, but please don't object to:

  (eval-when-compile
    (require 'condstar))

in x-dnd.el and the like.



^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-01-28  7:21         ` Po Lu
@ 2024-01-28  7:32           ` Eli Zaretskii
  0 siblings, 0 replies; 52+ messages in thread
From: Eli Zaretskii @ 2024-01-28  7:32 UTC (permalink / raw)
  To: Po Lu; +Cc: stefankangas, acm, emacs-devel, monnier

> From: Po Lu <luangruo@yahoo.com>
> Cc: stefankangas@gmail.com,  acm@muc.de,  emacs-devel@gnu.org,
>   monnier@iro.umontreal.ca
> Date: Sun, 28 Jan 2024 15:21:20 +0800
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> > This is not a "fair competition" kind of issue.  Whether cond* will
> > fly on the same flight level as pcase, or higher or lower, will be
> > decided based on actual experience and other relevant technical
> > aspects, and nothing else.
> 
> Fair enough, but please don't object to:
> 
>   (eval-when-compile
>     (require 'condstar))
> 
> in x-dnd.el and the like.

Why should I object to that, assuming that the use of cond* in
whatever file does this is justified?



^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-01-28  6:09   ` Eli Zaretskii
@ 2024-01-28 12:38     ` Alan Mackenzie
  2024-01-28 13:02       ` Dmitry Gutov
                         ` (2 more replies)
  0 siblings, 3 replies; 52+ messages in thread
From: Alan Mackenzie @ 2024-01-28 12:38 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: stefankangas, emacs-devel

Hello, Eli.

On Sun, Jan 28, 2024 at 08:09:28 +0200, Eli Zaretskii wrote:
> > Date: Sat, 27 Jan 2024 23:33:52 +0000
> > Cc: emacs-devel@gnu.org
> > From: Alan Mackenzie <acm@muc.de>

[ .... ]

> > On this point, it's worth noting that pcase was silently slipped into
> > Emacs in the dead of night without any public discussion, and was then
> > widely proliferated through working code, again without discussion.

> Please drop this attitude: it is not useful.  In Emacs development,
> stuff is routinely "slipped into Emacs in the dead of the night
> without any public discussion", for better and for worse.

Pretending it didn't happen and failing to discuss it is not healthy for
the project.  Routine bug fixes, and uncontroversial stuff is committed
without discussion, yes.  Otherwise we'd be doing nothing else but silly
discussions on emacs-devel.

But changes which fundamentally affect the way everybody works should be
openly discussed, first.  pcase was such a change, and it was not
discussed.  Had if been discussed first, then:

(i) Its faults could have been identified and corrected, or at least
  ameliorated.
(ii) It would have had adequate documentation from the start.
(iii) Richard wouldn't be trying to fix things 14 years later by
  crafting a better alternative.

> I'm sure that if you examine the logs of your own changes, you will
> see many examples of that; I know I see that in mine and in most
> other's.

I don't think I have ever intalled anything controversial without
discussing it on the list.  I don't think you have, either.  For
example, when you enhanced redisplay a few years ago to display line
numbers, that was openly discussed.  A few bugs were found, and you made
one or two changes to the design in response to feedback.  That's the
way things should work.  It didn't happen for pcase.

> E.g., I installed a user-facing change just yesterday without asking
> anyone's opinion.  This is how Emacs is developed for decades, and we
> should by now realize that this is our strength, although it does have
> known downsides.  The stuff that goes into the repository is sent to a
> special mailing list, so people who want to be aware of things
> "slipping in the dead of night" have ample opportunity to pay
> attention and holler.

Controversial things should be discussed _before_ being committed to
master, before their designs are finalised, not afterwards.

-- 
Alan Mackenzie (Nuremberg, Germany).



^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-01-28 12:38     ` Alan Mackenzie
@ 2024-01-28 13:02       ` Dmitry Gutov
  2024-01-28 13:38         ` Alan Mackenzie
  2024-01-28 13:19       ` Emanuel Berg
  2024-01-28 14:18       ` Eli Zaretskii
  2 siblings, 1 reply; 52+ messages in thread
From: Dmitry Gutov @ 2024-01-28 13:02 UTC (permalink / raw)
  To: Alan Mackenzie, Eli Zaretskii; +Cc: stefankangas, emacs-devel

On 28/01/2024 14:38, Alan Mackenzie wrote:
> Pretending it didn't happen and failing to discuss it is not healthy for
> the project.  Routine bug fixes, and uncontroversial stuff is committed
> without discussion, yes.  Otherwise we'd be doing nothing else but silly
> discussions on emacs-devel.

The addition of pcase was a boon for the project.

Its uses in particularly important areas, like bytecomp, might have been 
a subject for discussion, but we don't really do that when all active 
contributors to an area of code agree with the technical decision.

And they did agree, otherwise the discussion would have had materialized 
at the spot.



^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-01-28 12:38     ` Alan Mackenzie
  2024-01-28 13:02       ` Dmitry Gutov
@ 2024-01-28 13:19       ` Emanuel Berg
  2024-01-28 14:18       ` Eli Zaretskii
  2 siblings, 0 replies; 52+ messages in thread
From: Emanuel Berg @ 2024-01-28 13:19 UTC (permalink / raw)
  To: emacs-devel

Alan Mackenzie wrote:

> Controversial things should be discussed _before_ being
> committed to master, before their designs are finalised,
> not afterwards.

I think most people will agree completely.

It is beneficial to software, but also to people.

Often what is important to people is they get to say their
views and be heard. Even if what actually happens after that
is something opposite to their point of view, it will be much
easier for them to take and let go of.

People shouldn't feel "first people ignores me, then I have to
deal with all the problems that came from it".

-- 
underground experts united
https://dataswamp.org/~incal




^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-01-28 13:02       ` Dmitry Gutov
@ 2024-01-28 13:38         ` Alan Mackenzie
  2024-01-28 13:48           ` Dmitry Gutov
  0 siblings, 1 reply; 52+ messages in thread
From: Alan Mackenzie @ 2024-01-28 13:38 UTC (permalink / raw)
  To: Dmitry Gutov; +Cc: Eli Zaretskii, stefankangas, emacs-devel

Hello, Dmitry.

On Sun, Jan 28, 2024 at 15:02:29 +0200, Dmitry Gutov wrote:
> On 28/01/2024 14:38, Alan Mackenzie wrote:
> > Pretending it didn't happen and failing to discuss it is not healthy for
> > the project.  Routine bug fixes, and uncontroversial stuff is committed
> > without discussion, yes.  Otherwise we'd be doing nothing else but silly
> > discussions on emacs-devel.

> The addition of pcase was a boon for the project.

You're missing the point.  pcase has flaws, and even now, 14 years
later, isn't satisfactorally documented.  All you seem to be saying is
that pcase is better than no pcase.  I'd agree with that.

But if pcase were so good, why is Richard writing a better replacement?

> Its uses in particularly important areas, like bytecomp, might have been 
> a subject for discussion, but we don't really do that when all active 
> contributors to an area of code agree with the technical decision.

You're being a bit vague there, but when have all active contributors to
any area of code been in agreement?

> And they did agree, otherwise the discussion would have had materialized 
> at the spot.

That's not the way things happened.  pcase was simply installed in
Emacs, with all its faults, and then proliferated round Emacs.  Where
was the room for discussion?  Discussion is difficult after something
has already been done.

If you're trying to say that pcase is better than nothing, so people use
it, then I'd agree.  But if you're trying to insist it's as good as it
could be, I'd ask you why Richard is spending a lot of time crafting a
better replacement.

-- 
Alan Mackenzie (Nuremberg, Germany).



^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-01-28 13:38         ` Alan Mackenzie
@ 2024-01-28 13:48           ` Dmitry Gutov
  2024-01-28 14:32             ` Alan Mackenzie
  0 siblings, 1 reply; 52+ messages in thread
From: Dmitry Gutov @ 2024-01-28 13:48 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: Eli Zaretskii, stefankangas, emacs-devel

On 28/01/2024 15:38, Alan Mackenzie wrote:
> Hello, Dmitry.
> 
> On Sun, Jan 28, 2024 at 15:02:29 +0200, Dmitry Gutov wrote:
>> On 28/01/2024 14:38, Alan Mackenzie wrote:
>>> Pretending it didn't happen and failing to discuss it is not healthy for
>>> the project.  Routine bug fixes, and uncontroversial stuff is committed
>>> without discussion, yes.  Otherwise we'd be doing nothing else but silly
>>> discussions on emacs-devel.
> 
>> The addition of pcase was a boon for the project.
> 
> You're missing the point.  pcase has flaws, and even now, 14 years
> later, isn't satisfactorally documented.  All you seem to be saying is
> that pcase is better than no pcase.  I'd agree with that.
> 
> But if pcase were so good, why is Richard writing a better replacement?

It all started with some people not understanding what pcase does and 
how it works. We're yet to see whether cond* is any better in those areas.

>> Its uses in particularly important areas, like bytecomp, might have been
>> a subject for discussion, but we don't really do that when all active
>> contributors to an area of code agree with the technical decision.
> 
> You're being a bit vague there, but when have all active contributors to
> any area of code been in agreement?

A lot of times. Or in enough of an agreement for there being no problems 
to discuss.

>> And they did agree, otherwise the discussion would have had materialized
>> at the spot.
> 
> That's not the way things happened.  pcase was simply installed in
> Emacs, with all its faults, and then proliferated round Emacs.  Where
> was the room for discussion?  Discussion is difficult after something
> has already been done.

We're doing it all the time by commenting on commits in an email to 
emacs-devel.

> If you're trying to say that pcase is better than nothing, so people use
> it, then I'd agree.  But if you're trying to insist it's as good as it
> could be,

One does not need to insist on that to disagree with your original 
statements.

> I'd ask you why Richard is spending a lot of time crafting a
> better replacement.

Rewriting other people's code that one doesn't understand has a long and 
varied history in software development. We even have a term for it.



^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-01-28 12:38     ` Alan Mackenzie
  2024-01-28 13:02       ` Dmitry Gutov
  2024-01-28 13:19       ` Emanuel Berg
@ 2024-01-28 14:18       ` Eli Zaretskii
  2024-01-28 15:26         ` Alan Mackenzie
  2 siblings, 1 reply; 52+ messages in thread
From: Eli Zaretskii @ 2024-01-28 14:18 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: stefankangas, emacs-devel

> Date: Sun, 28 Jan 2024 12:38:23 +0000
> Cc: stefankangas@gmail.com, emacs-devel@gnu.org
> From: Alan Mackenzie <acm@muc.de>
> 
> > Please drop this attitude: it is not useful.  In Emacs development,
> > stuff is routinely "slipped into Emacs in the dead of the night
> > without any public discussion", for better and for worse.
> 
> Pretending it didn't happen and failing to discuss it is not healthy for
> the project.

That's not what I said.

> Routine bug fixes, and uncontroversial stuff is committed without
> discussion, yes.

Those aren't the cases to which I alluded.

> > I'm sure that if you examine the logs of your own changes, you will
> > see many examples of that; I know I see that in mine and in most
> > other's.
> 
> I don't think I have ever intalled anything controversial without
> discussing it on the list.

The problem is that "controversial" is many times only evident in
retrospect.

> Controversial things should be discussed _before_ being committed to
> master, before their designs are finalised, not afterwards.

When we realize they are controversial, yes.  Many times, they are
not, and that's life.



^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-01-27 21:36 Installing cond* in core Stefan Kangas
  2024-01-27 23:33 ` Alan Mackenzie
  2024-01-28  4:28 ` Stefan Monnier via Emacs development discussions.
@ 2024-01-28 14:28 ` Emanuel Berg
  2024-01-30  3:58 ` Richard Stallman
  2024-03-16 20:53 ` Lynn Winebarger
  4 siblings, 0 replies; 52+ messages in thread
From: Emanuel Berg @ 2024-01-28 14:28 UTC (permalink / raw)
  To: emacs-devel

Stefan Kangas wrote:

> After careful consideration and off-line discussions between
> Eli and myself, we have come up with the following proposed
> plan [...]

A very good proposal and well put.

Hopefully people will accept it as a nod to everyone and an
invitation to move forward.

-- 
underground experts united
https://dataswamp.org/~incal




^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-01-28 13:48           ` Dmitry Gutov
@ 2024-01-28 14:32             ` Alan Mackenzie
  2024-01-28 16:54               ` Dmitry Gutov
  0 siblings, 1 reply; 52+ messages in thread
From: Alan Mackenzie @ 2024-01-28 14:32 UTC (permalink / raw)
  To: Dmitry Gutov; +Cc: Eli Zaretskii, stefankangas, emacs-devel

Hello, Dmitry.

On Sun, Jan 28, 2024 at 15:48:04 +0200, Dmitry Gutov wrote:
> On 28/01/2024 15:38, Alan Mackenzie wrote:
> > On Sun, Jan 28, 2024 at 15:02:29 +0200, Dmitry Gutov wrote:
> >> On 28/01/2024 14:38, Alan Mackenzie wrote:
> >>> Pretending it didn't happen and failing to discuss it is not healthy for
> >>> the project.  Routine bug fixes, and uncontroversial stuff is committed
> >>> without discussion, yes.  Otherwise we'd be doing nothing else but silly
> >>> discussions on emacs-devel.

> >> The addition of pcase was a boon for the project.

> > You're missing the point.  pcase has flaws, and even now, 14 years
> > later, isn't satisfactorally documented.  All you seem to be saying is
> > that pcase is better than no pcase.  I'd agree with that.

> > But if pcase were so good, why is Richard writing a better replacement?

> It all started with some people not understanding what pcase does and 
> how it works.

I don't think that's true.  People understand how it works.  Enough
people have difficulty reading and debugging pcase and its numerous
variants to matter.

> We're yet to see whether cond* is any better in those areas.

This is true, but it's highly likely cond* will be better.  It's being
designed by an expert designer, and has been through a phase of open
comment and revision.  Also, it takes advantage of the experience of
pcase.

[ .... ]

> > That's not the way things happened.  pcase was simply installed in
> > Emacs, with all its faults, and then proliferated round Emacs.  Where
> > was the room for discussion?  Discussion is difficult after something
> > has already been done.

> We're doing it all the time by commenting on commits in an email to 
> emacs-devel.

To have been effective, such comment would have resulted in the removal
or fundamental alteration of pcase long after it had been ground into the
core of Emacs.  That just wasn't going to happen.

You weren't there at the time.  I was.  I was completely unaware of pcase
happening, and it was a shock being confronted by it for the first time.

> > If you're trying to say that pcase is better than nothing, so people use
> > it, then I'd agree.  But if you're trying to insist it's as good as it
> > could be,

> One does not need to insist on that to disagree with your original 
> statements.

You cannot disagree with my original statement made last night.  As I
said, you weren't there at the time.

> > I'd ask you why Richard is spending a lot of time crafting a
> > better replacement.

> Rewriting other people's code that one doesn't understand has a long and 
> varied history in software development. We even have a term for it.

You're suggesting in that paragraph that the fault lies in Richard's lack
of ability.  That's uncalled for.  He has trouble reading and
understanding code written with pcase, as do I, and as do others here.
The fault is in pcase; it is flawed.  At the same time, it is not doubted
that there are people here fully conversant with pcase.  Having such a
split in the project is a bad thing.

-- 
Alan Mackenzie (Nuremberg, Germany).



^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-01-28 14:18       ` Eli Zaretskii
@ 2024-01-28 15:26         ` Alan Mackenzie
  2024-01-28 15:40           ` Eli Zaretskii
  0 siblings, 1 reply; 52+ messages in thread
From: Alan Mackenzie @ 2024-01-28 15:26 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: stefankangas, emacs-devel

Hello, Eli.

On Sun, Jan 28, 2024 at 16:18:33 +0200, Eli Zaretskii wrote:
> > Date: Sun, 28 Jan 2024 12:38:23 +0000
> > Cc: stefankangas@gmail.com, emacs-devel@gnu.org
> > From: Alan Mackenzie <acm@muc.de>

> > > Please drop this attitude: it is not useful.  In Emacs development,
> > > stuff is routinely "slipped into Emacs in the dead of the night
> > > without any public discussion", for better and for worse.

> > Pretending it didn't happen and failing to discuss it is not healthy for
> > the project.

> That's not what I said.

Sorry, I misunderstood you.

> > Routine bug fixes, and uncontroversial stuff is committed without
> > discussion, yes.

> Those aren't the cases to which I alluded.

All right, most commits without commenting on emacs-devel are
uncontroversial.  I am aware of a few others, about which I've not been
happy either.  Do you find the level of such commits acceptable, or do
you too wish they were discussed more?

> > > I'm sure that if you examine the logs of your own changes, you will
> > > see many examples of that; I know I see that in mine and in most
> > > other's.

> > I don't think I have ever intalled anything controversial without
> > discussing it on the list.

> The problem is that "controversial" is many times only evident in
> retrospect.

In the current case, the controversy was obvious.  How can you change the
meaning of the basic tokens ` and , without it being controversial?

[ .... ]

-- 
Alan Mackenzie (Nuremberg, Germany).



^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-01-28 15:26         ` Alan Mackenzie
@ 2024-01-28 15:40           ` Eli Zaretskii
  2024-01-30  3:57             ` Richard Stallman
  0 siblings, 1 reply; 52+ messages in thread
From: Eli Zaretskii @ 2024-01-28 15:40 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: stefankangas, emacs-devel

> Date: Sun, 28 Jan 2024 15:26:22 +0000
> Cc: stefankangas@gmail.com, emacs-devel@gnu.org
> From: Alan Mackenzie <acm@muc.de>
> 
> > > I don't think I have ever intalled anything controversial without
> > > discussing it on the list.
> 
> > The problem is that "controversial" is many times only evident in
> > retrospect.
> 
> In the current case, the controversy was obvious.

No, it wasn't.  It is only obvious today, and even today quite a few
active Emacs developers disagree that there is a problem.

So please, let's stop this argument that has no useful purpose.
Let's move on.



^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-01-28  0:26   ` Stefan Kangas
  2024-01-28  2:43     ` Po Lu
  2024-01-28  6:14     ` Eli Zaretskii
@ 2024-01-28 15:58     ` Alan Mackenzie
  2 siblings, 0 replies; 52+ messages in thread
From: Alan Mackenzie @ 2024-01-28 15:58 UTC (permalink / raw)
  To: Stefan Kangas; +Cc: emacs-devel, Stefan Monnier

Hello, Stefan.

On Sat, Jan 27, 2024 at 16:26:17 -0800, Stefan Kangas wrote:
> Alan Mackenzie <acm@muc.de> writes:

> > Can you further confirm that there will be no technical advantages given
> > to pcase over cond*?

> I see cond* as an alternative to pcase for those that prefer it.
> This is one consequence of deciding not to get rid of pcase.

> > In particular, that condstar.el will be in lisp/emacs-lisp,

> We didn't discuss that.  I'd put it in lisp/, myself.

That would make it unusable early in the bootstrap, putting it at a
disadvantage to pcase.

> > and that it will be available from early mid-bootstrap onwards, just
> > as pcase is?

> We didn't discuss that.  It sounds like a separate change from adding
> cond* to core, and I'm not sure it makes sense to commit to it off-hand,
> without first understanding the details.

> In general, there is no point to loading something early unless it is
> used early.  Do you have something more specific in mind?

Yes.  I outlined a few days ago my idea of tidying up the bootstrap
process by using cond* in macroexp.el, thus allowing the files loaded by
loadup.el to be in a more natural order.  This idea was vetoed by Eli,
at least for the moment.  But it seems like a good idea not to rule out
similar changes in the future.

> > On this point, it's worth noting that pcase was silently slipped into
> > Emacs in the dead of night without any public discussion, and was then
> > widely proliferated through working code, again without discussion.
> > That has relevance to "alienation", and goes some way towards explaining
> > my attitude towards cond* and pcase.

> I can't speak to that, as I wasn't around.

> I would propose that we start looking forward, and go back to working on
> the things that we enjoy and find interesting.  That's likely to be more
> productive than discussing the details of how things happened or didn't
> happen 14 years ago.

The events of 14 years ago have a profound influence on the present and
future.  I'm somewhat disappointed that the solution you've come up with
for cond* is not going to help me at all, though I understand how and
why you made it.  It's basically leave things as they are and ignore
cond*.  In ten years time, I'm still going to be faced with inscrutable
pcases when debugging code, and that will still slow me down just as
much as it does today.

-- 
Alan Mackenzie (Nuremberg, Germany).



^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-01-28 14:32             ` Alan Mackenzie
@ 2024-01-28 16:54               ` Dmitry Gutov
  2024-01-28 19:14                 ` Alan Mackenzie
  2024-01-30  3:56                 ` Richard Stallman
  0 siblings, 2 replies; 52+ messages in thread
From: Dmitry Gutov @ 2024-01-28 16:54 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: Eli Zaretskii, stefankangas, emacs-devel

Hi Alan,

On 28/01/2024 16:32, Alan Mackenzie wrote:

>>> But if pcase were so good, why is Richard writing a better replacement?
> 
>> It all started with some people not understanding what pcase does and
>> how it works.
> 
> I don't think that's true.  People understand how it works.  Enough
> people have difficulty reading and debugging pcase and its numerous
> variants to matter.

Richard explicitly asked a number of questions about what it does and 
how it works. A number others also expressed confusion about it, what 
the syntax means and how to interpret it.

>> We're yet to see whether cond* is any better in those areas.
> 
> This is true, but it's highly likely cond* will be better.  It's being
> designed by an expert designer, and has been through a phase of open
> comment and revision.  Also, it takes advantage of the experience of
> pcase.

A new macro that went through a few rounds of revision with no real 
consumers yet vs a macro that's been in use for 14 years.

Have you actually tried it yourself? E.g. to rewrite some code 
conversion logic that you urge to replace?

> [ .... ]
> 
>>> That's not the way things happened.  pcase was simply installed in
>>> Emacs, with all its faults, and then proliferated round Emacs.  Where
>>> was the room for discussion?  Discussion is difficult after something
>>> has already been done.
> 
>> We're doing it all the time by commenting on commits in an email to
>> emacs-devel.
> 
> To have been effective, such comment would have resulted in the removal
> or fundamental alteration of pcase long after it had been ground into the
> core of Emacs.  That just wasn't going to happen.
> 
> You weren't there at the time.  I was.  I was completely unaware of pcase
> happening, and it was a shock being confronted by it for the first time.

If you weren't aware, then you weren't working on that area of code, right?

>>> If you're trying to say that pcase is better than nothing, so people use
>>> it, then I'd agree.  But if you're trying to insist it's as good as it
>>> could be,
> 
>> One does not need to insist on that to disagree with your original
>> statements.
> 
> You cannot disagree with my original statement made last night.  As I
> said, you weren't there at the time.

I don't have to insist it's as good as it could be to object to throwing 
it out.

>>> I'd ask you why Richard is spending a lot of time crafting a
>>> better replacement.
> 
>> Rewriting other people's code that one doesn't understand has a long and
>> varied history in software development. We even have a term for it.
> 
> You're suggesting in that paragraph that the fault lies in Richard's lack
> of ability.  That's uncalled for.  He has trouble reading and
> understanding code written with pcase, as do I, and as do others here.
> The fault is in pcase; it is flawed.  At the same time, it is not doubted
> that there are people here fully conversant with pcase.  Having such a
> split in the project is a bad thing.

Having trouble with doing something is the literal definition of lack of 
ability.

Not the lack of talent, mind you, or potential, but insufficient 
understanding and skill with that tool (destructuring pattern 
matching--which is not unique to Elisp and has carryover from a number 
of other programming languages) is what motivated this whole argument.

And I'm really skeptical that when cond* goes through all the additional 
revisions and gets as powerful as pcase, that it won't raise all the 
similar questions. But I guess we shall see.



^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-01-28 16:54               ` Dmitry Gutov
@ 2024-01-28 19:14                 ` Alan Mackenzie
  2024-01-28 19:26                   ` Eli Zaretskii
  2024-01-28 20:43                   ` Dmitry Gutov
  2024-01-30  3:56                 ` Richard Stallman
  1 sibling, 2 replies; 52+ messages in thread
From: Alan Mackenzie @ 2024-01-28 19:14 UTC (permalink / raw)
  To: Dmitry Gutov; +Cc: Eli Zaretskii, stefankangas, emacs-devel

Hello, Dmitry.

On Sun, Jan 28, 2024 at 18:54:18 +0200, Dmitry Gutov wrote:
> Hi Alan,

> On 28/01/2024 16:32, Alan Mackenzie wrote:

[ .... ]

> >> We're yet to see whether cond* is any better in those areas.

> > This is true, but it's highly likely cond* will be better.  It's
> > being designed by an expert designer, and has been through a phase of
> > open comment and revision.  Also, it takes advantage of the
> > experience of pcase.

> A new macro that went through a few rounds of revision with no real 
> consumers yet vs a macro that's been in use for 14 years.

Yes.  The 14 year old macro has acknowledged faults, the new one doesn't
as far as anybody yet knows (although it has an area of controversy).

> Have you actually tried it yourself? E.g. to rewrite some code 
> conversion logic that you urge to replace?

No.  It is not yet working.

> > [ .... ]

> >>> That's not the way things happened.  pcase was simply installed in
> >>> Emacs, with all its faults, and then proliferated round Emacs.  Where
> >>> was the room for discussion?  Discussion is difficult after something
> >>> has already been done.

> >> We're doing it all the time by commenting on commits in an email to
> >> emacs-devel.

> > To have been effective, such comment would have resulted in the removal
> > or fundamental alteration of pcase long after it had been ground into the
> > core of Emacs.  That just wasn't going to happen.

> > You weren't there at the time.  I was.  I was completely unaware of pcase
> > happening, and it was a shock being confronted by it for the first time.

> If you weren't aware, then you weren't working on that area of code, right?

I was not.  pcase was first committed on 2010-08-04 in commit
d02c9bcd096c44b4e3d5e2834c75967b56cdecdd.  There was no prior discussion
about it on emacs-devel.

> >>> If you're trying to say that pcase is better than nothing, so people use
> >>> it, then I'd agree.  But if you're trying to insist it's as good as it
> >>> could be,

> >> One does not need to insist on that to disagree with your original
> >> statements.

> > You cannot disagree with my original statement made last night.  As I
> > said, you weren't there at the time.

> I don't have to insist it's as good as it could be to object to throwing 
> it out.

Your wish has been fulfilled.  Eli's and Stefan K's decision from last
night is 100% in favour of those who want the use of pcase to carry on
unchanged.  cond* has been consigned to a few niche uses before it is
even up and running.

> >>> I'd ask you why Richard is spending a lot of time crafting a
> >>> better replacement.

> >> Rewriting other people's code that one doesn't understand has a long and
> >> varied history in software development. We even have a term for it.

> > You're suggesting in that paragraph that the fault lies in Richard's lack
> > of ability.  That's uncalled for.  He has trouble reading and
> > understanding code written with pcase, as do I, and as do others here.
> > The fault is in pcase; it is flawed.  At the same time, it is not doubted
> > that there are people here fully conversant with pcase.  Having such a
> > split in the project is a bad thing.

> Having trouble with doing something is the literal definition of lack of 
> ability.

"Lack of ability" means a general inability to get things done, unless
qualified somehow.  (English is my first language.)  The fault lies in
pcase's unreadable syntax.  It is not personal.

> Not the lack of talent, mind you, or potential, but insufficient 
> understanding and skill with that tool (destructuring pattern 
> matching--which is not unique to Elisp and has carryover from a number 
> of other programming languages) is what motivated this whole argument.

Unlike most of Emacs Lisp, pcase is peculiar in that only some hackers
can get to grips with it.  You seems to be one of them, I am certainly
not, and neither is Richard.  The decision recently taken will mean you
need not trouble yourself with cond*, and people like me will continue to
be hindered and slowed down by pcase code for the foreseeable future.

> And I'm really skeptical that when cond* goes through all the additional 
> revisions and gets as powerful as pcase, that it won't raise all the 
> similar questions.

Possibly, but not inevitably.  Its syntax is kinder on the eye than
pcase's.  Maybe people would object to it because it requires the use of
multicharacter keywords and is bulkier, and so on.  I can't tell at this
stage.

> But I guess we shall see.

I doubt we will.  My proposal to test cond* by putting it into
macroexp.el was vetoed by Eli.  The decision taken was not to replace any
pcase with cond*.  Where does that leave cond*?

-- 
Alan Mackenzie (Nuremberg, Germany).



^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-01-28 19:14                 ` Alan Mackenzie
@ 2024-01-28 19:26                   ` Eli Zaretskii
  2024-01-28 20:43                   ` Dmitry Gutov
  1 sibling, 0 replies; 52+ messages in thread
From: Eli Zaretskii @ 2024-01-28 19:26 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: dmitry, stefankangas, emacs-devel

> Date: Sun, 28 Jan 2024 19:14:06 +0000
> Cc: Eli Zaretskii <eliz@gnu.org>, stefankangas@gmail.com, emacs-devel@gnu.org
> From: Alan Mackenzie <acm@muc.de>
> 
> > But I guess we shall see.
> 
> I doubt we will.  My proposal to test cond* by putting it into
> macroexp.el was vetoed by Eli.  The decision taken was not to replace any
> pcase with cond*.

You've misunderstood the decision.



^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-01-28 19:14                 ` Alan Mackenzie
  2024-01-28 19:26                   ` Eli Zaretskii
@ 2024-01-28 20:43                   ` Dmitry Gutov
  1 sibling, 0 replies; 52+ messages in thread
From: Dmitry Gutov @ 2024-01-28 20:43 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: Eli Zaretskii, stefankangas, emacs-devel

Hi Alan,

On 28/01/2024 21:14, Alan Mackenzie wrote:

>>>> We're yet to see whether cond* is any better in those areas.
> 
>>> This is true, but it's highly likely cond* will be better.  It's
>>> being designed by an expert designer, and has been through a phase of
>>> open comment and revision.  Also, it takes advantage of the
>>> experience of pcase.
> 
>> A new macro that went through a few rounds of revision with no real
>> consumers yet vs a macro that's been in use for 14 years.
> 
> Yes.  The 14 year old macro has acknowledged faults, the new one doesn't
> as far as anybody yet knows (although it has an area of controversy).

A bunch have already been mentioned. Including (but not limited to) the 
gratuitous incompatibility in syntax where it doesn't have to be 
different when Stefan mentioned lately.

>>> You weren't there at the time.  I was.  I was completely unaware of pcase
>>> happening, and it was a shock being confronted by it for the first time.
> 
>> If you weren't aware, then you weren't working on that area of code, right?
> 
> I was not.  pcase was first committed on 2010-08-04 in commit
> d02c9bcd096c44b4e3d5e2834c75967b56cdecdd.  There was no prior discussion
> about it on emacs-devel.

So, you wanted it to have been discussed with... simply someone? I'm 
guessing it must have been, in public or in private.

And if you were looking for the reasoning behind it, there are a few 
paragraphs about it in Stefan's paper: 
https://dl.acm.org/doi/pdf/10.1145/3386324 (Section 8.3, page 37).

>>>>> If you're trying to say that pcase is better than nothing, so people use
>>>>> it, then I'd agree.  But if you're trying to insist it's as good as it
>>>>> could be,
> 
>>>> One does not need to insist on that to disagree with your original
>>>> statements.
> 
>>> You cannot disagree with my original statement made last night.  As I
>>> said, you weren't there at the time.
> 
>> I don't have to insist it's as good as it could be to object to throwing
>> it out.
> 
> Your wish has been fulfilled.  Eli's and Stefan K's decision from last
> night is 100% in favour of those who want the use of pcase to carry on
> unchanged.  cond* has been consigned to a few niche uses before it is
> even up and running.

The proof is in the pudding. Personally, I *would* have put it in ELPA 
after some sufficiently broad announcement that there is this new 
powerful syntax endorsed by the maintainers of Emacs (or some of them), 
that the package authors could use. And see how well that turns out. The 
alternative-syntaxes packages (like f/s/dash) have been fairly popular 
among the package author community. But for some reason people who don't 
like pcase here, don't seem to like ELPA either.

For my part, I'm concerned that cond* turns out to be a weaker, 
arbitrarily incompatible version of pcase, and only practice can prove 
otherwise. Committing to changing a whole swaths of code to it risks 
fixing in stone any current deficiencies. Not to mention that taking 
over the code that Stefan still maintains to an extent would not be very 
friendly.

>> Not the lack of talent, mind you, or potential, but insufficient
>> understanding and skill with that tool (destructuring pattern
>> matching--which is not unique to Elisp and has carryover from a number
>> of other programming languages) is what motivated this whole argument.
> 
> Unlike most of Emacs Lisp, pcase is peculiar in that only some hackers
> can get to grips with it.  You seems to be one of them, I am certainly
> not, and neither is Richard.  The decision recently taken will mean you
> need not trouble yourself with cond*, and people like me will continue to
> be hindered and slowed down by pcase code for the foreseeable future.

Just to be clear, I like pcase not because I am particularly clever, but 
because my brain can only fit a limited number of things at a time 
(ideas, processes, or words on the screen), and a succinct syntax that 
uses principles I can recognize allows me to understand such programs 
quicker, cutting out the boilerplate.

>> And I'm really skeptical that when cond* goes through all the additional
>> revisions and gets as powerful as pcase, that it won't raise all the
>> similar questions.
> 
> Possibly, but not inevitably.  Its syntax is kinder on the eye than
> pcase's.  Maybe people would object to it because it requires the use of
> multicharacter keywords and is bulkier, and so on.  I can't tell at this
> stage.

If being slightly more verbose is going to be its only problem, I'd say 
we're in a good place.



^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-01-28 16:54               ` Dmitry Gutov
  2024-01-28 19:14                 ` Alan Mackenzie
@ 2024-01-30  3:56                 ` Richard Stallman
  1 sibling, 0 replies; 52+ messages in thread
From: Richard Stallman @ 2024-01-30  3:56 UTC (permalink / raw)
  To: Dmitry Gutov; +Cc: acm, eliz, stefankangas, emacs-devel

[[[ To any NSA and FBI agents reading my email: please consider    ]]]
[[[ whether defending the US Constitution against all enemies,     ]]]
[[[ foreign or domestic, requires you to follow Snowden's example. ]]]

  > Richard explicitly asked a number of questions about what it does and 
  > how it works. A number others also expressed confusion about it, what 
  > the syntax means and how to interpret it.

I found it hard to interpret some specific pcase constructs despite
having read its documentation.  It did not come naturally.  However,
with more experience I have learned to understand them.  It still
requires an annoying amount concentration, but I can do it.

I still think pcase is inconvenient in some of its uses -- once
one gets beyond the basic kinds of patterns.

I do not advocate removing or changing pcase itself.  Too much code
depends on it.  I do hope to discourage its use inside Emacs in
favor of cond*.

-- 
Dr Richard Stallman (https://stallman.org)
Chief GNUisance of the GNU Project (https://gnu.org)
Founder, Free Software Foundation (https://fsf.org)
Internet Hall-of-Famer (https://internethalloffame.org)





^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-01-28 15:40           ` Eli Zaretskii
@ 2024-01-30  3:57             ` Richard Stallman
  0 siblings, 0 replies; 52+ messages in thread
From: Richard Stallman @ 2024-01-30  3:57 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: acm, stefankangas, emacs-devel

[[[ To any NSA and FBI agents reading my email: please consider    ]]]
[[[ whether defending the US Constitution against all enemies,     ]]]
[[[ foreign or domestic, requires you to follow Snowden's example. ]]]

  > > > > I don't think I have ever intalled anything controversial without
  > > > > discussing it on the list.

It seems that nobody regarded pcase as posing an important design
issue when it was installed.  It is a kind of design issue we usually
don't think about.  We used to use an overflowing sink as the icon for
Emacs.  If some people think a feature is useful, we might try to improve
some details, and then we put it in.

We're not used to asking, "How do we avoid having duplicate features?
How do we achieve these goals while also keeping Emacs as simple as
possible?"  Instead we get a congeries of every feature that seemed
useful for something.

This issue arises for some sorts of features and not for others.  It
tends to be biggest for features that are rather unspecialized.  for
specialized things, it may not be an issue at all.

For instance, a package to communicate using the (fictional) Frotz
protocol does not raise an issue like this.  Some users will use the
Frotz protocol and others won't, but the existence of support for it
won't inconvenience developers much.  Unless you work on one of the
few things that actually interact with Frotz, you won't ever need to
know about that code.

By contrast, pcase does increase what Emacs developers need to learn,
because it is unspecialized.

We should all be on the lookout for proposals to install a construct
which is unspecialized enough to get used in many areas of the Emacs
code base.  In such a situation, we should make sure we fill that
niche in the cleanest possible way.

-- 
Dr Richard Stallman (https://stallman.org)
Chief GNUisance of the GNU Project (https://gnu.org)
Founder, Free Software Foundation (https://fsf.org)
Internet Hall-of-Famer (https://internethalloffame.org)





^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-01-27 21:36 Installing cond* in core Stefan Kangas
                   ` (2 preceding siblings ...)
  2024-01-28 14:28 ` Emanuel Berg
@ 2024-01-30  3:58 ` Richard Stallman
  2024-01-30 13:04   ` Eli Zaretskii
  2024-03-16 20:53 ` Lynn Winebarger
  4 siblings, 1 reply; 52+ messages in thread
From: Richard Stallman @ 2024-01-30  3:58 UTC (permalink / raw)
  To: Stefan Kangas; +Cc: emacs-devel

[[[ To any NSA and FBI agents reading my email: please consider    ]]]
[[[ whether defending the US Constitution against all enemies,     ]]]
[[[ foreign or domestic, requires you to follow Snowden's example. ]]]

  > After careful consideration and off-line discussions between Eli and
  > myself, we have come up with the following proposed plan:

  >  1. We will install cond* in core and let people who prefer it use it,
  >     while people who prefer pcase are free to keep using pcase.

  >  2. cond* vs pcase is to be considered a matter of stylistic preference.

  >  3. There is no intention to forcibly replace pcase with cond* in our
  >     code.

I think that is a good plan.

I would not propose to eliminate pcase, or obsolete it, because that
would break things and there is no good reason to do that.

  > In general, there is no point to loading something early unless it is
  > used early.  Do you have something more specific in mind?

If people use it where they wish, it will get used in some files that
are loaded early.  Putting it in emacs-lisp should not require any
special effort.  I think the code generated by `cond*' calls only
C-level primitives, except in one special case.

That special case is when the `rx' construct is used and match
subsequences are extracted as strings.  Then it generates calls to
`match-string' which is in subr.el.  It won't be hard to avoid regexp
matching in code loaded that early.  Indeed, I would be surprised to
see any use for it at that point.

There should be no need to preload cond* because it defines no
run-time support.  All its work is done at macroexpand time.

Perhaps there will be an issue about using it in *non-compiled* files
that are loaded early.  Is any such file complex enough to want to use
constructs such as cond* or pcase?



-- 
Dr Richard Stallman (https://stallman.org)
Chief GNUisance of the GNU Project (https://gnu.org)
Founder, Free Software Foundation (https://fsf.org)
Internet Hall-of-Famer (https://internethalloffame.org)





^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-01-28  4:28 ` Stefan Monnier via Emacs development discussions.
@ 2024-01-30  3:58   ` Richard Stallman
  2024-01-30 14:33     ` Stefan Monnier
  0 siblings, 1 reply; 52+ messages in thread
From: Richard Stallman @ 2024-01-30  3:58 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-devel

[[[ To any NSA and FBI agents reading my email: please consider    ]]]
[[[ whether defending the US Constitution against all enemies,     ]]]
[[[ foreign or domestic, requires you to follow Snowden's example. ]]]

  > But I think the two pattern languages (that of `cond*`s `match*` and
  > that of Pcase) need to be unified, because they're already too similar
  > to justify having them both.  This would be a very simple change that
  > simplifies the implementation (and the doc) significantly.

When I started designing cond*, I wanted to make its pattern language
more different than it actually is.  Especially I found _ to mean
"match anything and ignore it" to be clunky.  I wanted a simpler way
to say that.

For cdr slots, I found a much more convenient way.  But not for car
slots.  I could not find anything else distinguishable that was
simpler or better than _.  So I went with _.

I did manage to simplify the `pred' and `guard' constructs, replacing
them with constrained variables.

I changed some details of `rx', but that was to make it easier to
implement.  Indeed, it simply calls the Lisp facility `rx'.

Aside from `app', which cond* does not need, is anything else missing
(as opposed to, not yet implemented) from cond* patterns that pcase
has?  For now, I will assume not.

So, how could we make the two pattern languages compatible?

For `rx', I don't object to changing cond*'s `rx' to be compatible
with pcases's.  But I don't want that to implement that myself,
because I expect it to be a pain.  I don't know the pcase code so I
can't undertake to make cond* use that.  Can someone else write this
change in cond*?

For constrained variables, the path I'd be happy with is to make both
cond* and pcase implement both pattern interfaces.  That means cond*
constrained variables (both kinds) and `pred' and `guard'.

I could write that change in cond* if someone else writes the
corresponding change in pcase.


-- 
Dr Richard Stallman (https://stallman.org)
Chief GNUisance of the GNU Project (https://gnu.org)
Founder, Free Software Foundation (https://fsf.org)
Internet Hall-of-Famer (https://internethalloffame.org)





^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-01-30  3:58 ` Richard Stallman
@ 2024-01-30 13:04   ` Eli Zaretskii
  0 siblings, 0 replies; 52+ messages in thread
From: Eli Zaretskii @ 2024-01-30 13:04 UTC (permalink / raw)
  To: rms; +Cc: stefankangas, emacs-devel

> From: Richard Stallman <rms@gnu.org>
> Cc: emacs-devel@gnu.org
> Date: Mon, 29 Jan 2024 22:58:34 -0500
> 
> There should be no need to preload cond* because it defines no
> run-time support.  All its work is done at macroexpand time.

Which is why we should try to make sure all preloaded files require
cond* only with eval-when-compile.

> Perhaps there will be an issue about using it in *non-compiled* files
> that are loaded early.  Is any such file complex enough to want to use
> constructs such as cond* or pcase?

I don't think we have such files, at least not now.



^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-01-30  3:58   ` Richard Stallman
@ 2024-01-30 14:33     ` Stefan Monnier
  2024-02-02  3:39       ` Richard Stallman
  0 siblings, 1 reply; 52+ messages in thread
From: Stefan Monnier @ 2024-01-30 14:33 UTC (permalink / raw)
  To: Richard Stallman; +Cc: emacs-devel

> is anything else missing (as opposed to, not yet implemented) from
> cond* patterns that pcase has?  For now, I will assume not.
>
> So, how could we make the two pattern languages compatible?

I think the question is rather: why should we have two equivalent and
almost identical matching syntaxes and implementations?


        Stefan




^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-01-30 14:33     ` Stefan Monnier
@ 2024-02-02  3:39       ` Richard Stallman
  2024-02-02 13:17         ` Stefan Monnier
  0 siblings, 1 reply; 52+ messages in thread
From: Richard Stallman @ 2024-02-02  3:39 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-devel

[[[ To any NSA and FBI agents reading my email: please consider    ]]]
[[[ whether defending the US Constitution against all enemies,     ]]]
[[[ foreign or domestic, requires you to follow Snowden's example. ]]]

  > I think the question is rather: why should we have two equivalent and
  > almost identical matching syntaxes and implementations?

That is the easiest way to make cond* function.  (The only work needed
will be future maintenance.)  It is a way something I can feasibly
take.  I do not see any other alternative that I could feasibly do.

I do not understand the pcase code for implementing pattern matching,
and figuring it out would be the first hurdle of trying to fit it into
cond*, if that were done by me.

A priori, I suspect it won't fit.  cond*-subpat, which does this job
in cond*, passes data up and down the recursion.  I can't tell whether
pcase does something comparable.  Also, cond*-subpat does not generate
the overall structure of a clause -- its caller, cond*-match, does
that.  Based on looking at the Lisp code pcase produces, I expect that
it generates the overall structure of the clause as part of success
for a pattern.

Perhaps the work would be much less if done by you.  But I don't have
the option of doing this as you; I could only do it as me.

-- 
Dr Richard Stallman (https://stallman.org)
Chief GNUisance of the GNU Project (https://gnu.org)
Founder, Free Software Foundation (https://fsf.org)
Internet Hall-of-Famer (https://internethalloffame.org)





^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-02-02  3:39       ` Richard Stallman
@ 2024-02-02 13:17         ` Stefan Monnier
  2024-02-02 15:24           ` Alan Mackenzie
  2024-02-05  3:33           ` Richard Stallman
  0 siblings, 2 replies; 52+ messages in thread
From: Stefan Monnier @ 2024-02-02 13:17 UTC (permalink / raw)
  To: Richard Stallman; +Cc: emacs-devel

>   > I think the question is rather: why should we have two equivalent and
>   > almost identical matching syntaxes and implementations?
> That is the easiest way to make cond* function.

Only if you consider "easiest" at each small incremental step.
The overall cost of what you've done is already much higher :-)

> I do not understand the pcase code for implementing pattern matching,

You don't need to understand it.

> A priori, I suspect it won't fit.  cond*-subpat, which does this job
> in cond*, passes data up and down the recursion.  I can't tell whether
> pcase does something comparable.  Also, cond*-subpat does not generate
> the overall structure of a clause -- its caller, cond*-match, does
> that.

Throw away cond*-subpat.  Just rewrite

    (cond*
     ((match* PAT FORM) THEN)
     . ELSE)

into something like

    (pcase FORM
      (PAT THEN)
      (_ (cond* . ELSE)))

And presumably for

    (cond*
     ((match* PAT FORM))
     . REST)

you'd rewrite it to

    (pcase-let ((PATH FORM))
      (cond* . REST))

No need to look inside or understand `pcase.el` at all!



        Stefan




^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-02-02 13:17         ` Stefan Monnier
@ 2024-02-02 15:24           ` Alan Mackenzie
  2024-02-02 18:50             ` Stefan Monnier
  2024-02-05  3:33           ` Richard Stallman
  1 sibling, 1 reply; 52+ messages in thread
From: Alan Mackenzie @ 2024-02-02 15:24 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Richard Stallman, emacs-devel

Hello, Stefan.

On Fri, Feb 02, 2024 at 08:17:25 -0500, Stefan Monnier wrote:
> >   > I think the question is rather: why should we have two equivalent and
> >   > almost identical matching syntaxes and implementations?
> > That is the easiest way to make cond* function.

> Only if you consider "easiest" at each small incremental step.
> The overall cost of what you've done is already much higher :-)

> > I do not understand the pcase code for implementing pattern matching,

> You don't need to understand it.

I've needed to understand it, and I also found it difficult to
understand.

I've also found difficult the macro expansions which pcase produces.
cond* might be easier here, though it's too soon to tell.

> > A priori, I suspect it won't fit.  cond*-subpat, which does this job
> > in cond*, passes data up and down the recursion.  I can't tell whether
> > pcase does something comparable.  Also, cond*-subpat does not generate
> > the overall structure of a clause -- its caller, cond*-match, does
> > that.

> Throw away cond*-subpat.  Just rewrite

>     (cond*
>      ((match* PAT FORM) THEN)
>      . ELSE)

> into something like

>     (pcase FORM
>       (PAT THEN)
>       (_ (cond* . ELSE)))

> And presumably for

>     (cond*
>      ((match* PAT FORM))
>      . REST)

> you'd rewrite it to

>     (pcase-let ((PATH FORM))
>       (cond* . REST))

> No need to look inside or understand `pcase.el` at all!

But that would rule out the possibility of simplifying pcase by
rewriting it in terms of cond*.  ;-)

>         Stefan

-- 
Alan Mackenzie (Nuremberg, Germany).



^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-02-02 15:24           ` Alan Mackenzie
@ 2024-02-02 18:50             ` Stefan Monnier
  2024-02-04  4:47               ` Richard Stallman
  0 siblings, 1 reply; 52+ messages in thread
From: Stefan Monnier @ 2024-02-02 18:50 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: Richard Stallman, emacs-devel

> But that would rule out the possibility of simplifying pcase by
> rewriting it in terms of cond*.  ;-)

AFAICT the implementation of `match*` is not designed to handle the task
of matching against several patterns to select which branch to use.

So in order to reimplement `pcase` on top of `match*`s machinery we'd
have to choose between a significant rework/redesign of `match*`, or
a macro-expansion result which performs more repeated tests and
operations at runtime.


        Stefan




^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-02-02 18:50             ` Stefan Monnier
@ 2024-02-04  4:47               ` Richard Stallman
  2024-02-04 14:12                 ` Stefan Monnier
  0 siblings, 1 reply; 52+ messages in thread
From: Richard Stallman @ 2024-02-04  4:47 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: acm, emacs-devel

[[[ To any NSA and FBI agents reading my email: please consider    ]]]
[[[ whether defending the US Constitution against all enemies,     ]]]
[[[ foreign or domestic, requires you to follow Snowden's example. ]]]

  > AFAICT the implementation of `match*` is not designed to handle the task
  > of matching against several patterns to select which branch to use.

I do not follow you.  Could you please describe the issue more concretely?
Pehraps wiht an example  Then I could judge whether this is grave.


-- 
Dr Richard Stallman (https://stallman.org)
Chief GNUisance of the GNU Project (https://gnu.org)
Founder, Free Software Foundation (https://fsf.org)
Internet Hall-of-Famer (https://internethalloffame.org)





^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-02-04  4:47               ` Richard Stallman
@ 2024-02-04 14:12                 ` Stefan Monnier
  2024-02-06  3:49                   ` Richard Stallman
  0 siblings, 1 reply; 52+ messages in thread
From: Stefan Monnier @ 2024-02-04 14:12 UTC (permalink / raw)
  To: Richard Stallman; +Cc: acm, emacs-devel

> > AFAICT the implementation of `match*` is not designed to handle the task
> > of matching against several patterns to select which branch to use.
> I do not follow you.  Could you please describe the issue more concretely?
> Pehraps wiht an example  Then I could judge whether this is grave.

When matching EXP against patterns PAT1..PATn, Pcase is careful to share
the common part of those patterns in the resulting code, so that the
resulting code will not test (consp EXP) more than once, for example.

Try (cond* ((match* `(a1 . ,b1) EXP) ...) ((match* `(a2 . ,b2) EXP) ...))
and see how, before testing `a2`, it re-tests whether EXP is `consp` and
it re-extracts its `car`, even though it already just did those very
same operations.

Of course, the same happens with my PoC `pcase*` addition to `cond*`.
But not if you do (pcase EXP (`(a1 . ,b1) ...) (`(a2 . ,b2) ...)).


        Stefan




^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-02-02 13:17         ` Stefan Monnier
  2024-02-02 15:24           ` Alan Mackenzie
@ 2024-02-05  3:33           ` Richard Stallman
  2024-02-05 12:39             ` Stefan Monnier
  1 sibling, 1 reply; 52+ messages in thread
From: Richard Stallman @ 2024-02-05  3:33 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-devel

[[[ To any NSA and FBI agents reading my email: please consider    ]]]
[[[ whether defending the US Constitution against all enemies,     ]]]
[[[ foreign or domestic, requires you to follow Snowden's example. ]]]

Rewriting clause by clause is an interesting idea.
However, there are problems to solve.

  > Throw away cond*-subpat.  Just rewrite

cond* has extended the patterns.
This would discard those extensions, so I have to say no.

Rewriting using pcase could be acceptable if those extensions are
implemeted in pcase.  You would be able to do that, if you want to.

  >     (cond*
  >      ((match* PAT FORM) THEN)
  >      . ELSE)

That method works for exiting match* clauses, and this

      > (cond*
      >  ((match* PAT FORM))
      >  . REST)

for empty no-exit match* clauses, But there are also nonempty ni-exit
clauses:

  >     (cond*
  >      (:no-exit (match* PAT FORM) THEN)
  >      . ALWAYS)

Can rewriting handle that?

-- 
Dr Richard Stallman (https://stallman.org)
Chief GNUisance of the GNU Project (https://gnu.org)
Founder, Free Software Foundation (https://fsf.org)
Internet Hall-of-Famer (https://internethalloffame.org)





^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-02-05  3:33           ` Richard Stallman
@ 2024-02-05 12:39             ` Stefan Monnier
  2024-03-13  2:27               ` Richard Stallman
  0 siblings, 1 reply; 52+ messages in thread
From: Stefan Monnier @ 2024-02-05 12:39 UTC (permalink / raw)
  To: Richard Stallman; +Cc: emacs-devel

> But there are also nonempty ni-exit clauses:
>
>   >     (cond*
>   >      (:no-exit (match* PAT FORM) THEN)
>   >      . ALWAYS)
>
> Can rewriting handle that?

Most likely, yes, tho I have no idea what the above means and haven't
seen the corresponding doc&code, so I can't guarantee it.

Assuming it means "if PAT matches, execute THEN (with the corresponding
bindings) for its side effects, and in all cases continue with ALWAYS
without PAT's bindings", then it's just

    (progn (pcase FORM ((PAT THEN)))
           (cond* . ALWAYS))

so that would be trivial to add, of course.


- Stefan




^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-02-04 14:12                 ` Stefan Monnier
@ 2024-02-06  3:49                   ` Richard Stallman
  0 siblings, 0 replies; 52+ messages in thread
From: Richard Stallman @ 2024-02-06  3:49 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: acm, emacs-devel

[[[ To any NSA and FBI agents reading my email: please consider    ]]]
[[[ whether defending the US Constitution against all enemies,     ]]]
[[[ foreign or domestic, requires you to follow Snowden's example. ]]]

  > When matching EXP against patterns PAT1..PATn, Pcase is careful to share
  > the common part of those patterns in the resulting code, so that the
  > resulting code will not test (consp EXP) more than once, for example.

Now I understand.  It is a good optimization.

-- 
Dr Richard Stallman (https://stallman.org)
Chief GNUisance of the GNU Project (https://gnu.org)
Founder, Free Software Foundation (https://fsf.org)
Internet Hall-of-Famer (https://internethalloffame.org)





^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-02-05 12:39             ` Stefan Monnier
@ 2024-03-13  2:27               ` Richard Stallman
  2024-03-13  3:05                 ` Stefan Monnier
  0 siblings, 1 reply; 52+ messages in thread
From: Richard Stallman @ 2024-03-13  2:27 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-devel

[[[ To any NSA and FBI agents reading my email: please consider    ]]]
[[[ whether defending the US Constitution against all enemies,     ]]]
[[[ foreign or domestic, requires you to follow Snowden's example. ]]]

  > > But there are also nonempty ni-exit clauses:
  > >
  > >   >     (cond*
  > >   >      (:no-exit (match* PAT FORM) THEN)
  > >   >      . ALWAYS)
  > >
  > > Can rewriting handle that?

  > Assuming it means "if PAT matches, execute THEN (with the corresponding
  > bindings) for its side effects, and in all cases continue with ALWAYS
  > without PAT's bindings", then it's just

The bindings cover both THEN and ALWAYS.

-- 
Dr Richard Stallman (https://stallman.org)
Chief GNUisance of the GNU Project (https://gnu.org)
Founder, Free Software Foundation (https://fsf.org)
Internet Hall-of-Famer (https://internethalloffame.org)





^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-03-13  2:27               ` Richard Stallman
@ 2024-03-13  3:05                 ` Stefan Monnier
  2024-03-16  1:45                   ` Richard Stallman
  0 siblings, 1 reply; 52+ messages in thread
From: Stefan Monnier @ 2024-03-13  3:05 UTC (permalink / raw)
  To: Richard Stallman; +Cc: emacs-devel

>   > > But there are also nonempty ni-exit clauses:
>   > >
>   > >   >     (cond*
>   > >   >      (:no-exit (match* PAT FORM) THEN)
>   > >   >      . ALWAYS)
>   > >
>   > > Can rewriting handle that?
>
>   > Assuming it means "if PAT matches, execute THEN (with the corresponding
>   > bindings) for its side effects, and in all cases continue with ALWAYS
>   > without PAT's bindings", then it's just
>
> The bindings cover both THEN and ALWAYS.

Then I don't understand what's the intended semantics: how can you use
PAT's bindings over ALWAYS when PAT failed to match?


        Stefan




^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-03-13  3:05                 ` Stefan Monnier
@ 2024-03-16  1:45                   ` Richard Stallman
  2024-03-16 16:15                     ` Stefan Monnier
  0 siblings, 1 reply; 52+ messages in thread
From: Richard Stallman @ 2024-03-16  1:45 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-devel

[[[ To any NSA and FBI agents reading my email: please consider    ]]]
[[[ whether defending the US Constitution against all enemies,     ]]]
[[[ foreign or domestic, requires you to follow Snowden's example. ]]]

  > Then I don't understand what's the intended semantics: how can you use
  > PAT's bindings over ALWAYS when PAT failed to match?

It makes bindings for all the variables it could bind, independent of
which ones matched in a given case.

pcase does that to, I found out by experiment.

-- 
Dr Richard Stallman (https://stallman.org)
Chief GNUisance of the GNU Project (https://gnu.org)
Founder, Free Software Foundation (https://fsf.org)
Internet Hall-of-Famer (https://internethalloffame.org)





^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-03-16  1:45                   ` Richard Stallman
@ 2024-03-16 16:15                     ` Stefan Monnier
  2024-03-18  2:42                       ` Richard Stallman
  0 siblings, 1 reply; 52+ messages in thread
From: Stefan Monnier @ 2024-03-16 16:15 UTC (permalink / raw)
  To: Richard Stallman; +Cc: emacs-devel

>   > Then I don't understand what's the intended semantics: how can you use
>   > PAT's bindings over ALWAYS when PAT failed to match?
> It makes bindings for all the variables it could bind, independent of
> which ones matched in a given case.

I don't understand, sorry.  Can you give some examples?

> pcase does that to, I found out by experiment.

Same here.  Are you referring to cases such as

    (pcase EXP
      ((or `(,a ,b)
           5)
       (BODY)))

where `a` and `b` will be bound to nil when EXP evaluates to 5?


        Stefan




^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-01-27 21:36 Installing cond* in core Stefan Kangas
                   ` (3 preceding siblings ...)
  2024-01-30  3:58 ` Richard Stallman
@ 2024-03-16 20:53 ` Lynn Winebarger
  2024-03-18  2:41   ` Richard Stallman
  4 siblings, 1 reply; 52+ messages in thread
From: Lynn Winebarger @ 2024-03-16 20:53 UTC (permalink / raw)
  To: Stefan Kangas; +Cc: emacs-devel

On Sat, Jan 27, 2024 at 4:37 PM Stefan Kangas <stefankangas@gmail.com> wrote:
[nice sentiments, but then...]
> If it is true that Python "can be seen as a dialect of Lisp with
> 'traditional' syntax",[2] then perhaps it is our turn to take a cue
> from them.
[...]
> [2]  https://norvig.com/python-lisp.html

How about even if that claim is false?  Because the modern inheritor
of lisp implementation technology is clearly Javascript, at least in
V8.  Among other things, the heap can be dumped for later loading
(again, V8-specific as far as I know).  And my experience is that
Norvig's classification of Python's storage management as "automatic"
to be questionable.
This observation is completely off-topic, of course.

Lynn



^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-03-16 20:53 ` Lynn Winebarger
@ 2024-03-18  2:41   ` Richard Stallman
  2024-03-19 19:48     ` Lynn Winebarger
  0 siblings, 1 reply; 52+ messages in thread
From: Richard Stallman @ 2024-03-18  2:41 UTC (permalink / raw)
  To: Lynn Winebarger; +Cc: stefankangas, emacs-devel

[[[ To any NSA and FBI agents reading my email: please consider    ]]]
[[[ whether defending the US Constitution against all enemies,     ]]]
[[[ foreign or domestic, requires you to follow Snowden's example. ]]]

Having expressions represented as lists, so that programs can easily
operate on them, is the heart of Lisp.  Languages which don't do that
may have a partial resemblance to Lisp, but they also have a major
difference from Lisp.

-- 
Dr Richard Stallman (https://stallman.org)
Chief GNUisance of the GNU Project (https://gnu.org)
Founder, Free Software Foundation (https://fsf.org)
Internet Hall-of-Famer (https://internethalloffame.org)





^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-03-16 16:15                     ` Stefan Monnier
@ 2024-03-18  2:42                       ` Richard Stallman
  2024-03-18  3:06                         ` Stefan Monnier
  0 siblings, 1 reply; 52+ messages in thread
From: Richard Stallman @ 2024-03-18  2:42 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-devel

[[[ To any NSA and FBI agents reading my email: please consider    ]]]
[[[ whether defending the US Constitution against all enemies,     ]]]
[[[ foreign or domestic, requires you to follow Snowden's example. ]]]

  > Same here.  Are you referring to cases such as

  >     (pcase EXP
  >       ((or `(,a ,b)
  >            5)
  >        (BODY)))

  > where `a` and `b` will be bound to nil when EXP evaluates to 5?

Yes.

-- 
Dr Richard Stallman (https://stallman.org)
Chief GNUisance of the GNU Project (https://gnu.org)
Founder, Free Software Foundation (https://fsf.org)
Internet Hall-of-Famer (https://internethalloffame.org)





^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-03-18  2:42                       ` Richard Stallman
@ 2024-03-18  3:06                         ` Stefan Monnier
  2024-03-19  9:19                           ` Peter Hull
  2024-03-20 22:40                           ` Richard Stallman
  0 siblings, 2 replies; 52+ messages in thread
From: Stefan Monnier @ 2024-03-18  3:06 UTC (permalink / raw)
  To: Richard Stallman; +Cc: emacs-devel

>   > Same here.  Are you referring to cases such as
>
>   >     (pcase EXP
>   >       ((or `(,a ,b)
>   >            5)
>   >        (BODY)))
>
>   > where `a` and `b` will be bound to nil when EXP evaluates to 5?
>
> Yes.

O, but here the (overall) pattern *does* match, and the semantics can be
described as: any variable that is not bound by the specific match but
that could be bound by other ways to match the pattern gets
a nil binding.

In the case of

    (cond*
     (:no-exit (match* PAT FORM) THEN)
     . ALWAYS)

does that mean that the semantics you provide is in ALWAYS, the vars
bound by PAT are bound to the matched values when PAT did match and they
are all bound to nil otherwise?
Or can some of the vars in PAT get bound to a non-nil value when PAT
fails to match?  If so, which ones?


        Stefan




^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-03-18  3:06                         ` Stefan Monnier
@ 2024-03-19  9:19                           ` Peter Hull
  2024-03-20 22:40                           ` Richard Stallman
  1 sibling, 0 replies; 52+ messages in thread
From: Peter Hull @ 2024-03-19  9:19 UTC (permalink / raw)
  To: emacs-devel

I'd like to follow along with this - please could someone remind me
where I can find the latest implementation of cond*? I know I've seen
it as a patch submitted to this list but I can't seem to find it now,
and "cond*" does not seem to be a search-engine-friendly term (even
emacs-devel's namazu struggles)
Thanks,
Peter



^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-03-18  2:41   ` Richard Stallman
@ 2024-03-19 19:48     ` Lynn Winebarger
  0 siblings, 0 replies; 52+ messages in thread
From: Lynn Winebarger @ 2024-03-19 19:48 UTC (permalink / raw)
  To: rms; +Cc: stefankangas, emacs-devel

On Sun, Mar 17, 2024 at 10:41 PM Richard Stallman <rms@gnu.org> wrote:
> Having expressions represented as lists, so that programs can easily
> operate on them, is the heart of Lisp.  Languages which don't do that
> may have a partial resemblance to Lisp, but they also have a major
> difference from Lisp.

My response was a bit tongue-in-cheek, but I did restrict it to "lisp
implementation technology".  If someone on this list wants to learn
about efficient implementation techniques for a dynamically typed and
interactive language that might be ported to emacs lisp, they would be
better served by studying the v8 implementation than python's
internals.  Especially when it comes to, say, multi-threaded parallel
processing, garbage collection, specializing compiled code for
dynamically typed objects, and similar topics of interest.  IMNSHO.

Lynn



^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-03-18  3:06                         ` Stefan Monnier
  2024-03-19  9:19                           ` Peter Hull
@ 2024-03-20 22:40                           ` Richard Stallman
  2024-03-20 22:54                             ` Stefan Monnier
  1 sibling, 1 reply; 52+ messages in thread
From: Richard Stallman @ 2024-03-20 22:40 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-devel

[[[ To any NSA and FBI agents reading my email: please consider    ]]]
[[[ whether defending the US Constitution against all enemies,     ]]]
[[[ foreign or domestic, requires you to follow Snowden's example. ]]]

  > does that mean that the semantics you provide is in ALWAYS, the vars
  > bound by PAT are bound to the matched values when PAT did match and they
  > are all bound to nil otherwise?

That is what makes sense, and that is what I think the code does.

-- 
Dr Richard Stallman (https://stallman.org)
Chief GNUisance of the GNU Project (https://gnu.org)
Founder, Free Software Foundation (https://fsf.org)
Internet Hall-of-Famer (https://internethalloffame.org)





^ permalink raw reply	[flat|nested] 52+ messages in thread

* Re: Installing cond* in core
  2024-03-20 22:40                           ` Richard Stallman
@ 2024-03-20 22:54                             ` Stefan Monnier
  0 siblings, 0 replies; 52+ messages in thread
From: Stefan Monnier @ 2024-03-20 22:54 UTC (permalink / raw)
  To: Richard Stallman; +Cc: emacs-devel

> [[[ To any NSA and FBI agents reading my email: please consider    ]]]
> [[[ whether defending the US Constitution against all enemies,     ]]]
> [[[ foreign or domestic, requires you to follow Snowden's example. ]]]
>
>   > does that mean that the semantics you provide is in ALWAYS, the vars
>   > bound by PAT are bound to the matched values when PAT did match and they
>   > are all bound to nil otherwise?
>
> That is what makes sense, and that is what I think the code does.

OK, so it "behaves the same" as what Pcase does for `(or PAT _)`.
The semantics sounds fine, then and would be easy enough to reproduce with Pcase.
I wonder how often this :no-exit form is useful, tho.


        Stefan




^ permalink raw reply	[flat|nested] 52+ messages in thread

end of thread, other threads:[~2024-03-20 22:54 UTC | newest]

Thread overview: 52+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-01-27 21:36 Installing cond* in core Stefan Kangas
2024-01-27 23:33 ` Alan Mackenzie
2024-01-28  0:26   ` Stefan Kangas
2024-01-28  2:43     ` Po Lu
2024-01-28  6:46       ` Eli Zaretskii
2024-01-28  7:21         ` Po Lu
2024-01-28  7:32           ` Eli Zaretskii
2024-01-28  6:14     ` Eli Zaretskii
2024-01-28 15:58     ` Alan Mackenzie
2024-01-28  6:09   ` Eli Zaretskii
2024-01-28 12:38     ` Alan Mackenzie
2024-01-28 13:02       ` Dmitry Gutov
2024-01-28 13:38         ` Alan Mackenzie
2024-01-28 13:48           ` Dmitry Gutov
2024-01-28 14:32             ` Alan Mackenzie
2024-01-28 16:54               ` Dmitry Gutov
2024-01-28 19:14                 ` Alan Mackenzie
2024-01-28 19:26                   ` Eli Zaretskii
2024-01-28 20:43                   ` Dmitry Gutov
2024-01-30  3:56                 ` Richard Stallman
2024-01-28 13:19       ` Emanuel Berg
2024-01-28 14:18       ` Eli Zaretskii
2024-01-28 15:26         ` Alan Mackenzie
2024-01-28 15:40           ` Eli Zaretskii
2024-01-30  3:57             ` Richard Stallman
2024-01-28  4:28 ` Stefan Monnier via Emacs development discussions.
2024-01-30  3:58   ` Richard Stallman
2024-01-30 14:33     ` Stefan Monnier
2024-02-02  3:39       ` Richard Stallman
2024-02-02 13:17         ` Stefan Monnier
2024-02-02 15:24           ` Alan Mackenzie
2024-02-02 18:50             ` Stefan Monnier
2024-02-04  4:47               ` Richard Stallman
2024-02-04 14:12                 ` Stefan Monnier
2024-02-06  3:49                   ` Richard Stallman
2024-02-05  3:33           ` Richard Stallman
2024-02-05 12:39             ` Stefan Monnier
2024-03-13  2:27               ` Richard Stallman
2024-03-13  3:05                 ` Stefan Monnier
2024-03-16  1:45                   ` Richard Stallman
2024-03-16 16:15                     ` Stefan Monnier
2024-03-18  2:42                       ` Richard Stallman
2024-03-18  3:06                         ` Stefan Monnier
2024-03-19  9:19                           ` Peter Hull
2024-03-20 22:40                           ` Richard Stallman
2024-03-20 22:54                             ` Stefan Monnier
2024-01-28 14:28 ` Emanuel Berg
2024-01-30  3:58 ` Richard Stallman
2024-01-30 13:04   ` Eli Zaretskii
2024-03-16 20:53 ` Lynn Winebarger
2024-03-18  2:41   ` Richard Stallman
2024-03-19 19:48     ` Lynn Winebarger

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