Более в функциональном духе было бы использовать ranges вместо передачи повсюду векторов. Плюс это бы сильно помогло с проблемой низкой производительности.
Зачем вы увиливаете от ответа?
Вы спорите с утверждением:
rust в общем случае не должен уступать по скорости C
Я вас спрашиваю, какая реализация сортировки в общем случае используется в С?
В расте в общем случае используется обобщенная. И что то мне подсказывает что в С в общем случае используется qsort который легко может оказаться на порядок медленнее. В результате раст не то что не уступает в общем случае, а оставляет С далеко позади.
Ну а если задаться целью, то да, можно и еще более быстрый код получить, но мы же не об этом сейчас?
Отсутствие целосности итераторов в С++ является причиной появления всех этих copy_n, copy_if, remove_if и так далее. Половинчатый характер итератора не дает, собственно, декомпозировать алгоритмы. Как следствие имеем комбинаторный взрыв количества функций. Вот как реализуется copy_n для range:
copy(source | take(n), destination)
Итератор — он должен итерировать. А итерировать без знания когда нужно закончить — практически нецелесообразно. Я не согласен что в С++ мы имеем пример верной декомпозиции.
Вы спорите с утверждением:
Я вас спрашиваю, какая реализация сортировки в общем случае используется в С?
В расте в общем случае используется обобщенная. И что то мне подсказывает что в С в общем случае используется qsort который легко может оказаться на порядок медленнее. В результате раст не то что не уступает в общем случае, а оставляет С далеко позади.
Ну а если задаться целью, то да, можно и еще более быстрый код получить, но мы же не об этом сейчас?
copy(source | take(n), destination)
Итератор — он должен итерировать. А итерировать без знания когда нужно закончить — практически нецелесообразно. Я не согласен что в С++ мы имеем пример верной декомпозиции.
Утверждение что комментарий «я бы вдул» может привести к насилию смехотворно. У вас есть факты?