* bug#28736: 24.5; doc of `push'
[not found] ` <<83wp45sgrm.fsf@gnu.org>
@ 2017-10-08 17:48 ` Drew Adams
2017-10-08 18:13 ` Eli Zaretskii
0 siblings, 1 reply; 10+ messages in thread
From: Drew Adams @ 2017-10-08 17:48 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: 28736
> > The right question is why is it a problem to document this?
>
> <Shrug> Because we don't want to guarantee the return value won't
> change in the future?
Are you sure? When was that decided? Just now?
Why would we want to do that? Gratuitously acting different
from Common Lisp (and all other Lisps?) in this case wouldn't
seem to be advantageous. Do you see a good reason to do that?
And why "<Shrug>"? I wonder if your answer might have been
different if a different person had filed this bug...
^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#28736: 24.5; doc of `push'
2017-10-08 17:48 ` bug#28736: 24.5; doc of `push' Drew Adams
@ 2017-10-08 18:13 ` Eli Zaretskii
2021-09-25 15:41 ` Stefan Kangas
0 siblings, 1 reply; 10+ messages in thread
From: Eli Zaretskii @ 2017-10-08 18:13 UTC (permalink / raw)
To: Drew Adams; +Cc: 28736
> Date: Sun, 8 Oct 2017 10:48:32 -0700 (PDT)
> From: Drew Adams <drew.adams@oracle.com>
> Cc: 28736@debbugs.gnu.org
>
> > > The right question is why is it a problem to document this?
> >
> > <Shrug> Because we don't want to guarantee the return value won't
> > change in the future?
>
> Are you sure?
No.
> When was that decided?
I don't know if it was decided and when, I was just wondering whether
the lack of documentation is deliberate or an omission.
> Just now?
That's uncalled-for.
> And why "<Shrug>"? I wonder if your answer might have been
> different if a different person had filed this bug...
Why would you wonder about that? Have I ever treated your bug reports
different from anyone else's?
^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#28736: 24.5; doc of `push'
2017-10-08 18:13 ` Eli Zaretskii
@ 2021-09-25 15:41 ` Stefan Kangas
2021-09-25 16:43 ` bug#28736: [External] : " Drew Adams
0 siblings, 1 reply; 10+ messages in thread
From: Stefan Kangas @ 2021-09-25 15:41 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: 28736
tags 28736 wontfix notabug
close 28736
thanks
Eli Zaretskii <eliz@gnu.org> writes:
>> Date: Sun, 8 Oct 2017 10:48:32 -0700 (PDT)
>> From: Drew Adams <drew.adams@oracle.com>
>> Cc: 28736@debbugs.gnu.org
>>
>> > > The right question is why is it a problem to document this?
>> >
>> > <Shrug> Because we don't want to guarantee the return value won't
>> > change in the future?
>>
>> Are you sure?
>
> No.
The question here is if the return value of `push' should be documented.
I took a look at Common Lisp, and they do not document its return
value.[1] I think it's fine for us to also not document it, unless someone
can show a clear reason why it should be.
I'm therefore closing this bug report.
Footnotes:
[1] http://clhs.lisp.se/Body/m_push.htm
^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#28736: [External] : Re: bug#28736: 24.5; doc of `push'
2021-09-25 15:41 ` Stefan Kangas
@ 2021-09-25 16:43 ` Drew Adams
0 siblings, 0 replies; 10+ messages in thread
From: Drew Adams @ 2021-09-25 16:43 UTC (permalink / raw)
To: Stefan Kangas, Eli Zaretskii; +Cc: 28736@debbugs.gnu.org
> >> > > The right question is why is it a problem to document this?
> >> >
> >> > <Shrug> Because we don't want to guarantee the return value won't
> >> > change in the future?
> >>
> >> Are you sure?
> >
> > No.
>
> The question here is if the return value of `push' should be
> documented.
>
> I took a look at Common Lisp, and they do not document its return
> value.[1] I think it's fine for us to also not document it, unless
> someone can show a clear reason why it should be.
>
> I'm therefore closing this bug report.
> Footnotes:
> [1] http://clhs.lisp.se/Body/m_push.htm
Don't look to the Common Lisp Hyperspec as a complete
definition of the language. It's just a quick way to
get some info (IMO).
Common Lisp The Language (2nd edition) is where to
look. Especially for design choices, semantics, and
reasons behind the design.
CLTL2 says this about `push' (similarly `pushnew'):
The effect of (push item place) is roughly equivalent to
(setf place (cons item place))
except that the latter would evaluate any subforms of
place twice, while push takes care to evaluate them
only once. Moreover, for certain place forms push may
be significantly more efficient than the setf version.
And what is the effect of `setf' with a cons? CLTL2
tells us:
The ultimate result of evaluating a setf form is the
value of newvalue.
`setf', in all its myriad possibilities, including
user-defined setf methods, is, I think, specified as
returning the new (just set) value.
I agree that the Common Lisp doc could be more explicit
about this, but my reading of it is that `push' returns
the new value - that's part of its specified behavior.
Other readers may disagree.
For `push':
https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node149.html
For `setf':
https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node80.html
Examples (`push', `setf'):
https://www.csee.umbc.edu/courses/331/resources/lisp/LISP-tutorial.html#Setf
___
Note, however, that some things that `setf' _replaced_
in Common Lisp, such as `setcar', do NOT return the
thing updated. `setcar' returns the new car, not the
updated cons.
^ permalink raw reply [flat|nested] 10+ messages in thread
[parent not found: <<<<53afe0a4-8ce5-45fc-9e18-6bf52018c9b6@default>]
[parent not found: <<53afe0a4-8ce5-45fc-9e18-6bf52018c9b6@default>]
* bug#28736: 24.5; doc of `push'
@ 2017-10-08 2:56 Drew Adams
2017-10-08 6:04 ` Eli Zaretskii
0 siblings, 1 reply; 10+ messages in thread
From: Drew Adams @ 2017-10-08 2:56 UTC (permalink / raw)
To: 28736
Both the doc string and the Elisp manual entry should say that `push'
returns the new value of the place that it updates. The doc says
nothing about the return value.
The return value is implied by the doc, which says that `push' is
"morally equivalent" to (setf PLACE (cons NEWELT PLACE)), and one
Can figure out that `setf' returns the new value. But the doc should
just say explicitly what the return value is, instead of making users
dig it out or check the code.
This is morally equivalent to (setf PLACE (cons NEWELT PLACE)),
except that PLACE is only evaluated once (after NEWELT).
Also, the use of "morally equivalent" here, though perhaps intended to
be cute, as a joke of sorts, is inappropriate and possibly confusing.
What matters is that the behavior and return value are equivalent, with
the proviso mentioned: that PLACE is evaluated only once (after NEWELT).
In GNU Emacs 24.5.1 (i686-pc-mingw32)
of 2015-04-11 on LEG570
Windowing system distributor `Microsoft Corp.', version 6.1.7601
Configured using:
`configure --prefix=/c/usr --host=i686-pc-mingw32'
^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#28736: 24.5; doc of `push'
2017-10-08 2:56 Drew Adams
@ 2017-10-08 6:04 ` Eli Zaretskii
0 siblings, 0 replies; 10+ messages in thread
From: Eli Zaretskii @ 2017-10-08 6:04 UTC (permalink / raw)
To: Drew Adams; +Cc: 28736
> Date: Sat, 7 Oct 2017 19:56:58 -0700 (PDT)
> From: Drew Adams <drew.adams@oracle.com>
>
> Both the doc string and the Elisp manual entry should say that `push'
> returns the new value of the place that it updates. The doc says
> nothing about the return value.
That usually means we don't want to advertise the return value, and
that programs should not depend on it. Why is that a problem in this
case?
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2021-09-25 16:43 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <<<53afe0a4-8ce5-45fc-9e18-6bf52018c9b6@default>
[not found] ` <<<83h8vatbtk.fsf@gnu.org>
[not found] ` <<09655ed0-be2c-4453-9755-224ec733e221@default>
[not found] ` <<83wp45sgrm.fsf@gnu.org>
2017-10-08 17:48 ` bug#28736: 24.5; doc of `push' Drew Adams
2017-10-08 18:13 ` Eli Zaretskii
2021-09-25 15:41 ` Stefan Kangas
2021-09-25 16:43 ` bug#28736: [External] : " Drew Adams
[not found] <<<<53afe0a4-8ce5-45fc-9e18-6bf52018c9b6@default>
[not found] ` <<<<83h8vatbtk.fsf@gnu.org>
[not found] ` <<<09655ed0-be2c-4453-9755-224ec733e221@default>
[not found] ` <<<83wp45sgrm.fsf@gnu.org>
[not found] ` <<9d23e7ad-ff25-4dac-b598-6614b272bebc@default>
[not found] ` <<83tvz9se2s.fsf@gnu.org>
2017-10-08 19:40 ` Drew Adams
2017-10-09 7:13 ` Andreas Röhler
[not found] <<53afe0a4-8ce5-45fc-9e18-6bf52018c9b6@default>
[not found] ` <<83h8vatbtk.fsf@gnu.org>
2017-10-08 16:50 ` Drew Adams
2017-10-08 17:15 ` Eli Zaretskii
2017-10-08 2:56 Drew Adams
2017-10-08 6:04 ` Eli Zaretskii
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.