* Re: [Emacs-diffs] /srv/bzr/emacs/trunk r104642: * src/process.c (Fset_process_buffer): Clarify return value in docstring.
[not found] <E1QYeLs-00050O-9O@colonialone.fsf.org>
@ 2011-06-20 14:26 ` Stefan Monnier
2011-06-20 16:16 ` Juanma Barranquero
2011-06-21 16:00 ` Deniz Dogan
0 siblings, 2 replies; 12+ messages in thread
From: Stefan Monnier @ 2011-06-20 14:26 UTC (permalink / raw)
To: Deniz Dogan; +Cc: emacs-devel
> - doc: /* Set buffer associated with PROCESS to BUFFER (a buffer, or nil). */)
> + doc: /* Set buffer associated with PROCESS to BUFFER (a buffer, or nil).
> +Return BUFFER. */)
Actually, I generally prefer not to document the accidental return value
of side-effecting functions. It's poor style anyway to use that return
value, in my book.
Stefan
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Emacs-diffs] /srv/bzr/emacs/trunk r104642: * src/process.c (Fset_process_buffer): Clarify return value in docstring.
2011-06-20 14:26 ` [Emacs-diffs] /srv/bzr/emacs/trunk r104642: * src/process.c (Fset_process_buffer): Clarify return value in docstring Stefan Monnier
@ 2011-06-20 16:16 ` Juanma Barranquero
2011-06-20 17:53 ` Stefan Monnier
2011-06-21 16:00 ` Deniz Dogan
1 sibling, 1 reply; 12+ messages in thread
From: Juanma Barranquero @ 2011-06-20 16:16 UTC (permalink / raw)
To: Stefan Monnier; +Cc: Deniz Dogan, emacs-devel
On Mon, Jun 20, 2011 at 16:26, Stefan Monnier <monnier@iro.umontreal.ca> wrote:
>> - doc: /* Set buffer associated with PROCESS to BUFFER (a buffer, or nil). */)
>> + doc: /* Set buffer associated with PROCESS to BUFFER (a buffer, or nil).
>> +Return BUFFER. */)
>
> Actually, I generally prefer not to document the accidental return value
> of side-effecting functions.
What's accidental in
return buffer;
?
Juanma
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Emacs-diffs] /srv/bzr/emacs/trunk r104642: * src/process.c (Fset_process_buffer): Clarify return value in docstring.
2011-06-20 16:16 ` Juanma Barranquero
@ 2011-06-20 17:53 ` Stefan Monnier
2011-06-20 19:53 ` Juanma Barranquero
2011-06-21 4:10 ` Stephen J. Turnbull
0 siblings, 2 replies; 12+ messages in thread
From: Stefan Monnier @ 2011-06-20 17:53 UTC (permalink / raw)
To: Juanma Barranquero; +Cc: Deniz Dogan, emacs-devel
>> Actually, I generally prefer not to document the accidental return value
>> of side-effecting functions.
> What's accidental in
> return buffer;
> ?
That the author could just as well have written "return Qnil;" or
various other options.
I can't find a single example of Elisp code in Emacs that does not
ignore the return value of set-process-buffer (and that's a good thing).
Stefan
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Emacs-diffs] /srv/bzr/emacs/trunk r104642: * src/process.c (Fset_process_buffer): Clarify return value in docstring.
2011-06-20 17:53 ` Stefan Monnier
@ 2011-06-20 19:53 ` Juanma Barranquero
2011-06-21 14:13 ` Stefan Monnier
2011-06-21 4:10 ` Stephen J. Turnbull
1 sibling, 1 reply; 12+ messages in thread
From: Juanma Barranquero @ 2011-06-20 19:53 UTC (permalink / raw)
To: Stefan Monnier; +Cc: Deniz Dogan, emacs-devel
On Mon, Jun 20, 2011 at 19:53, Stefan Monnier <monnier@iro.umontreal.ca> wrote:
> That the author could just as well have written "return Qnil;" or
> various other options.
"return Qnil;" is rarely useful. "return buffer;" could be.
> I can't find a single example of Elisp code in Emacs that does not
> ignore the return value of set-process-buffer
Hardly surprising, as it was undocumented.
> (and that's a good thing).
Perhaps. Do you oppose also to using the return value of other
side-effecting functions or special forms, like `setq'? Because
there's no shortage of "(if (setq", "(and (setq", "(or (setq" in the
sources (341, 387 and 54 instances, respectively).
Juanma
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Emacs-diffs] /srv/bzr/emacs/trunk r104642: * src/process.c (Fset_process_buffer): Clarify return value in docstring.
2011-06-20 17:53 ` Stefan Monnier
2011-06-20 19:53 ` Juanma Barranquero
@ 2011-06-21 4:10 ` Stephen J. Turnbull
1 sibling, 0 replies; 12+ messages in thread
From: Stephen J. Turnbull @ 2011-06-21 4:10 UTC (permalink / raw)
To: Stefan Monnier; +Cc: Juanma Barranquero, Deniz Dogan, emacs-devel
Stefan Monnier writes:
> >> Actually, I generally prefer not to document the accidental return value
> >> of side-effecting functions.
>
> > What's accidental in
> > return buffer;
> > ?
>
> That the author could just as well have written "return Qnil;" or
> various other options.
Well, since the DEFUN macro basically requires a return value, and all
functions defined in Lisp do return something, you probably ought to
say that a function should return nil unless there's an obviously good
value to return.
> I can't find a single example of Elisp code in Emacs that does not
> ignore the return value of set-process-buffer (and that's a good thing).
Not necessarily a good thing in Elisp. Like it or not, Elisp has
never made a strong distinction between functions that return values
and functions that have side effects.
While you may prefer the style
(let ((buf (get-buffer-create "buffer for process")))
(set-process-buffer proc buf)
(do-buffing buf))
in Elisp it's common enough to see the style
(do-buffing
(set-process-buffer proc
(get-buffer-create "buffer for process")))
and I don't really see anything wrong with that in Elisp.
Of course as a matter of design, in many cases it's preferable to
return nil now, and think about what a useful return value might be
after we see use cases for the function.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Emacs-diffs] /srv/bzr/emacs/trunk r104642: * src/process.c (Fset_process_buffer): Clarify return value in docstring.
2011-06-20 19:53 ` Juanma Barranquero
@ 2011-06-21 14:13 ` Stefan Monnier
2011-06-21 14:30 ` Juanma Barranquero
0 siblings, 1 reply; 12+ messages in thread
From: Stefan Monnier @ 2011-06-21 14:13 UTC (permalink / raw)
To: Juanma Barranquero; +Cc: Deniz Dogan, emacs-devel
>> I can't find a single example of Elisp code in Emacs that does not
>> ignore the return value of set-process-buffer
> Hardly surprising, as it was undocumented.
People usually aren't afraid to use undocumented features.
>> (and that's a good thing).
> Perhaps. Do you oppose also to using the return value of other
> side-effecting functions or special forms,
As a general rule, yes.
> like `setq'? Because there's no shortage of "(if (setq", "(and (setq",
> "(or (setq" in the sources (341, 387 and 54 instances, respectively).
Indeed, setq is used this way fairly often, so it's pointless to try and
oppose it. As a matter of fact, I do use this sometimes myself.
Stefan
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Emacs-diffs] /srv/bzr/emacs/trunk r104642: * src/process.c (Fset_process_buffer): Clarify return value in docstring.
2011-06-21 14:13 ` Stefan Monnier
@ 2011-06-21 14:30 ` Juanma Barranquero
2011-06-21 16:33 ` Stefan Monnier
0 siblings, 1 reply; 12+ messages in thread
From: Juanma Barranquero @ 2011-06-21 14:30 UTC (permalink / raw)
To: Stefan Monnier; +Cc: Deniz Dogan, emacs-devel
On Tue, Jun 21, 2011 at 16:13, Stefan Monnier <monnier@iro.umontreal.ca> wrote:
> People usually aren't afraid to use undocumented features.
And if they were 300+ uses of set-process-buffer in the sources,
instead of 19, someone would have.
> As a general rule, yes.
What about `display-buffer'? It certainly exists for its side effect,
but it returns the window, a fact which is both documented and used.
If it were a new function, would you oppose doing so?
I'm not arguing, mind you, just trying to understand why it is OK for
some functions whose whole purpose is side-effects to return a useful
value, and not OK for others.
Juanma
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Emacs-diffs] /srv/bzr/emacs/trunk r104642: * src/process.c (Fset_process_buffer): Clarify return value in docstring.
2011-06-20 14:26 ` [Emacs-diffs] /srv/bzr/emacs/trunk r104642: * src/process.c (Fset_process_buffer): Clarify return value in docstring Stefan Monnier
2011-06-20 16:16 ` Juanma Barranquero
@ 2011-06-21 16:00 ` Deniz Dogan
1 sibling, 0 replies; 12+ messages in thread
From: Deniz Dogan @ 2011-06-21 16:00 UTC (permalink / raw)
To: Stefan Monnier; +Cc: emacs-devel
On 2011-06-20 16:26, Stefan Monnier wrote:
>> - doc: /* Set buffer associated with PROCESS to BUFFER (a buffer, or nil). */)
>> + doc: /* Set buffer associated with PROCESS to BUFFER (a buffer, or nil).
>> +Return BUFFER. */)
>
> Actually, I generally prefer not to document the accidental return value
> of side-effecting functions. It's poor style anyway to use that return
> value, in my book.
>
I don't mind at all should you revert the change, I just figured it
could be useful for others to know.
For what it's worth, here's the code where I use the return value (not
in GNU Emacs):
(defun dirc-setup-server-buffer (process)
"Set up the server buffer for PROCESS."
(let ((buffer (set-process-buffer
process
(pop-to-buffer-same-window
(dirc-make-process-buffer-name process)))))
(with-current-buffer buffer
(set (make-local-variable 'dirc-buffer-type) 'server)
(set (make-local-variable 'dirc-process process)))))
/Deniz
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Emacs-diffs] /srv/bzr/emacs/trunk r104642: * src/process.c (Fset_process_buffer): Clarify return value in docstring.
2011-06-21 14:30 ` Juanma Barranquero
@ 2011-06-21 16:33 ` Stefan Monnier
2011-06-21 16:39 ` Juanma Barranquero
2011-06-21 20:17 ` Deniz Dogan
0 siblings, 2 replies; 12+ messages in thread
From: Stefan Monnier @ 2011-06-21 16:33 UTC (permalink / raw)
To: Juanma Barranquero; +Cc: Deniz Dogan, emacs-devel
> What about `display-buffer'? It certainly exists for its side effect,
> but it returns the window, a fact which is both documented and used.
> If it were a new function, would you oppose doing so?
No, I do not systematically oppose side-effecting functions which return
a value as well. That would be much too drastic (e.g. how would you
figure out which window was used by `display-buffer'?).
I;.e. the return value is really indispensable. Contrast this with
set-process-buffer whose return value is always available to the caller
before even calling it.
Stefan
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Emacs-diffs] /srv/bzr/emacs/trunk r104642: * src/process.c (Fset_process_buffer): Clarify return value in docstring.
2011-06-21 16:33 ` Stefan Monnier
@ 2011-06-21 16:39 ` Juanma Barranquero
2011-06-21 20:17 ` Deniz Dogan
1 sibling, 0 replies; 12+ messages in thread
From: Juanma Barranquero @ 2011-06-21 16:39 UTC (permalink / raw)
To: Stefan Monnier; +Cc: Deniz Dogan, emacs-devel
On Tue, Jun 21, 2011 at 18:33, Stefan Monnier <monnier@iro.umontreal.ca> wrote:
> No, I do not systematically oppose side-effecting functions which return
> a value as well. That would be much too drastic (e.g. how would you
> figure out which window was used by `display-buffer'?).
> I;.e. the return value is really indispensable. Contrast this with
> set-process-buffer whose return value is always available to the caller
> before even calling it.
OK, that makes sense.
Thanks,
Juanma
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Emacs-diffs] /srv/bzr/emacs/trunk r104642: * src/process.c (Fset_process_buffer): Clarify return value in docstring.
2011-06-21 16:33 ` Stefan Monnier
2011-06-21 16:39 ` Juanma Barranquero
@ 2011-06-21 20:17 ` Deniz Dogan
2011-06-22 1:59 ` Stefan Monnier
1 sibling, 1 reply; 12+ messages in thread
From: Deniz Dogan @ 2011-06-21 20:17 UTC (permalink / raw)
To: Stefan Monnier; +Cc: Juanma Barranquero, emacs-devel
On 2011-06-21 18:33, Stefan Monnier wrote:
>> What about `display-buffer'? It certainly exists for its side effect,
>> but it returns the window, a fact which is both documented and used.
>> If it were a new function, would you oppose doing so?
>
> No, I do not systematically oppose side-effecting functions which return
> a value as well. That would be much too drastic (e.g. how would you
> figure out which window was used by `display-buffer'?).
> I;.e. the return value is really indispensable. Contrast this with
> set-process-buffer whose return value is always available to the caller
> before even calling it.
>
I'm just wondering: can I rely on `set-process-buffer' always returning
the buffer from now on or is it prone to change given the fact that it
is "accidental"?
Thanks,
Deniz
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Emacs-diffs] /srv/bzr/emacs/trunk r104642: * src/process.c (Fset_process_buffer): Clarify return value in docstring.
2011-06-21 20:17 ` Deniz Dogan
@ 2011-06-22 1:59 ` Stefan Monnier
0 siblings, 0 replies; 12+ messages in thread
From: Stefan Monnier @ 2011-06-22 1:59 UTC (permalink / raw)
To: Deniz Dogan; +Cc: Juanma Barranquero, emacs-devel
> I'm just wondering: can I rely on `set-process-buffer' always returning the
> buffer from now on or is it prone to change given the fact that it is
> "accidental"?
Now that you documented it, you can probably rely on it.
But if I undocument it before the release, then there's a risk it
might change. If I were you I'd use
(defun dirc-setup-server-buffer (process)
"Set up the server buffer for PROCESS."
(let ((buffer (pop-to-buffer-same-window
(dirc-make-process-buffer-name process))))
(set-process-buffer process buffer)))
(with-current-buffer buffer
(set (make-local-variable 'dirc-buffer-type) 'server)
(set (make-local-variable 'dirc-process process)))))
which I find more readable and where you don't need to worry about it.
Stefan
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2011-06-22 1:59 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <E1QYeLs-00050O-9O@colonialone.fsf.org>
2011-06-20 14:26 ` [Emacs-diffs] /srv/bzr/emacs/trunk r104642: * src/process.c (Fset_process_buffer): Clarify return value in docstring Stefan Monnier
2011-06-20 16:16 ` Juanma Barranquero
2011-06-20 17:53 ` Stefan Monnier
2011-06-20 19:53 ` Juanma Barranquero
2011-06-21 14:13 ` Stefan Monnier
2011-06-21 14:30 ` Juanma Barranquero
2011-06-21 16:33 ` Stefan Monnier
2011-06-21 16:39 ` Juanma Barranquero
2011-06-21 20:17 ` Deniz Dogan
2011-06-22 1:59 ` Stefan Monnier
2011-06-21 4:10 ` Stephen J. Turnbull
2011-06-21 16:00 ` Deniz Dogan
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).