1.83K subscribers
3.3K photos
132 videos
15 files
3.58K links
Блог со звёздочкой.

Много репостов, немножко программирования.

Небольшое прикольное комьюнити: @decltype_chat_ptr_t
Автор: @insert_reference_here
Download Telegram
Блог*
Ам
Строго говоря, это не тот самолёт, на котором я прилетел, но трап был такой же
💩6👍1
\/\/\/((.*)(?:[^\]][^:])|) [^\[`]\w+::

Love using regexes, they are very readable and easy to grasp ❤️
💩4
Forwarded from Dani-myte 🧨 (DN ^-^)
❤‍🔥3💩21
This media is not supported in your browser
VIEW IN TELEGRAM
Начинаем среду с полезной информации
🌚7😁5💩3
Forwarded from RWPS::Mirror
🔥13😁3💩1
Forwarded from shitposting 3.0 [+ dragons]
🌚14😁11🔥1💩1
Блог*
#politota Роскомпозор утвердил список критериев пропаганды ЛГБТ. Что ж, ко мне они не применимы: если я, будучи бисексуалом, и создаю какой-то образ об ЛГБТ, то явно не положительный 🥴
Ну а если серьёзно — это позор, конечно, как я уже и говорил. Особенно "радует" пункт:

> ◾️информации, направленной на формирование искаженного представления о социальной равноценности традиционных и нетрадиционных сексуальных отношений;

То есть высказываться об ЛГБТ даже нейтрально де-юре будет противозаконно. Мрази, а 😒
🤮9💩5👍1
💩1
Forwarded from DanD
🍌22😁6😭4💩2
6😁5💩1
Блог* pinned «COMMIT;»
#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-зависимости. Автор провёл замеры и показал, что это действительно ускоряет компиляцию.
👍124💩1
В общем и целом читайте блог и ченджлог, но я хочу подчеркнуть одно конкретное изменение:

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 трейтов.
👍4💩1
💩1