all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: MON KEY <monkey@sandpframing.com>
To: emacs-devel@gnu.org
Subject: Removing non `loop' features from cl.el - `cl-map-overlays', `cl-map-intervals', `cl-map-extents'
Date: Sat, 11 Dec 2010 17:48:47 -0500	[thread overview]
Message-ID: <AANLkTikW9_18bWgwXhaFNfn5-vemMU2gTqqpHGe6X7=3@mail.gmail.com> (raw)

cl.el defines `cl-map-extents' as:

(defun cl-map-extents (&rest cl-args)
  (apply 'cl-map-overlays cl-args))

AFAICT its only caller is the `loop' macro.

Is there any reason why `cl-map-extents' shouldn't be defaliased to
`cl-map-overlays'?
Changelog circa 1999-12-18 says:
 (cl-map-extents): Remove compatibility code.

Also, byte-compiling functions which use the `loop' macro to map overlays or
"intervals" of a buffer causes the byte-compiler to warn spuriously about
calling `cl-map-overlays' and `cl-map-intervals' at runtime.

On GNU Emacs 23.2.1 when evaluating the form below:

(let ((auto-save-default nil)
      (make-backup-files nil)
      (backup-inhibited nil))
  (with-temp-file "./extent-interval-cmpl.el"
    (insert
     "\n\(eval-when-compile \(require 'cl\)\)

\(defun %loop-interval-or-overlay \(&optional olay-or-interval\)
  \(case olay-or-interval
    \(overlay
     \(loop for ov being the overlays of \(current-buffer\)
           collecting ov\)\)
    \(interval
     \(loop for iv being the intervals of \(current-buffer\)
           collecting iv\)\)\)\)

\(defun plain-old-loop \(\)
  \(loop for i from 0 to 10 collecting i\)\)

\(provide 'extent-interval-cmpl\)\n"))
  (byte-compile-file "./extent-interval-cmpl.el")
  (delete-file "./extent-interval-cmpl.el")
  (delete-file "./extent-interval-cmpl.elc")
  (with-current-buffer (get-buffer-create "*Compile-Log*")
    (display-buffer (current-buffer) t)))

Following is what *Compile-Log* has to say about things:
,----
| In %loop-interval-or-overlay:
| extent-interval-cmpl.el:8:23:Warning: Function `cl-map-extents' from cl
|     package called at runtime
| extent-interval-cmpl.el:10:16:Warning: assignment to free variable `iv'
| extent-interval-cmpl.el:11:23:Warning: reference to free variable `iv'
| extent-interval-cmpl.el:11:23:Warning: Function `cl-map-intervals' from cl
|     package called at runtime
`----

Can anyone else confirm this behavior?

Unless, I've somehow mucked up my cl-*.el files I find these warnings
to be unbelievably bogus!

There is nothing in `cl-map-overlays' nor `cl-map-intervals' which is specific
to Common Lisp, and whatever compatibility code was in `cl-map-extents' has long
since been removed. AFAIK none of these functions have ever been features
provided by Common Lisp and aren't required for compatibility with Common
Lisp. These were features _added_ by cl.el on top of the `loop' macro.
Likewise, none of thes functions require use of CL style keywords so
its not like
there is anything which would suggest that the "cl-" namespacing is
needed. Regardless it certainly shouldn't be causing the byte-compiler to issue
warnings.

My impression is that GNU Emacs' policy on use of `loop' macro is that top-level
functions are allowed to contain loop forms without penalty of the byte-compiler
signalling warnings about their expansion at compile-time. Disregarding
whether the rationale behind this policy is entirely reasonable, it is more than
a little hypocritical to enforce explicit constraints on how and when one may
use a feature distributed _with_ Emacs core (inside the
lisp/emacs-lisp directory)
only to penalize users when they attempt to use some non-Common Lisp
feature that
Emacs strapped onto a Common Lisp compatibility library.

Given the existing prejudiced policy regarding use of cl.el at runtime, TRT to
do w/re these and any other similar such `loop' features not explictity provided
for in the CL spec would be to:

 - remove them from the `loop' macro. IOW completely disallow the ability to map
   over buffer overlays and intervals, windows, frames, screens, buffers,
   etc. as none of thse are specific to Common Lisp either (cf Bug#7492 re
   mapping windows and minibuffer frames);

 - move `cl-map-overlays', `cl-map-intervals', and `cl-map-extents' into a
   different namespace;

 - subsitute some other non predjudiced procedure in place of `loop's use of
   `cl-map-overlays' and `cl-map-intervals';

 - subsitute some other non predjudiece procedure in place of `loop's use of
   `cl-map-overlays' and `cl-map-intervals';

From lisp/ in trunk current through bzr revision 102638 rgrep matches for:

;; cl-map-overlays:

./emacs-lisp/cl-extra.el:273:(defun cl-map-overlays (cl-func &optional
cl-buffer cl-start cl-end cl-arg)
./emacs-lisp/cl-extra.el:314:(defalias 'cl-map-extents 'cl-map-overlays)
./emacs-lisp/cl-loaddefs.el:11:;;;;;;  cl-map-overlays
cl-map-intervals cl-map-keymap-recursively
./emacs-lisp/cl-loaddefs.el:96:(autoload 'cl-map-overlays "cl-extra" "\
./ChangeLog.9:18443:	(cl-map-overlays): Use with-current-buffer.

;; cl-map-intervals:

./emacs-lisp/cl-macs.el:940:			`(cl-map-intervals
./emacs-lisp/cl-loaddefs.el:11:;;;;;;  cl-map-overlays
cl-map-intervals cl-map-keymap-recursively
./emacs-lisp/cl-loaddefs.el:91:(autoload 'cl-map-intervals "cl-extra" "\
./ChangeLog.9:18441:	(cl-map-intervals): Use with-current-buffer.
Don't check for

;; cl-map-extents:

./emacs-lisp/cl-macs.el:915:			`(cl-map-extents
./emacs-lisp/cl-extra.el:314:(defalias 'cl-map-extents 'cl-map-overlays)
./ChangeLog.8:268:	(cl-map-extents): Remove compatibility code.

--
/s_P\



             reply	other threads:[~2010-12-11 22:48 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-12-11 22:48 MON KEY [this message]
2010-12-12 11:44 ` Removing non `loop' features from cl.el - `cl-map-overlays', `cl-map-intervals', `cl-map-extents' Stephen J. Turnbull
2010-12-12 21:29   ` MON KEY

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='AANLkTikW9_18bWgwXhaFNfn5-vemMU2gTqqpHGe6X7=3@mail.gmail.com' \
    --to=monkey@sandpframing.com \
    --cc=emacs-devel@gnu.org \
    /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.