Добавлены обратные сравнения векторов и срезов с заимствованным изменяемым буфером
23.08.2026Появились обратные реализации сравнения между владеющими коллекциями и буфером, который можно либо взять, либо отдать. То есть сравнение теперь работает в обе стороны, а не только слева направо.
Что за буфер
Это тип, который либо владеет данными, либо ссылается на внешние. При выборе ветки компилятор не всегда знает, какая используется, и такая конструкция позволяет не выбирать.
Зачем нужна симметрия
Реализации сравнения в стандартной библиотеке пишутся так, чтобы одна сторона знала о другой, а вторая о первой — нет. Отсюда следствие: если в коде тип слева и тип справа поменялись местами, сравнение может перестать компилироваться, хотя по смыслу ничего не изменилось.
Например, если один тип переопределяет сравнение с другим, но не наоборот. Сравнение в одну сторону работает, в другую — требует явного преобразования или ручного сравнения полей.
Что даёт
Код перестаёт зависеть от порядка операндов. Для тестов с параметризованными сравнениями и для обобщённого кода это снимает целый класс раздражений.
Оригинал
add symmetric PartialEq impls for Vec, &[T], &mut [T] versus Cow<'_, [T]>
Упоминаний: 1 · Просмотров: 5