r3wp [groups: 83 posts: 189283]
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

World: r3wp

[Core] Discuss core issues

Ladislav
10-Dec-2010
[713]
I know, that it is documented somewhere, that the Comparator can 
yield either logic! value or a number, where a negative number means 
"<", zero means "=", and a positive number means ">"
Andreas
10-Dec-2010
[714]
Btw, Linux A110's SORT seems rather stable for me :)
Ladislav
10-Dec-2010
[715]
using the example Brian gave?
BrianH
10-Dec-2010
[716]
Read the ticket. "Stable" means a different thing when applied to 
sorting algorithms.
Andreas
10-Dec-2010
[717]
Thanks Brian, I'm fine with terminology here.
BrianH
10-Dec-2010
[718]
No offence intended :)
Andreas
10-Dec-2010
[719x2]
I guess I wouldn't have told you about std::sort being unstable, 
if I wouldn't know what a stable sort is?
Yes Ladislav, for all examples in that ticket.
BrianH
10-Dec-2010
[721]
Sorry, momentary lack of humor. Did you mean that it works correctly 
on Linux?
Andreas
10-Dec-2010
[722]
Yes.
BrianH
10-Dec-2010
[723x2]
If so, please mention that in a ticket comment.
It might be a compiler problem.
Andreas
10-Dec-2010
[725]
A library problem, yes.
BrianH
10-Dec-2010
[726]
Are you talking about R2 or R3?
Andreas
10-Dec-2010
[727x2]
Read what I said above: A110
Two tests in the example code given in the ticket seem wrong to me.
BrianH
10-Dec-2010
[729]
Right, sorry. I read that after I sent the message.
Andreas
10-Dec-2010
[730x3]
; Verification using SAME?
>> set [c d] sort reduce [a: "a" b: "a"]
== ["a" "a"]
>> same? c a
== false  ; should be true
>> same? c b
== true  ; should be false
>> same? d a
== true  ; should be true
>> same? d b
== false  ; should be false
The last two tests should be the other way round, no?
same? d a ; should be false
same? d b ; should be true
BrianH
10-Dec-2010
[733]
Fixed.
Andreas
10-Dec-2010
[734]
Thanks
Steeve
10-Dec-2010
[735]
Btw, by reading again your samples Brian, I think now it"s weird 
for a quick sort.
Not exactly what I expected....
Andreas
10-Dec-2010
[736]
At least on Linux, it definitely is a qsort.
BrianH
10-Dec-2010
[737]
It might be using the C library qsort.
Andreas
10-Dec-2010
[738]
Calling the C librabry's qsort(3).
BrianH
10-Dec-2010
[739]
Definitely mention that in a ticket comment. We might be able to 
make this a platform-specific ticket.
Andreas
10-Dec-2010
[740x2]
Not really, I fear.
qsort(3) is not guaranteed to be stable.
BrianH
10-Dec-2010
[742]
I mean, mention that it works on Linux, if that is what your tests 
reveal.
Andreas
10-Dec-2010
[743x2]
(Neither is it guaranteed to be a quicksort.)
That it works on Linux is pure coincidence.
BrianH
10-Dec-2010
[745]
I ran into the problem when I was sorting words in a block and the 
bindings mattered.
Andreas
10-Dec-2010
[746]
If we want SORT to be stable, the implementation will have to abandon 
the use of qsort(3).
BrianH
10-Dec-2010
[747]
That would explain why the ticket is still not fixed. Please mention 
this in a ticket comment - it might lead to changing its status.
Andreas
10-Dec-2010
[748x2]
You can of course hack stability into qsort() by falling back to 
comparing adresses if values are the same.
Not sure if Carl likes that :)
BrianH
10-Dec-2010
[750x2]
That won't work, because we are comparing EQUAL? (maybe plus /case), 
not SAME?.
Does qsort take a comparison function? If so, it might be a error 
in that function.
Andreas
10-Dec-2010
[752]
I'm talking about the C side of things here.
BrianH
10-Dec-2010
[753]
Same here - a C function pointer.
Andreas
10-Dec-2010
[754x4]
Then I don't understand your EQUAL?/SAME? remark.
If two elements are EQUAL?, fall back to comparing their addresses 
in memory.
Won't work for linked lists, will work for arrays stored consecutively.
Sorry, missed that. Yes, qsort takes a callback used for comparison. 
Here's the decl:


void qsort(void *base, size_t nitems, size_t size, int (*compar)(const 
void *, const void*));
BrianH
10-Dec-2010
[758]
Sorry, I just got that you were talking about using <= instead of 
<.
Andreas
10-Dec-2010
[759x2]
My remark above was to the effect: if two elements are EQUAL? compare 
their INDEX? instead. This may sound ridiculous in context of REBOL's 
SORT, but it is no problem in C.
As the comparison callback gets pointers to the elements anyway.
BrianH
10-Dec-2010
[761]
I still think that you need to write this stuff in a ticket comment. 
Writing it here will have no effect - the ticket is where the real 
discussion happens, and I don't seem to understand your argument 
well enough in this case to paraphrase you there.
Andreas
10-Dec-2010
[762]
I'm writing already.