World: r3wp
[Core] Discuss core issues
older newer | first last |
Steeve 10-Dec-2010 [703] | I don't think it's the purpose of compare |
BrianH 10-Dec-2010 [704] | That is what I thought when I write the ticket. Could you give an example of /compare use which is stable, to add to the ticket? |
Steeve 10-Dec-2010 [705] | /compare is used to sort your own data structures |
BrianH 10-Dec-2010 [706] | Or to reverse a sort, or for whatever you need it to be for. |
Ladislav 10-Dec-2010 [707] | OK, Brian, will do |
Andreas 10-Dec-2010 [708] | For reversing we'd also have /reverse. |
BrianH 10-Dec-2010 [709x2] | Yeah, we have options for the most common variants, and the default for the most common case. The /compare option is for everything else. |
And not well enough documented either. I don't really know how /compare works, not completely. | |
Steeve 10-Dec-2010 [711] | to sort gobs for instance, with your own scheme |
BrianH 10-Dec-2010 [712] | I know *why* it is there, I just don't know how it *works*. How does it react to different return types of the comparison function? What types are allowed? When is the security hole going to be fixed? |
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. |
older newer | first last |