Блог*
الذهاب إلى القناة على Telegram
Блог со звёздочкой. Много репостов, немножко программирования. Небольшое прикольное комьюнити: @decltype_chat_ptr_t Автор: @insert_reference_here
إظهار المزيد1 924
المشتركون
+224 ساعات
-67 أيام
-930 أيام
أرشيف المشاركات
1 924
Repost from мне не нравится реальность
В общем и целом читайте блог и ченджлог, но я хочу подчеркнуть одно конкретное изменение:
— Allow Self: Autotrait bounds on dyn-safe trait methods.
В целом это всё и говорит, но всё же давайте по-подробнее.
Автотрейты это трейты которые реализуются автоматически для структур у которых все поля реализуют данный трейт. Известными примерами автотрейтов являются
Send и Sync. Одним из условий автотрейтов является то, что автотрейт не должен иметь никаких item'ов (ассоциированных функций, констант и типов), это должен быть просто маркер.
Далее. dyn Trait это механизм стирания типов, пропуская подробности &dyn Trait хранит в себе кроме ссылки на данные (некоторый тип реализующий Trait) ещё и указатель на VTable — структуру с указателями на реализации функций трейта. Чтобы трейт годился для использования с dyn он должен исполнять некоторые требования (которые нужны для того, чтобы можно было создать VTable). Одно из требований — у функций не должно быть Self: SomeTrait ограничений*. Это требование вызвано тем, что такое ограничение не может быть выполнено в dyn варианте, нельзя написать dyn TraitA + TraitB. Невозможность комбинировать dyn трейты в свою очередь вызвана сложностью комбинирования VTable**.
Так вот! Единственное исключение для запрещения dyn A + B — автотрейты, поскольку у них не может быть методов, они не изменяют VTable и соответственно их можно тривиально разрешить.
Но это значит что и Self: AutoTrait имеет смысл для dyn как метод который можно вызвать на dyn Trait + AutoTrait. Этот PR и добавил эту возможность***.
*кроме Self: Sized, которое просто выпиливает функцию из dyn.
**но рано или поздно так тоже можно будет, надеюсь... (какая-то работа в этой сфере есть)
***конкретнее он разрешил Self: Auto для object-safe трейтов.1 924
#prog #rust #rustreleasenotes
Вышла версия Rust 1.69.0! Как всегда, расскажу только о том, что интересует меня, а об остальном читайте в ченджлоге.
▪️Создание невыровненных ссылок на поля packed-структур наконец-то является ошибкой компиляции, которую нельзя подавить линтом.
▪️Так как изменение выше сломало некоторый (очень) старый код, derive-макросы теперь имеют меньше ограничений при использовании на packed типах.
▪️В union теперь можно использовать типы, определённые через ассоциированные типы трейтов. Даже странно, что раньше было нельзя.
▪️Методы трейтов не могут быть вызваны на dyn-объектах, если у них есть ограничения на Self. В принципе, это логично, поскольку апкаст до трейт-объекта стирает тип, и определить в рантайме, реализовывал ли изначальный тип трейт, нельзя. С другой стороны, auto-трейты не имеют никаких методов и потому не добавляют новых записей в vtable. Начиная с этой версии Rust, на трейт-объектах можно вызывать методы трейтов с баундами вида where Self: AutoTrait. При этом вызывать можно будет только для трейт-объектов, у которых через + эти auto-трейты указаны.
Иными словами, если
trait Trait {
fn foo(&self) where Self: Sync;
}
, то foo можно вызвать на dyn Trait + Sync, но нельзя на dyn Trait.
▪️До релиза докатился фикс бага компилятора (&*).
▪️Поиск в rustdoc теперь ищет лишь макросы, если запрос оканчивается на !.
▪️Стабилизировали CStr::from_bytes_until_nul, который сам ищет первый nul-байт в переданном слайсе (и возвращает ошибку, если их нету вовсе).
▪️Cargo теперь по умолчанию собирает build-зависимости без отладочной информации, если они потом не используются для сборки итогового бинаря как runtime-зависимости. Автор провёл замеры и показал, что это действительно ускоряет компиляцию.
1 924
Ну а если серьёзно — это позор, конечно, как я уже и говорил. Особенно "радует" пункт:
> ◾️информации, направленной на формирование искаженного представления о социальной равноценности традиционных и нетрадиционных сексуальных отношений;
То есть высказываться об ЛГБТ даже нейтрально де-юре будет противозаконно. Мрази, а 😒
1 924
#politota
Роскомпозор утвердил список критериев пропаганды ЛГБТ. Что ж, ко мне они не применимы: если я, будучи бисексуалом, и создаю какой-то образ об ЛГБТ, то явно не положительный 🥴
1 924
Repost from мне не нравится реальность
\/\/\/((.*)(?:[^\]][^:])|) [^\[`]\w+::
Love using regexes, they are very readable and easy to grasp ❤️
متاح الآن! بحث تيليغرام 2025 — أهم رؤى العام 
