Добавлены обратные сравнения векторов и срезов с заимствованным изменяемым буфером

23.08.2026

Появились обратные реализации сравнения между владеющими коллекциями и буфером, который можно либо взять, либо отдать. То есть сравнение теперь работает в обе стороны, а не только слева направо.

Что за буфер

Это тип, который либо владеет данными, либо ссылается на внешние. При выборе ветки компилятор не всегда знает, какая используется, и такая конструкция позволяет не выбирать.

Зачем нужна симметрия

Реализации сравнения в стандартной библиотеке пишутся так, чтобы одна сторона знала о другой, а вторая о первой — нет. Отсюда следствие: если в коде тип слева и тип справа поменялись местами, сравнение может перестать компилироваться, хотя по смыслу ничего не изменилось.

Например, если один тип переопределяет сравнение с другим, но не наоборот. Сравнение в одну сторону работает, в другую — требует явного преобразования или ручного сравнения полей.

Что даёт

Код перестаёт зависеть от порядка операндов. Для тестов с параметризованными сравнениями и для обобщённого кода это снимает целый класс раздражений.

Оригинал

add symmetric PartialEq impls for Vec, &[T], &mut [T] versus Cow<'_, [T]>

Упоминаний: 1 · Просмотров: 5