Inconsistent implementation of array sorting (old zend_qsort in array_multisort)
| From: | Benjamin Coutu | Date: | Thu, 23 Jun 2016 09:04:54 +0000 |
| Subject: | Inconsistent implementation of array sorting (old zend_qsort in array_multisort) | ||
| Groups: | php.internals | ||
| Request: | Send a blank email to internals+get-94219@lists.php.net to get a copy of this message | ||
Hello everyone,
While reviewing the array.c code base, I have noticed that the array_multisort function still uses
the old zend_qsort instead of the new zend_sort algorithm that was introduced with PHP 7.
That represents a clear inconsistency, because all other array sorting functions utilize the
advanced implementation of quicksort (through zend_hash_sort) that was derived from LLVM's
libc++ implementation of std::sort (https://marc.info/?l=php-internals&m=142047779209352).
Not only is zend_qsort less efficient, but moreover, because it doesn't rely on the insertion
sort fallback for small array chunks that zend_sort provides (which yields a more stable sorting
order), the result might in effect actually differ from that of all the other array sorting
functions.
IMHO this inconsistency can be considered a bug.
Also, array_multisort is the only remnant in PHP core that still uses zend_qsort
(https://github.com/php/php-src/search?q=zend_qsort). If we would eliminate that inconsistency, we
could probably dispense with the then obsolete zend_qsort all together.
Please let me know your thoughts.
Thanks,
Ben
--
Bejamin Coutu
ben.coutu@zeyos.com
ZeyOS, Inc.
http://www.zeyos.com