unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: "Wedler, Christoph" <christoph.wedler@sap.com>
Cc: emacs-devel@gnu.org
Subject: RE: [Suggestion] New function `emacs-version>='
Date: Mon, 5 May 2003 14:52:25 +0200	[thread overview]
Message-ID: <67B8CED503F3D511BB9F0008C75DAD66054855CB@dewdfx17> (raw)

Richard Stallman wrote:

 > It occurs to me that it might be useful to extend > and < to compare
 > lists of numbers, and also conses of two numbers. emacs-version>=
 > could trivially use that.

A "lexical-order extension" of < and > looks like a good idea.  A
remaining question:

 - will `emacs-version>=' be defined based on that?  or

 - is `emacs-version>=' considered too simple with this extension (a
   constant `emacs-patch-level' would be useful then)


To the discussion whether/when `emacs-version>=' should be used:

Of couse, as I said before, if a feature/fix A could be tested
*directly*, one should use that test, not some version or
Emacs-vs-XEmacs test.  E.g.,

  - (featurep 'some-feature)
  - (fbound 'some-function)  ; I only mentioned this in my prev mail
  - (boundp 'some-var)

The point is, as Stefan mentioned, that quite often, feature/fix A
cannot be tested directly (that's why I always included "fix" to make it
clearer).

I used to think like many here that version or Emacs-vs-XEmacs tests
should be avoided whenever possible, but I don't think anymore that this
is right.

One should not use tests like the ones above indirectly:

  - test for the `display' property:

    CORRECT: (emacs-version>= X Y)
    WRONG:   (fboundp 'some-function-introduced-with-X.Y)

  - test for some bug fix

    CORRECT: (emacs-version>= X Y)
    WRONG:   (fboundp 'some-function-introduced-with-X.Y)

  - test for "how things are done" in Emacs or XEmacs

    CORRECT: (featurep 'xemacs)
    WRONG:   (fboundp 'some-function-only-defined-in-xemacs)

    Reason: a future Emacs might define the function as a compatiblitiy
    function, but you still want to do it the Emacs' way


Juanma Barranquero wrote:
 > And, as a last resort, you can often do something like

 >   (unless (ignore-errors XXXX)
 >     YYYY)

similar in <http://www.dina.dk/~abraham/religion/crossemacs.html>:

 > When that is not possible, use

 > (condition-case nil
 >     (emacs-code)
 >   (error (xemacs-code)))

Well, I don't think this is right (in general[1]).  (Ehud also gave an
example where this can fail to work.)

For example, XEmacs' `directory-files' has an optional 5th arg
FILES-ONLY.  If I test

   (condition-case nil
       (directory-files some-dir nil nil nil t)
     (error (..EMACS-CODE...)))

this would fail if Emacs introduces a 5th arg with a different
semantics.  In other words, such a test is only correct if you know that
Emacs will define a 5th arg with the same semantics as XEmacs (or will
never define a 5th arg, but you'll never know that).  If this is not the
case, it is better to use

   (if (featurep 'xemacs)
       (directory-files some-dir nil nil nil t)
     (..EMACS-CODE...))

Juanma Barranquero wrote:
 > [...] But most features are not isolated, there are related
 > variables, functions [...another mail...] Wouldn't, in that case, be
 > enough to test for just *one* of these multiple features?

This is also very dangerous.  E.g., if you want to test whether your
Emacs distinguishes between buffer with unibyte and some with multi-byte
chars, you might want to test

   (boundp 'enable-multibyte-characters)

Unfortunately, this doesn't work since XEmacs defines this variable as a
compatiblitiy variable (but it doesn't define `set-buffer-multibyte',
but who knows whether XEmacs will define this function as a
compatiblitiy function in the future?).  In other words, the tests
shouldn't depend on whether there are some compatiblitiy functions or
variables.

Juanma Barranquero wrote:
 > Whether the feature is available in version X.Y is not that
 > clear-cut, specially if you're testing for a feature that appears in
 > a branch before being installed in the trunk (or even as a temporary
 > measure, while another, better fix is installed on the trunk).

I must say I don't really care too much if I miss a fix in some
temporary development branch.

- Christoph

[1] Yes, I read Juanmas "often", but I didn't argue against all
`fboundp' tests either...

         reply	other threads:[~2003-05-05 12:52 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-05-02 19:55 [Suggestion] New function `emacs-version>=' Wedler, Christoph
2003-05-02 21:00 ` Juanma Barranquero
2003-05-02 21:14   ` Stefan Monnier
2003-05-02 21:35     ` Juanma Barranquero
2003-05-03 11:12       ` Ehud Karni
2003-05-03 13:54         ` Juanma Barranquero
2003-05-03 16:08           ` Stephen J. Turnbull
2003-05-04 19:15             ` Juanma Barranquero
2003-05-06 11:05               ` Stephen J. Turnbull
2003-05-04 13:04           ` Richard Stallman
2003-05-03 17:48     ` Reiner Steib
2003-05-03 18:42       ` Stefan Monnier
2003-05-05 13:47         ` sort-coding-systems in 21.3 and RC branch (was: New function `emacs-version>=') Reiner Steib
2003-05-06  7:08           ` Kenichi Handa
2003-05-02 21:16 ` [Suggestion] New function `emacs-version>=' Thien-Thi Nguyen
2003-05-04 13:03 ` Richard Stallman
2003-05-05 12:52   ` Wedler, Christoph [this message]
2003-05-05 13:20     ` Juanma Barranquero
2003-05-05 19:11     ` Richard Stallman
2003-05-05 21:59     ` Luc Teirlinck
2003-05-06 23:42 ` Istvan Marko
  -- strict thread matches above, loose matches on Subject: below --
2003-05-06 11:10 Wedler, Christoph
2003-05-06 21:45 ` Luc Teirlinck
2003-05-07 11:51 ` Richard Stallman
2003-05-07 12:11 Wedler, Christoph
2003-05-07 12:46 ` Luc Teirlinck
2003-05-09 11:19 ` Richard Stallman

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

  List information: https://www.gnu.org/software/emacs/

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

  git send-email \
    --in-reply-to=67B8CED503F3D511BB9F0008C75DAD66054855CB@dewdfx17 \
    --to=christoph.wedler@sap.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 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).