unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Re: master 71783e9: Add the string-numeric-lessp function
       [not found] ` <E1aXLiO-0006ZB-4R@vcs.savannah.gnu.org>
@ 2016-02-21  4:43   ` Lars Ingebrigtsen
  2016-02-21  5:36     ` Lars Ingebrigtsen
  2016-02-21 21:30     ` Paul Eggert
  0 siblings, 2 replies; 29+ messages in thread
From: Lars Ingebrigtsen @ 2016-02-21  4:43 UTC (permalink / raw)
  To: emacs-devel

Lars Ingebrigtsen <larsi@gnus.org> writes:

Ok, this is now implemented:

> +DEFUN ("string-numeric-lessp", Fstring_numeric_lessp,

Replete with tests.  Feel free to change the name, implementation, or
anything else.  :-)

Particularly this:

> +      /* If we're still in a number, add it to the sum and continue. */
> +      /* FIXME: Integer overflow? */
> +      if (c >= '0' && c <= '9')
> +	{
> +	  number = number * 10;
> +	  number += c - '0';
> +	  (*isp)++;
> +	  (*isp_byte) += chlen;
> +	}
> +      else
> +	break;
> +    }

There has to be a simple way to do that check...  hm...  I see that
`string-to-number' uses strtoumax...  Hm...  perhaps I can rewrite this
function to use that instead...

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: master 71783e9: Add the string-numeric-lessp function
  2016-02-21  4:43   ` master 71783e9: Add the string-numeric-lessp function Lars Ingebrigtsen
@ 2016-02-21  5:36     ` Lars Ingebrigtsen
  2016-02-21  6:15       ` Stephan Mueller
  2016-02-21 21:30     ` Paul Eggert
  1 sibling, 1 reply; 29+ messages in thread
From: Lars Ingebrigtsen @ 2016-02-21  5:36 UTC (permalink / raw)
  To: emacs-devel

Lars Ingebrigtsen <larsi@gnus.org> writes:

> There has to be a simple way to do that check...  hm...  I see that
> `string-to-number' uses strtoumax...  Hm...  perhaps I can rewrite this
> function to use that instead...

The code almost got simpler, even.  `string-numeric-lessp' now reverts
to calling `string-lessp' if any of the embedded numbers overflow
size_t.  I think that should be OK for any real world usages...  I mean,
even that could be fixed if we want to be really picky, but I'm not sure
it's worth it.

(The fix would be: If the numerical stretches are of unequal length,
then obviously the shorter one is smaller than the longer.  If they're
of equal length, then we can just compare the numerical stretches
lexicographically.  So we don't really really need to convert anything
to numbers, anyway...)

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no



^ permalink raw reply	[flat|nested] 29+ messages in thread

* RE: master 71783e9: Add the string-numeric-lessp function
  2016-02-21  5:36     ` Lars Ingebrigtsen
@ 2016-02-21  6:15       ` Stephan Mueller
  2016-02-21 10:02         ` Lars Ingebrigtsen
  0 siblings, 1 reply; 29+ messages in thread
From: Stephan Mueller @ 2016-02-21  6:15 UTC (permalink / raw)
  To: Lars Ingebrigtsen, emacs-devel@gnu.org

Lars Ingebrigtsen <larsi@gnus.org> writes:

" The code almost got simpler, even.  `string-numeric-lessp' now reverts
" to calling `string-lessp' if any of the embedded numbers overflow
" size_t.  I think that should be OK for any real world usages...  I mean,
" even that could be fixed if we want to be really picky, but I'm not sure
" it's worth it.

" (The fix would be: If the numerical stretches are of unequal length,
" then obviously the shorter one is smaller than the longer.  If they're
" of equal length, then we can just compare the numerical stretches
" lexicographically.  So we don't really really need to convert anything
" to numbers, anyway...)

Given you're in the code anyway, and have the fix worked out, I'd
be inclined to make the fix.  But the fix might need a fix: what if the
longer one starts with zeros?

stephan();





^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: master 71783e9: Add the string-numeric-lessp function
  2016-02-21  6:15       ` Stephan Mueller
@ 2016-02-21 10:02         ` Lars Ingebrigtsen
  2016-02-21 19:35           ` Yuri Khan
  0 siblings, 1 reply; 29+ messages in thread
From: Lars Ingebrigtsen @ 2016-02-21 10:02 UTC (permalink / raw)
  To: Stephan Mueller; +Cc: emacs-devel@gnu.org

Stephan Mueller <Stephan.Mueller@microsoft.com> writes:

> Given you're in the code anyway, and have the fix worked out, I'd
> be inclined to make the fix.  But the fix might need a fix: what if the
> longer one starts with zeros?

Oh, that's true...  it should skip leading zeroes.

Yeah, I'll do the fix.  I think the code will perhaps be even simpler
(and shorter) then.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: master 71783e9: Add the string-numeric-lessp function
  2016-02-21 10:02         ` Lars Ingebrigtsen
@ 2016-02-21 19:35           ` Yuri Khan
  2016-02-22  2:51             ` Lars Ingebrigtsen
  2016-02-22 17:59             ` Richard Stallman
  0 siblings, 2 replies; 29+ messages in thread
From: Yuri Khan @ 2016-02-21 19:35 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: emacs-devel@gnu.org, Stephan Mueller

On Sun, Feb 21, 2016 at 4:02 PM, Lars Ingebrigtsen <larsi@gnus.org> wrote:

> Oh, that's true...  it should skip leading zeroes.

Skipping zeroes will make strings that differ only in the number of
leading zeros (e.g. 001 and 01) equivalent under that sorting order.
Are you okay with that?



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: master 71783e9: Add the string-numeric-lessp function
  2016-02-21  4:43   ` master 71783e9: Add the string-numeric-lessp function Lars Ingebrigtsen
  2016-02-21  5:36     ` Lars Ingebrigtsen
@ 2016-02-21 21:30     ` Paul Eggert
  2016-02-22  1:32       ` Andy Moreton
  2016-02-22  2:53       ` Lars Ingebrigtsen
  1 sibling, 2 replies; 29+ messages in thread
From: Paul Eggert @ 2016-02-21 21:30 UTC (permalink / raw)
  To: Lars Ingebrigtsen, emacs-devel

Lars Ingebrigtsen wrote:
> Feel free to change the name, implementation, or
> anything else.  :-)

Thanks, I did that.  The idea of my followup is to use the same algorithm that 
GNU ls -v does, rather than invent yet another file name comparison algorithm. 
This should also handle very long integers correctly.  I also changed the name 
to be more like the names used elsewhere.  Please feel free to revert.



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: master 71783e9: Add the string-numeric-lessp function
  2016-02-21 21:30     ` Paul Eggert
@ 2016-02-22  1:32       ` Andy Moreton
  2016-02-22  4:01         ` Paul Eggert
  2016-02-22  2:53       ` Lars Ingebrigtsen
  1 sibling, 1 reply; 29+ messages in thread
From: Andy Moreton @ 2016-02-22  1:32 UTC (permalink / raw)
  To: emacs-devel

On Sun 21 Feb 2016, Paul Eggert wrote:

> Lars Ingebrigtsen wrote:
>> Feel free to change the name, implementation, or
>> anything else.  :-)
>
> Thanks, I did that.  The idea of my followup is to use the same algorithm that
> GNU ls -v does, rather than invent yet another file name comparison algorithm.
> This should also handle very long integers correctly.  I also changed the name
> to be more like the names used elsewhere.  Please feel free to revert.

Paul, your patch using the gnulib filevercmp function also needs an
update to nt/gnulib.mk to keep the Windows builds working.

fns.o: In function `Fstring_version_lessp':
C:\emacs\git\emacs\master\obj-mingw64\src/../../src/fns.c:364: undefined reference to `filevercmp'
C:\emacs\git\emacs\master\obj-mingw64\src/../../src/fns.c:364:(.text+0x10a2): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `filevercmp'

This seems to work:

diff --git a/nt/gnulib.mk b/nt/gnulib.mk
index 6884bf9..a1d207e 100644
--- a/nt/gnulib.mk
+++ b/nt/gnulib.mk
@@ -334,6 +334,14 @@ EXTRA_DIST += filemode.h

 ## end   gnulib module filemode

+## begin gnulib module filevercmp
+
+libgnu_a_SOURCES += filevercmp.c
+
+EXTRA_DIST += filevercmp.h
+
+## end   gnulib module filevercmp
+
 ## begin gnulib module fpending


After applying that, master bootstraps for 64bit mingw64 again.

    AndyM





^ permalink raw reply related	[flat|nested] 29+ messages in thread

* Re: master 71783e9: Add the string-numeric-lessp function
  2016-02-21 19:35           ` Yuri Khan
@ 2016-02-22  2:51             ` Lars Ingebrigtsen
  2016-02-22 17:59             ` Richard Stallman
  1 sibling, 0 replies; 29+ messages in thread
From: Lars Ingebrigtsen @ 2016-02-22  2:51 UTC (permalink / raw)
  To: Yuri Khan; +Cc: Stephan Mueller, emacs-devel@gnu.org

Yuri Khan <yuri.v.khan@gmail.com> writes:

> Skipping zeroes will make strings that differ only in the number of
> leading zeros (e.g. 001 and 01) equivalent under that sorting order.
> Are you okay with that?

Yeah, I think those should be equivalent.  If you have a directory with
foo003.png and foo1.png, I would expect the latter to be sorted before
the former.  I think.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: master 71783e9: Add the string-numeric-lessp function
  2016-02-21 21:30     ` Paul Eggert
  2016-02-22  1:32       ` Andy Moreton
@ 2016-02-22  2:53       ` Lars Ingebrigtsen
  2016-02-22  3:50         ` Paul Eggert
  1 sibling, 1 reply; 29+ messages in thread
From: Lars Ingebrigtsen @ 2016-02-22  2:53 UTC (permalink / raw)
  To: Paul Eggert; +Cc: emacs-devel

Paul Eggert <eggert@cs.ucla.edu> writes:

> Thanks, I did that.  The idea of my followup is to use the same
> algorithm that GNU ls -v does, rather than invent yet another file
> name comparison algorithm. This should also handle very long integers
> correctly.  I also changed the name to be more like the names used
> elsewhere.  Please feel free to revert.

Looks nice, but I don't think that's a very good function name.  It
sounds like something that is only meant to be used for version strings,
instead of something that happens to work on version strings as well..

And is this supposed to be this way?

(string-version-lessp "foo001.png" "foo1.png")
=> t

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: master 71783e9: Add the string-numeric-lessp function
  2016-02-22  2:53       ` Lars Ingebrigtsen
@ 2016-02-22  3:50         ` Paul Eggert
  2016-02-22  4:00           ` Lars Ingebrigtsen
  0 siblings, 1 reply; 29+ messages in thread
From: Paul Eggert @ 2016-02-22  3:50 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: emacs-devel

Lars Ingebrigtsen wrote:
> Looks nice, but I don't think that's a very good function name.  It
> sounds like something that is only meant to be used for version strings,
> instead of something that happens to work on version strings as well..

Not quite sure I'm following. Every string is a version string.

The function name was inspired by glibc's strverscmp; see:

http://www.gnu.org/software/libc/manual/html_node/String_002fArray-Comparison.html#index-strverscmp

Please feel free to change the name.


> And is this supposed to be this way?
>
> (string-version-lessp "foo001.png" "foo1.png")

Yes, if the version numbers and everything else result in a tie, it falls back 
on straight lexicographic comparison. Having the function be anything other than 
a total order would cause problems in sorting functions that use it to compare.


Oh, and in response to one of your other questions: this function should be 
useful for package versions as well as file names. For example, I recently 
updated my libc-bin version on Ubuntu from 2.21-0ubuntu4 to 2.21-0ubuntu4.1 as 
part of the getaddrinfo security update.



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: master 71783e9: Add the string-numeric-lessp function
  2016-02-22  3:50         ` Paul Eggert
@ 2016-02-22  4:00           ` Lars Ingebrigtsen
  2016-02-22  4:16             ` Paul Eggert
  0 siblings, 1 reply; 29+ messages in thread
From: Lars Ingebrigtsen @ 2016-02-22  4:00 UTC (permalink / raw)
  To: Paul Eggert; +Cc: emacs-devel

Paul Eggert <eggert@cs.ucla.edu> writes:

> Not quite sure I'm following. Every string is a version string.

I don't think I agree with that.  All version strings are strings,
though.

>> And is this supposed to be this way?
>>
>> (string-version-lessp "foo001.png" "foo1.png")
>
> Yes, if the version numbers and everything else result in a tie, it
> falls back on straight lexicographic comparison. Having the function
> be anything other than a total order would cause problems in sorting
> functions that use it to compare.

That sounds fine for version numbers, but is not what we want when
sorting file names, I think.

> Oh, and in response to one of your other questions: this function
> should be useful for package versions as well as file names. For
> example, I recently updated my libc-bin version on Ubuntu from
> 2.21-0ubuntu4 to 2.21-0ubuntu4.1 as part of the getaddrinfo security
> update.

I don't think that's something our numerical string comparison function
should be doing.  This version string thing sounds very much geared
towards version strings, and that's fine.  Using that function for
anything else seems increasingly odd.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: master 71783e9: Add the string-numeric-lessp function
  2016-02-22  1:32       ` Andy Moreton
@ 2016-02-22  4:01         ` Paul Eggert
  2016-02-22 16:11           ` Eli Zaretskii
  0 siblings, 1 reply; 29+ messages in thread
From: Paul Eggert @ 2016-02-22  4:01 UTC (permalink / raw)
  To: Andy Moreton, emacs-devel

Andy Moreton wrote:

> +libgnu_a_SOURCES += filevercmp.c
> +
> +EXTRA_DIST += filevercmp.h

Thanks, I added that to master. Someday nt/gnulib.mk should be built 
automatically, as lib/gnulib.mk is ...




^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: master 71783e9: Add the string-numeric-lessp function
  2016-02-22  4:00           ` Lars Ingebrigtsen
@ 2016-02-22  4:16             ` Paul Eggert
  2016-02-22  4:22               ` Lars Ingebrigtsen
  2016-03-07  0:16               ` Juri Linkov
  0 siblings, 2 replies; 29+ messages in thread
From: Paul Eggert @ 2016-02-22  4:16 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: emacs-devel

Lars Ingebrigtsen wrote:

> I don't think that's something our numerical string comparison function
> should be doing.

Again, I'm not sure I'm following. The two strings "2.21-0ubuntu4" and 
"2.21-0ubuntu4.1" are identical except the latter has ".1" appended. Shouldn't 
almost any sane kind of string comparison consider the shorter to be less than 
the longer?

If only some strings are valid for comparison, I suppose the comparison function 
could be a partial function, e.g., it could signal an error when given a string 
that it doesn't think has a valid format. This of course could be done, but it 
makes usage more complicated. For sorting, having comparison functions be total 
functions is much simpler to explain.

At least, that's been the tradition in other GNU tools. GNU ls -v applies the 
string-version-lessp algorithm to every pair of file names that it considers, 
and it works on arbitrary file names. It sounds like you may be thinking of some 
other tradition, although I'm not sure what that tradition would be.

The GNU ls -v approach works well in practice, because people who care about 
version numbers tend to name their files consistently. E.g., they do not put 
files "foo001.png" "foo1.png" in the same directory, because that kind of usage 
would confuse humans no matter what 'ls -v' does.



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: master 71783e9: Add the string-numeric-lessp function
  2016-02-22  4:16             ` Paul Eggert
@ 2016-02-22  4:22               ` Lars Ingebrigtsen
  2016-02-22  5:56                 ` Paul Eggert
  2016-03-07  0:16               ` Juri Linkov
  1 sibling, 1 reply; 29+ messages in thread
From: Lars Ingebrigtsen @ 2016-02-22  4:22 UTC (permalink / raw)
  To: Paul Eggert; +Cc: emacs-devel

Paul Eggert <eggert@cs.ucla.edu> writes:

> Lars Ingebrigtsen wrote:
>
>> I don't think that's something our numerical string comparison function
>> should be doing.
>
> Again, I'm not sure I'm following. The two strings "2.21-0ubuntu4" and
> "2.21-0ubuntu4.1" are identical except the latter has ".1"
> appended. Shouldn't almost any sane kind of string comparison consider
> the shorter to be less than the longer?

Oh, I thought you meant that it considered "4.1" to be one unit in the
string, and compared as such.  Sorry for misunderstanding.

> The GNU ls -v approach works well in practice, because people who care
> about version numbers tend to name their files consistently. E.g.,
> they do not put files "foo001.png" "foo1.png" in the same directory,
> because that kind of usage would confuse humans no matter what 'ls -v'
> does.

Yeah, but this isn't about people who care about version numbers.  Its
about real world usage where people just dump a lot of files in a
directory, and expect to be able to find them afterwards.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: master 71783e9: Add the string-numeric-lessp function
  2016-02-22  4:22               ` Lars Ingebrigtsen
@ 2016-02-22  5:56                 ` Paul Eggert
  0 siblings, 0 replies; 29+ messages in thread
From: Paul Eggert @ 2016-02-22  5:56 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: emacs-devel

Lars Ingebrigtsen wrote:

> this isn't about people who care about version numbers.  Its
> about real world usage where people just dump a lot of files in a
> directory, and expect to be able to find them afterwards.

What can I say? In practice, ls -v seems to work well enough. Perhaps people who 
just dump a lot of files in a directory tend to not care whether foo001.png 
comes before foo1.png so long as they're put close to each other, which they are.



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: master 71783e9: Add the string-numeric-lessp function
  2016-02-22  4:01         ` Paul Eggert
@ 2016-02-22 16:11           ` Eli Zaretskii
  0 siblings, 0 replies; 29+ messages in thread
From: Eli Zaretskii @ 2016-02-22 16:11 UTC (permalink / raw)
  To: Paul Eggert; +Cc: andrewjmoreton, emacs-devel

> From: Paul Eggert <eggert@cs.ucla.edu>
> Date: Sun, 21 Feb 2016 20:01:57 -0800
> 
> Andy Moreton wrote:
> 
> > +libgnu_a_SOURCES += filevercmp.c
> > +
> > +EXTRA_DIST += filevercmp.h
> 
> Thanks, I added that to master. Someday nt/gnulib.mk should be built 
> automatically, as lib/gnulib.mk is ...

Indeed.  Patches to that effect will be most welcome.



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: master 71783e9: Add the string-numeric-lessp function
  2016-02-21 19:35           ` Yuri Khan
  2016-02-22  2:51             ` Lars Ingebrigtsen
@ 2016-02-22 17:59             ` Richard Stallman
  1 sibling, 0 replies; 29+ messages in thread
From: Richard Stallman @ 2016-02-22 17:59 UTC (permalink / raw)
  To: Yuri Khan; +Cc: larsi, Stephan.Mueller, emacs-devel

[[[ To any NSA and FBI agents reading my email: please consider    ]]]
[[[ whether defending the US Constitution against all enemies,     ]]]
[[[ foreign or domestic, requires you to follow Snowden's example. ]]]

  > Skipping zeroes will make strings that differ only in the number of
  > leading zeros (e.g. 001 and 01) equivalent under that sorting order.
  > Are you okay with that?

001 and 01 should both sort between 0 and 2, but they should not be
equivalent.  They should have some defined order.

I think that 01 should be less than 001, but I don't insist.

-- 
Dr Richard Stallman
President, Free Software Foundation (gnu.org, fsf.org)
Internet Hall-of-Famer (internethalloffame.org)
Skype: No way! See stallman.org/skype.html.




^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: master 71783e9: Add the string-numeric-lessp function
  2016-02-22  4:16             ` Paul Eggert
  2016-02-22  4:22               ` Lars Ingebrigtsen
@ 2016-03-07  0:16               ` Juri Linkov
  2016-03-07  0:53                 ` Paul Eggert
  2016-03-07  2:27                 ` Drew Adams
  1 sibling, 2 replies; 29+ messages in thread
From: Juri Linkov @ 2016-03-07  0:16 UTC (permalink / raw)
  To: Paul Eggert; +Cc: Lars Ingebrigtsen, emacs-devel

> At least, that's been the tradition in other GNU tools. GNU ls -v applies
> the string-version-lessp algorithm to every pair of file names that it
> considers, and it works on arbitrary file names. It sounds like you may be
> thinking of some other tradition, although I'm not sure what that tradition
> would be.
>
> The GNU ls -v approach works well in practice, because people who care
> about version numbers tend to name their files consistently. E.g., they do
> not put files "foo001.png" "foo1.png" in the same directory, because that
> kind of usage would confuse humans no matter what 'ls -v' does.

I tried GNU ls -v, but unfortunately it is unusable because of a bug in
GNU ls -v.  It places backup files before original files, e.g. `ls -lv`

-rw-r--r-- 1   158,018 Feb 23 12:01 dired.el
-rw-r--r-- 1   117,286 Feb 23 12:23 dired.elc
-rw-r--r-- 1   110,076 Feb 23 12:01 dired-aux.el
-rw-r--r-- 1    81,586 Feb 23 12:23 dired-aux.elc
-rw-r--r-- 1       253 Feb 23 12:12 dired-loaddefs.el~
-rw-r--r-- 1    20,628 Feb 23 12:12 dired-loaddefs.el
-rw-r--r-- 1    66,420 Feb 23 12:01 dired-x.el
-rw-r--r-- 1    47,687 Feb 23 12:23 dired-x.elc

dired-loaddefs.el~ is sorted to come before dired-loaddefs.el
whereas in `ls -l`

-rw-r--r-- 1   110,076 Feb 23 12:01 dired-aux.el
-rw-r--r-- 1    81,586 Feb 23 12:23 dired-aux.elc
-rw-r--r-- 1   158,018 Feb 23 12:01 dired.el
-rw-r--r-- 1   117,286 Feb 23 12:23 dired.elc
-rw-r--r-- 1    20,628 Feb 23 12:12 dired-loaddefs.el
-rw-r--r-- 1       253 Feb 23 12:12 dired-loaddefs.el~
-rw-r--r-- 1    66,420 Feb 23 12:01 dired-x.el
-rw-r--r-- 1    47,687 Feb 23 12:23 dired-x.elc

dired-loaddefs.el~ naturally comes after dired-loaddefs.el
(as dired.elc naturally comes after dired.el).

The same bug now propagates to ‘string-version-lessp’:

(sort '(
"dired.el"
"dired.elc"
"dired-aux.el"
"dired-aux.elc"
"dired-loaddefs.el"
"dired-loaddefs.el~"
"dired-x.el"
"dired-x.elc"
)
'string-version-lessp)

=>

"dired.el"
"dired.elc"
"dired-aux.el"
"dired-aux.elc"
"dired-loaddefs.el~" <=
"dired-loaddefs.el"  <=
"dired-x.el"
"dired-x.elc"



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: master 71783e9: Add the string-numeric-lessp function
  2016-03-07  0:16               ` Juri Linkov
@ 2016-03-07  0:53                 ` Paul Eggert
  2016-03-07 17:45                   ` Richard Stallman
                                     ` (2 more replies)
  2016-03-07  2:27                 ` Drew Adams
  1 sibling, 3 replies; 29+ messages in thread
From: Paul Eggert @ 2016-03-07  0:53 UTC (permalink / raw)
  To: Juri Linkov; +Cc: Lars Ingebrigtsen, emacs-devel

Juri Linkov wrote:
> It places backup files before original files

That's a good thing, as it's natural for the older version to come before the 
newer one.



^ permalink raw reply	[flat|nested] 29+ messages in thread

* RE: master 71783e9: Add the string-numeric-lessp function
  2016-03-07  0:16               ` Juri Linkov
  2016-03-07  0:53                 ` Paul Eggert
@ 2016-03-07  2:27                 ` Drew Adams
  2016-03-07 21:14                   ` Johan Bockgård
  1 sibling, 1 reply; 29+ messages in thread
From: Drew Adams @ 2016-03-07  2:27 UTC (permalink / raw)
  To: Juri Linkov, Paul Eggert; +Cc: Lars Ingebrigtsen, emacs-devel

`string-numeric-lessp' really should follow the Emacs
convention and be called `string-numeric-less-p'.

It's not because `string-less-p' is misnamed that we
should add to this mistake.  `time-less-p' is correctly
named, for example.

Or else the rule should be clarified to incorporate
`-lessp' exceptions, so they are within, and not outside,
the rule.


The following 25 are the only such misnamed predicates
I see (in a pretty minimal setup - there may be some
more in Gnus, Org, etc.).  6 of them end in `-lessp'.

 auth-source-specmatchp
 bool-vector-subsetp
 byte-compile-nilconstp
 byte-compile-trueconstp
 byte-optimize-all-constp
 byte-optimize-zerop
 cl--compiler-macro-typep
 cl--macroexp-fboundp
 coding-system-lessp
 custom-facep
 customize-version-lessp
 default-boundp
 dired-tree-lessp
 eieio--typep
 file-attributes-lessp
 gnus-boundp
 gnutls-error-fatalp
 gnutls-errorp
 hack-one-local-variable-constantp
 hack-one-local-variable-eval-safep
 hack-one-local-variable-quotep
 ls-lisp-string-lessp
 slot-boundp
 string-lessp
 uniquify-item-greaterp

That's 25 out of 438 predicates total whose names end in
`p', which I count at the outset in a pretty minimal setup.

So less than 6% of predicate names that end in `p' do not
follow the rule.  94% follow it correctly.

The following predicates are also wrongly named, but they
should not have prefix `cl-' anyway.  Remove the misguided
prefix and these names will all follow the rule.

 cl-endp
 cl-equalp
 cl-evenp
 cl-minusp
 cl-oddp
 cl-plusp
 cl-subsetp
 cl-tailp
 cl-typep



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: master 71783e9: Add the string-numeric-lessp function
  2016-03-07  0:53                 ` Paul Eggert
@ 2016-03-07 17:45                   ` Richard Stallman
  2016-03-07 17:49                   ` Lars Magne Ingebrigtsen
  2016-03-07 23:52                   ` Juri Linkov
  2 siblings, 0 replies; 29+ messages in thread
From: Richard Stallman @ 2016-03-07 17:45 UTC (permalink / raw)
  To: Paul Eggert; +Cc: larsi, emacs-devel, juri

[[[ To any NSA and FBI agents reading my email: please consider    ]]]
[[[ whether defending the US Constitution against all enemies,     ]]]
[[[ foreign or domestic, requires you to follow Snowden's example. ]]]

  > > It places backup files before original files

  > That's a good thing, as it's natural for the older version to come before the 
  > newer one.

I think it is unnatural and confusing.

-- 
Dr Richard Stallman
President, Free Software Foundation (gnu.org, fsf.org)
Internet Hall-of-Famer (internethalloffame.org)
Skype: No way! See stallman.org/skype.html.




^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: master 71783e9: Add the string-numeric-lessp function
  2016-03-07  0:53                 ` Paul Eggert
  2016-03-07 17:45                   ` Richard Stallman
@ 2016-03-07 17:49                   ` Lars Magne Ingebrigtsen
  2016-03-07 23:55                     ` Juri Linkov
  2016-03-07 23:52                   ` Juri Linkov
  2 siblings, 1 reply; 29+ messages in thread
From: Lars Magne Ingebrigtsen @ 2016-03-07 17:49 UTC (permalink / raw)
  To: Paul Eggert; +Cc: emacs-devel, Juri Linkov

Paul Eggert <eggert@cs.ucla.edu> writes:

> That's a good thing, as it's natural for the older version to come
> before the newer one.

And that's another reason why we shouldn't be using "version" sorting to
sort file names.  Nobody wants that.  Except people who are sorting
versions of software packages.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: master 71783e9: Add the string-numeric-lessp function
  2016-03-07  2:27                 ` Drew Adams
@ 2016-03-07 21:14                   ` Johan Bockgård
  2016-03-07 22:03                     ` Drew Adams
  0 siblings, 1 reply; 29+ messages in thread
From: Johan Bockgård @ 2016-03-07 21:14 UTC (permalink / raw)
  To: Drew Adams; +Cc: Lars Ingebrigtsen, Paul Eggert, emacs-devel, Juri Linkov

Drew Adams <drew.adams@oracle.com> writes:

> `string-numeric-lessp' really should follow the Emacs
> convention and be called `string-numeric-less-p'.
>
> It's not because `string-less-p' is misnamed that we
> should add to this mistake.  `time-less-p' is correctly
> named, for example.
>
> Or else the rule should be clarified to incorporate
> `-lessp' exceptions, so they are within, and not outside,
> the rule.

I think the rule in the Emacs Lisp manual is too simplistic. In practice
we seem to follow something closer to this rule:


   By convention, the names of predicates usually end in the letter p
   (which stands for ``predicate''). Common Lisp uses a uniform
   convention in hyphenating names of predicates. If the name of the
   predicate is formed by adding a p to an existing name, such as the
   name of a data type, a hyphen is placed before the final p if and
   only if there is a hyphen in the existing name. For example, number
   begets numberp but standard-char begets standard-char-p. On the other
   hand, if the name of a predicate is formed by adding a prefixing
   qualifier to the front of an existing predicate name, the two names
   are joined with a hyphen and the presence or absence of a hyphen
   before the final p is not changed. For example, the predicate
   string-lessp has no hyphen before the p because it is the string
   version of lessp (a MacLisp function that has been renamed < in
   Common Lisp). The name string-less-p would incorrectly imply that it
   is a predicate that tests for a kind of object called a string-less,
   and the name stringlessp would connote a predicate that tests whether
   something has no strings (is ``stringless'')!

from CLTL, https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node69.html



^ permalink raw reply	[flat|nested] 29+ messages in thread

* RE: master 71783e9: Add the string-numeric-lessp function
  2016-03-07 21:14                   ` Johan Bockgård
@ 2016-03-07 22:03                     ` Drew Adams
  0 siblings, 0 replies; 29+ messages in thread
From: Drew Adams @ 2016-03-07 22:03 UTC (permalink / raw)
  To: Johan Bockgård
  Cc: Lars Ingebrigtsen, Paul Eggert, emacs-devel, Juri Linkov

> > Or else the rule should be clarified to incorporate
> > `-lessp' exceptions, so they are within, and not outside,
> > the rule.
> 
> I think the rule in the Emacs Lisp manual is too simplistic. In
> practice
> we seem to follow something closer to this rule:
> 
> 
>    By convention, the names of predicates usually end in the letter
>    p (which stands for ``predicate''). Common Lisp uses a uniform
>    convention in hyphenating names of predicates. If the name of the
>    predicate is formed by adding a p to an existing name, such as
>    the name of a data type, a hyphen is placed before the final p if
>    and only if there is a hyphen in the existing name. For example,
>    number begets numberp but standard-char begets standard-char-p.
>    On the other hand, if the name of a predicate is formed by adding
>    a prefixing qualifier to the front of an existing predicate name,
>    the two names are joined with a hyphen and the presence or absence
>    of a hyphen before the final p is not changed. For example, the 
>    predicate string-lessp has no hyphen before the p because it is
>    the string version of lessp (a MacLisp function that has been
>    renamed < in Common Lisp). The name string-less-p would
>    incorrectly imply that it is a predicate that tests for a kind of
>    object called a string-less, and the name stringlessp would
>    connote a predicate that tests whether something has no strings
>    (is ``stringless'')!
> 
> from CLTL,
> https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node69.html

FWIW, that sounds reasonable to me.  It would be harder for the
casual developer to pay attention to (need to distinguish the
two cases, recognizing whether it is about prefixing an existing
predicate).  But given enough experienced eyes to catch an
oversight, it's a good idea, IMO.

If we go that route, let's make this change explicit, and not
just leave the old "simplistic" rule in place in the doc.



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: master 71783e9: Add the string-numeric-lessp function
  2016-03-07  0:53                 ` Paul Eggert
  2016-03-07 17:45                   ` Richard Stallman
  2016-03-07 17:49                   ` Lars Magne Ingebrigtsen
@ 2016-03-07 23:52                   ` Juri Linkov
  2016-03-08  2:06                     ` Paul Eggert
  2 siblings, 1 reply; 29+ messages in thread
From: Juri Linkov @ 2016-03-07 23:52 UTC (permalink / raw)
  To: Paul Eggert; +Cc: Lars Ingebrigtsen, emacs-devel

>> It places backup files before original files
>
> That's a good thing, as it's natural for the older version to come before
> the newer one.

Still this is the weirdest sorting order that I've ever seen
where single backups come before, but numbered backups after:

  -rw-r--r--  1 158,018  Mar  8 01:04 dired.el~
  -rw-r--r--  1 158,018  Mar  8 01:05 dired.el
  -rw-r--r--  1 158,018  Mar  8 01:01 dired.el.~1~
  -rw-r--r--  1 158,018  Mar  8 01:02 dired.el.~2~
  -rw-r--r--  1 158,018  Mar  8 01:03 dired.el.~3~



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: master 71783e9: Add the string-numeric-lessp function
  2016-03-07 17:49                   ` Lars Magne Ingebrigtsen
@ 2016-03-07 23:55                     ` Juri Linkov
  0 siblings, 0 replies; 29+ messages in thread
From: Juri Linkov @ 2016-03-07 23:55 UTC (permalink / raw)
  To: Lars Magne Ingebrigtsen; +Cc: Paul Eggert, emacs-devel

>> That's a good thing, as it's natural for the older version to come
>> before the newer one.
>
> And that's another reason why we shouldn't be using "version" sorting to
> sort file names.  Nobody wants that.  Except people who are sorting
> versions of software packages.

Actually I see no more problems with the current version sorting
other than discovered weirdness of sorting for single backups.



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: master 71783e9: Add the string-numeric-lessp function
  2016-03-07 23:52                   ` Juri Linkov
@ 2016-03-08  2:06                     ` Paul Eggert
  2016-03-08  9:26                       ` Andreas Schwab
  0 siblings, 1 reply; 29+ messages in thread
From: Paul Eggert @ 2016-03-08  2:06 UTC (permalink / raw)
  To: Juri Linkov; +Cc: Lars Ingebrigtsen, emacs-devel

Juri Linkov wrote:
> Still this is the weirdest sorting order that I've ever seen
> where single backups come before, but numbered backups after:
>
>    -rw-r--r--  1 158,018  Mar  8 01:04 dired.el~
>    -rw-r--r--  1 158,018  Mar  8 01:05 dired.el
>    -rw-r--r--  1 158,018  Mar  8 01:01 dired.el.~1~
>    -rw-r--r--  1 158,018  Mar  8 01:02 dired.el.~2~
>    -rw-r--r--  1 158,018  Mar  8 01:03 dired.el.~3~

I like it, as it clearly separates the two backup styles in the hopefully rare 
case where people have edited the same file with different backup styles.  (I 
don't use numbered backups so I don't run into the latter sort of names much.)

As it happens, someone complained about this GNU ls behavior many years ago:

https://lists.gnu.org/archive/html/bug-coreutils/2009-02/msg00250.html

with a response essentially the same as mine (great minds think alike ...):

https://lists.gnu.org/archive/html/bug-coreutils/2009-02/msg00254.html

Presumably the behavior could be changed in GNU 'ls', though this sounds low 
priority.  Anyway, I'd rather have Emacs and 'ls' behave the same by default, 
when sorting by version; that seems like a no-brainer.



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: master 71783e9: Add the string-numeric-lessp function
  2016-03-08  2:06                     ` Paul Eggert
@ 2016-03-08  9:26                       ` Andreas Schwab
  2016-03-09  9:26                         ` Paul Eggert
  0 siblings, 1 reply; 29+ messages in thread
From: Andreas Schwab @ 2016-03-08  9:26 UTC (permalink / raw)
  To: Paul Eggert; +Cc: Lars Ingebrigtsen, emacs-devel, Juri Linkov

Paul Eggert <eggert@cs.ucla.edu> writes:

> Juri Linkov wrote:
>> Still this is the weirdest sorting order that I've ever seen
>> where single backups come before, but numbered backups after:
>>
>>    -rw-r--r--  1 158,018  Mar  8 01:04 dired.el~
>>    -rw-r--r--  1 158,018  Mar  8 01:05 dired.el
>>    -rw-r--r--  1 158,018  Mar  8 01:01 dired.el.~1~
>>    -rw-r--r--  1 158,018  Mar  8 01:02 dired.el.~2~
>>    -rw-r--r--  1 158,018  Mar  8 01:03 dired.el.~3~
>
> I like it, as it clearly separates the two backup styles in the hopefully
> rare case where people have edited the same file with different backup
> styles.  (I don't use numbered backups so I don't run into the latter sort
> of names much.)

How does that fit with your previous statement?

> That's a good thing, as it's natural for the older version to come before
> the newer one.

Andreas.

-- 
Andreas Schwab, SUSE Labs, schwab@suse.de
GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE  1748 E4D4 88E3 0EEA B9D7
"And now for something completely different."



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: master 71783e9: Add the string-numeric-lessp function
  2016-03-08  9:26                       ` Andreas Schwab
@ 2016-03-09  9:26                         ` Paul Eggert
  0 siblings, 0 replies; 29+ messages in thread
From: Paul Eggert @ 2016-03-09  9:26 UTC (permalink / raw)
  To: Andreas Schwab; +Cc: Lars Ingebrigtsen, emacs-devel, Juri Linkov

Andreas Schwab wrote:
> Paul Eggert<eggert@cs.ucla.edu>  writes:
>
>> >Juri Linkov wrote:
>>> >>Still this is the weirdest sorting order that I've ever seen
>>> >>where single backups come before, but numbered backups after:
>>> >>
>>> >>    -rw-r--r--  1 158,018  Mar  8 01:04 dired.el~
>>> >>    -rw-r--r--  1 158,018  Mar  8 01:05 dired.el
>>> >>    -rw-r--r--  1 158,018  Mar  8 01:01 dired.el.~1~
>>> >>    -rw-r--r--  1 158,018  Mar  8 01:02 dired.el.~2~
>>> >>    -rw-r--r--  1 158,018  Mar  8 01:03 dired.el.~3~
>> >
>> >I like it, as it clearly separates the two backup styles in the hopefully
>> >rare case where people have edited the same file with different backup
>> >styles.  (I don't use numbered backups so I don't run into the latter sort
>> >of names much.)
> How does that fit with your previous statement?

It does and it doesn't. My previous statement was about the backup files I 
normally experience, which are like 'dired.el~'; I prefer seeing these files 
before the main file. I don't run into files like 'dired.el.~1~' often, as I 
prefer not to use that style. If I did run into them often, my first reaction 
was I like them segregated (as in the above) even at the cost of putting them 
out of "order". But now that you mention it, I suppose I should have gained more 
experience with this situation before expressing a preference. As the situation 
is unusual (at least for me), it's not likely I will gain experience with it any 
time soon. Anyway, most likely the situation is rare in general and is not worth 
worrying about.



^ permalink raw reply	[flat|nested] 29+ messages in thread

end of thread, other threads:[~2016-03-09  9:26 UTC | newest]

Thread overview: 29+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <20160221043348.25201.81719@vcs.savannah.gnu.org>
     [not found] ` <E1aXLiO-0006ZB-4R@vcs.savannah.gnu.org>
2016-02-21  4:43   ` master 71783e9: Add the string-numeric-lessp function Lars Ingebrigtsen
2016-02-21  5:36     ` Lars Ingebrigtsen
2016-02-21  6:15       ` Stephan Mueller
2016-02-21 10:02         ` Lars Ingebrigtsen
2016-02-21 19:35           ` Yuri Khan
2016-02-22  2:51             ` Lars Ingebrigtsen
2016-02-22 17:59             ` Richard Stallman
2016-02-21 21:30     ` Paul Eggert
2016-02-22  1:32       ` Andy Moreton
2016-02-22  4:01         ` Paul Eggert
2016-02-22 16:11           ` Eli Zaretskii
2016-02-22  2:53       ` Lars Ingebrigtsen
2016-02-22  3:50         ` Paul Eggert
2016-02-22  4:00           ` Lars Ingebrigtsen
2016-02-22  4:16             ` Paul Eggert
2016-02-22  4:22               ` Lars Ingebrigtsen
2016-02-22  5:56                 ` Paul Eggert
2016-03-07  0:16               ` Juri Linkov
2016-03-07  0:53                 ` Paul Eggert
2016-03-07 17:45                   ` Richard Stallman
2016-03-07 17:49                   ` Lars Magne Ingebrigtsen
2016-03-07 23:55                     ` Juri Linkov
2016-03-07 23:52                   ` Juri Linkov
2016-03-08  2:06                     ` Paul Eggert
2016-03-08  9:26                       ` Andreas Schwab
2016-03-09  9:26                         ` Paul Eggert
2016-03-07  2:27                 ` Drew Adams
2016-03-07 21:14                   ` Johan Bockgård
2016-03-07 22:03                     ` Drew Adams

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).