* Re: [Emacs-diffs] master 35c893d 2/2: Move gensym to core Elisp
[not found] ` <20170912151315.C449D2087D@vcs0.savannah.gnu.org>
@ 2017-09-12 16:48 ` Stefan Monnier
2017-09-12 17:21 ` Mark Oteiza
0 siblings, 1 reply; 9+ messages in thread
From: Stefan Monnier @ 2017-09-12 16:48 UTC (permalink / raw)
To: emacs-devel; +Cc: Mark Oteiza
> +(defun gensym (&optional prefix)
> + "Return a new uninterned symbol.
> +The name is made by appending `gensym-counter' to PREFIX.
> +PREFIX can be a string, and defaults to \"G\".
> +If PREFIX is a number, it replaces the value of `gensym-counter'."
I understand that Common-Lisp has that "PREFIX is a number"
functionality, but I could never find a use-case for it, so I wonder why
we carry over that baggage to Elisp?
Stefan
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Emacs-diffs] master 35c893d 2/2: Move gensym to core Elisp
2017-09-12 16:48 ` [Emacs-diffs] master 35c893d 2/2: Move gensym to core Elisp Stefan Monnier
@ 2017-09-12 17:21 ` Mark Oteiza
2017-09-12 17:35 ` Mark Oteiza
2017-09-12 18:28 ` Stefan Monnier
0 siblings, 2 replies; 9+ messages in thread
From: Mark Oteiza @ 2017-09-12 17:21 UTC (permalink / raw)
To: Stefan Monnier; +Cc: emacs-devel
On 12/09/17 at 12:48pm, Stefan Monnier wrote:
> > +(defun gensym (&optional prefix)
> > + "Return a new uninterned symbol.
> > +The name is made by appending `gensym-counter' to PREFIX.
> > +PREFIX can be a string, and defaults to \"G\".
> > +If PREFIX is a number, it replaces the value of `gensym-counter'."
>
> I understand that Common-Lisp has that "PREFIX is a number"
> functionality, but I could never find a use-case for it, so I wonder why
> we carry over that baggage to Elisp?
It was just simpler to not duplicate the code for such a small
historical tidbit. I have no problem with the idea of dropping it.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Emacs-diffs] master 35c893d 2/2: Move gensym to core Elisp
2017-09-12 17:21 ` Mark Oteiza
@ 2017-09-12 17:35 ` Mark Oteiza
2017-09-12 18:28 ` Stefan Monnier
1 sibling, 0 replies; 9+ messages in thread
From: Mark Oteiza @ 2017-09-12 17:35 UTC (permalink / raw)
To: Stefan Monnier; +Cc: emacs-devel
On 12/09/17 at 01:21pm, Mark Oteiza wrote:
> On 12/09/17 at 12:48pm, Stefan Monnier wrote:
> > > +(defun gensym (&optional prefix)
> > > + "Return a new uninterned symbol.
> > > +The name is made by appending `gensym-counter' to PREFIX.
> > > +PREFIX can be a string, and defaults to \"G\".
> > > +If PREFIX is a number, it replaces the value of `gensym-counter'."
> >
> > I understand that Common-Lisp has that "PREFIX is a number"
> > functionality, but I could never find a use-case for it, so I wonder why
> > we carry over that baggage to Elisp?
>
> It was just simpler to not duplicate the code for such a small
> historical tidbit. I have no problem with the idea of dropping it.
Is this what you mean? (I lowered the prefix for good measure)
diff --git a/doc/lispref/symbols.texi b/doc/lispref/symbols.texi
index 2d9ec6fda3..cda5f1c40f 100644
--- a/doc/lispref/symbols.texi
+++ b/doc/lispref/symbols.texi
@@ -276,8 +276,7 @@ Creating Symbols
@defun gensym &optional prefix
This function returns a symbol using @code{make-symbol}, whose name is
made by appending @code{gensym-counter} to @var{prefix}. The prefix
-defaults to @code{"G"}. If @var{prefix} is a number, it replaces the
-value of the counter.
+defaults to @code{"g"}.
@end defun
@defun intern name &optional obarray
diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el
index eee5953882..3405c92e8d 100644
--- a/lisp/emacs-lisp/cl-macs.el
+++ b/lisp/emacs-lisp/cl-macs.el
@@ -161,9 +161,16 @@ cl--expr-depends-p
;;; Symbols.
-(defvaralias 'cl--gensym-counter 'gensym-counter)
+(defvar cl--gensym-counter 0)
;;;###autoload
-(cl--defalias 'cl-gensym 'gensym)
+(defun cl-gensym (&optional prefix)
+ "Generate a new uninterned symbol.
+The name is made by appending a number to PREFIX, default \"G\"."
+ (let ((pfix (if (stringp prefix) prefix "G"))
+ (num (if (integerp prefix) prefix
+ (prog1 cl--gensym-counter
+ (setq cl--gensym-counter (1+ cl--gensym-counter))))))
+ (make-symbol (format "%s%d" pfix num))))
(defvar cl--gentemp-counter 0)
;;;###autoload
diff --git a/lisp/subr.el b/lisp/subr.el
index ebb8b53b50..52d4e190e7 100644
--- a/lisp/subr.el
+++ b/lisp/subr.el
@@ -286,13 +286,10 @@ gensym-counter
(defun gensym (&optional prefix)
"Return a new uninterned symbol.
The name is made by appending `gensym-counter' to PREFIX.
-PREFIX can be a string, and defaults to \"G\".
-If PREFIX is a number, it replaces the value of `gensym-counter'."
- (let ((pfix (if (stringp prefix) prefix "G"))
- (num (if (integerp prefix) prefix
- (prog1 gensym-counter
- (setq gensym-counter (1+ gensym-counter))))))
- (make-symbol (format "%s%d" pfix num))))
+PREFIX is a string, and defaults to \"g\"."
+ (let ((num (prog1 gensym-counter
+ (setq gensym-counter (1+ gensym-counter)))))
+ (make-symbol (format "%s%d" prefix num))))
(defun ignore (&rest _ignore)
"Do nothing and return nil.
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [Emacs-diffs] master 35c893d 2/2: Move gensym to core Elisp
2017-09-12 17:21 ` Mark Oteiza
2017-09-12 17:35 ` Mark Oteiza
@ 2017-09-12 18:28 ` Stefan Monnier
2017-09-12 18:51 ` Mark Oteiza
2017-09-13 3:48 ` Alex
1 sibling, 2 replies; 9+ messages in thread
From: Stefan Monnier @ 2017-09-12 18:28 UTC (permalink / raw)
To: Mark Oteiza; +Cc: emacs-devel
> It was just simpler to not duplicate the code for such a small
> historical tidbit.
Damn! So still no explanation for that weird functionality.
Stefan
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Emacs-diffs] master 35c893d 2/2: Move gensym to core Elisp
2017-09-12 18:28 ` Stefan Monnier
@ 2017-09-12 18:51 ` Mark Oteiza
2017-09-13 3:48 ` Alex
1 sibling, 0 replies; 9+ messages in thread
From: Mark Oteiza @ 2017-09-12 18:51 UTC (permalink / raw)
To: Stefan Monnier; +Cc: emacs-devel
On 12/09/17 at 02:28pm, Stefan Monnier wrote:
> > It was just simpler to not duplicate the code for such a small
> > historical tidbit.
>
> Damn! So still no explanation for that weird functionality.
Nope, the best answer I have is what the CL spec says :(
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Emacs-diffs] master 35c893d 2/2: Move gensym to core Elisp
2017-09-12 18:28 ` Stefan Monnier
2017-09-12 18:51 ` Mark Oteiza
@ 2017-09-13 3:48 ` Alex
2017-09-13 12:40 ` Stefan Monnier
1 sibling, 1 reply; 9+ messages in thread
From: Alex @ 2017-09-13 3:48 UTC (permalink / raw)
To: Stefan Monnier; +Cc: Mark Oteiza, emacs-devel
Stefan Monnier <monnier@IRO.UMontreal.CA> writes:
>> It was just simpler to not duplicate the code for such a small
>> historical tidbit.
>
> Damn! So still no explanation for that weird functionality.
>
>
> Stefan
According to [1] (page 53), MACLISP didn't have a visible
gensym-counter, and instead used an integer argument to gensym to allow
programs to set an internal counter. According to [2], it was only
decided in 1989 to have *gensym-counter* in CL, so before then having an
integer argument made sense if you wanted to manipulate the gensym
state.
I don't think an integer argument makes much sense when there's a
visible counter available. Checking it only in cl-gensym and not in
gensym is a nice idea, but I wonder if people who use an integer
argument here are the type of people to use `cl' instead of `cl-lib'.
Footnotes:
[1] http://www.softwarepreservation.org/projects/LISP/MIT/Moon-MACLISP_Reference_Manual-Apr_08_1974.pdf
[2] https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node110.html
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Emacs-diffs] master 35c893d 2/2: Move gensym to core Elisp
2017-09-13 3:48 ` Alex
@ 2017-09-13 12:40 ` Stefan Monnier
2017-09-13 12:50 ` Mark Oteiza
0 siblings, 1 reply; 9+ messages in thread
From: Stefan Monnier @ 2017-09-13 12:40 UTC (permalink / raw)
To: Alex; +Cc: Mark Oteiza, emacs-devel
> According to [1] (page 53), MACLISP didn't have a visible
> gensym-counter, and instead used an integer argument to gensym to allow
> programs to set an internal counter. According to [2], it was only
> decided in 1989 to have *gensym-counter* in CL, so before then having an
> integer argument made sense if you wanted to manipulate the gensym
> state.
An integer arg that lets you set the internal counter makes some
sense, yes. But the integer arg implements in cl-lib.el (and in clisp,
FWIW) does not affect the internal counter.
> but I wonder if people who use an integer argument here are the type
> of people to use `cl' instead of `cl-lib'.
I think using the plural here is rather optimistic. I'd already be
surprised if there's even just one user of that functionality.
Stefan
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Emacs-diffs] master 35c893d 2/2: Move gensym to core Elisp
2017-09-13 12:40 ` Stefan Monnier
@ 2017-09-13 12:50 ` Mark Oteiza
2017-09-28 7:05 ` Alex
0 siblings, 1 reply; 9+ messages in thread
From: Mark Oteiza @ 2017-09-13 12:50 UTC (permalink / raw)
To: Stefan Monnier; +Cc: Alex, emacs-devel
On 13/09/17 at 08:40am, Stefan Monnier wrote:
> > According to [1] (page 53), MACLISP didn't have a visible
> > gensym-counter, and instead used an integer argument to gensym to allow
> > programs to set an internal counter. According to [2], it was only
> > decided in 1989 to have *gensym-counter* in CL, so before then having an
> > integer argument made sense if you wanted to manipulate the gensym
> > state.
Thanks for digging that up.
> > but I wonder if people who use an integer argument here are the type
> > of people to use `cl' instead of `cl-lib'.
>
> I think using the plural here is rather optimistic. I'd already be
> surprised if there's even just one user of that functionality.
Only one way to find out! I suppose I'll apply the patch I sent earlier.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Emacs-diffs] master 35c893d 2/2: Move gensym to core Elisp
2017-09-13 12:50 ` Mark Oteiza
@ 2017-09-28 7:05 ` Alex
0 siblings, 0 replies; 9+ messages in thread
From: Alex @ 2017-09-28 7:05 UTC (permalink / raw)
To: Mark Oteiza; +Cc: emacs-devel
Mark Oteiza <mvoteiza@udel.edu> writes:
> On 13/09/17 at 08:40am, Stefan Monnier wrote:
>> > According to [1] (page 53), MACLISP didn't have a visible
>> > gensym-counter, and instead used an integer argument to gensym to allow
>> > programs to set an internal counter. According to [2], it was only
>> > decided in 1989 to have *gensym-counter* in CL, so before then having an
>> > integer argument made sense if you wanted to manipulate the gensym
>> > state.
>
> Thanks for digging that up.
>
>> > but I wonder if people who use an integer argument here are the type
>> > of people to use `cl' instead of `cl-lib'.
>>
>> I think using the plural here is rather optimistic. I'd already be
>> surprised if there's even just one user of that functionality.
>
> Only one way to find out! I suppose I'll apply the patch I sent earlier.
It doesn't really matter, but wouldn't it be a bit nicer if cl-gensym
and gensym shared the same counter and default prefix?
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2017-09-28 7:05 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20170912151313.7686.92637@vcs0.savannah.gnu.org>
[not found] ` <20170912151315.C449D2087D@vcs0.savannah.gnu.org>
2017-09-12 16:48 ` [Emacs-diffs] master 35c893d 2/2: Move gensym to core Elisp Stefan Monnier
2017-09-12 17:21 ` Mark Oteiza
2017-09-12 17:35 ` Mark Oteiza
2017-09-12 18:28 ` Stefan Monnier
2017-09-12 18:51 ` Mark Oteiza
2017-09-13 3:48 ` Alex
2017-09-13 12:40 ` Stefan Monnier
2017-09-13 12:50 ` Mark Oteiza
2017-09-28 7:05 ` Alex
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).