all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: "Drew Adams" <drew.adams@oracle.com>
To: "'Stefan Monnier'" <monnier@iro.umontreal.ca>
Cc: 'Eli Zaretskii' <eliz@gnu.org>, emacs-devel@gnu.org
Subject: RE: policy, recommendations regarding `cl-*'
Date: Wed, 26 Sep 2012 07:11:17 -0700	[thread overview]
Message-ID: <655ECEE359404A249CF8B4D26E192967@us.oracle.com> (raw)
In-Reply-To: <jwvzk4d4ghw.fsf-monnier+emacs@gnu.org>

> > And deprecation calls out for doc about how to move from the old to
> > the new, as I mentioned.
> 
> We'll do that when we move cl.el to lisp/obsolete/, which I expect is
> still several years away.

Deprecation is typically a recommendation to use the new and not the old.  Hence
doc about migration/compatibility to help users do that.  This does not sound
much like a deprecation - perhaps it's only half-hearted.

> > Why on earth are you deprecating existing macros in favor 
> > of the same macros with a `cl-' prefix?  I haven't seen an
> > answer to that yet.
> 
> Various reasons, tho I don't think it matters much:
> - why have the old names when you have the new names?
>   [I know you'll say backward compatibility, but the question 
>   is meant in the long term.  cl.el is still kept for compatibility
>   for now]

I've already agreed that adding `cl-' aliases is not bad.  It's about the
macros.  Why deprecate them?

> - several old names are actually problematic:
>   - it starts with mild problems such as mapcar*, function* 
>     and friends where the * was needed just to avoid conflicts,
>     where in the new names you can use the natural "cl-mapcar"
>     rather than "cl-mapcar*".

So you use a prefix instead of a suffix to avoid conflicts.  Still not a reason
to deprecate the existing macro names.  (`mapcar(*)' is not a macro, BTW.)  

>   - then gets to the actual conflicts like dolist/dotimes (luckily
>     push/pop has been fixed by extending Elisp's builtin push/pop to
>     cover CL's semantics) which even recently brought real problems
>     where eager macroexpansion failed for some files because
>     substituting subr.el's dolist with CL's dolist creates a circular
>     dependency between CL macroexp and gv (IIRC).

That's a conflict within Emacs itself.  There I agree that something better is
needed.

There is no logical reason why Emacs subr.el needed to use the same name (e.g.
`dolist') for something that exists in Common Lisp and in cl.el with a different
meaning.  (And no, I don't think that Emacs had `dolist' etc. before Common Lisp
existed.)  But so be it - we are where we are.

The problem you point out is apparently not with the code that uses one `dolist'
or the other, but with the handling of library loading and eager macro
expansion.  If a user does not load cl then `dolist' should come from subr.el.

But I imagine that this might well become a headache at some level, and clearly
it is error prone - easy for a programmer to not know that some library loaded
by a user loads the cl version, etc.  So I can see your point here.

But that's an argument for deprecating those macros that present a problem
because of a conflict between the cl.el version and the subr.el version.  That
does not apply to macros like `loop' that do not suffer from that disease.  Why
have a blanket deprecation instead of doing the right thing case by case?

> > And I'm hoping you will change your mind about it.
> 
> Not a chance.
> 
> > But my immediate concern is maintaining code for multiple 
> > Emacs versions that uses cl.el macros.
> 
> You're fighting a non-problem.

I'm not fighting anything.  I asked for a recommendation for adapting existing
code, to which you suggested doing nothing and said that recommendations for
respecting this "deprecation" will come when the code is moved to `obsolete'.
So that is apparently the real moment of deprecation.  So why proclaim
deprecation (and even obsolescence) now and not then?

I would have preferred to see a discussion about such a deprecation before it
pounced on us fullblown.  But so be it.  (It's possible there was such a
discussion and I missed it.  But I haven't heard that asserted.)




  parent reply	other threads:[~2012-09-26 14:11 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-09-25 20:31 policy, recommendations regarding `cl-*' Drew Adams
2012-09-25 21:01 ` Eli Zaretskii
2012-09-25 22:09   ` Drew Adams
2012-09-26  1:15     ` Stefan Monnier
2012-09-26  2:51       ` Drew Adams
2012-09-26  3:29         ` Stefan Monnier
2012-09-26  7:02           ` Bastien
2012-09-26 12:59             ` Stefan Monnier
2012-09-26 13:12               ` Bastien
2012-09-26 17:54                 ` Stefan Monnier
2012-09-26 22:04                   ` Bastien
2012-09-27 20:35                   ` Michael Welsh Duggan
2012-09-27 22:10                     ` Stefan Monnier
2012-09-29  4:15                       ` Michael Welsh Duggan
2012-09-26 14:11           ` Drew Adams [this message]
2012-09-26 19:44             ` Stefan Monnier
2012-09-26 20:13               ` Drew Adams
2012-09-26  7:42     ` Eli Zaretskii
2012-09-26 13:00       ` Stefan Monnier
2012-09-26 14:11       ` Drew Adams
2012-09-26 13:37     ` Jason Rumney
2012-09-25 21:03 ` Helmut Eller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=655ECEE359404A249CF8B4D26E192967@us.oracle.com \
    --to=drew.adams@oracle.com \
    --cc=eliz@gnu.org \
    --cc=emacs-devel@gnu.org \
    --cc=monnier@iro.umontreal.ca \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this 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.