Блог*
前往频道在 Telegram
Блог со звёздочкой. Много репостов, немножко программирования. Небольшое прикольное комьюнити: @decltype_chat_ptr_t Автор: @insert_reference_here
显示更多1 927
订阅者
+124 小时
+17 天
-530 天
帖子存档
1 927
#prog #rust #rustreleasenotes
Вышла версия Rust 1.75.0! Как всегда, тут только избранные моменты, а все изменения отдельно (BTW ссылка теперь ведёт не RELEASES.md, а на отдельную страницу).
▪️Само значимое изменение: теперь возможно использовать impl Trait в возвращаемых типах методов трейта и, как следствие, эквивалентные методам с RPIT async-методы. Однако текущая реализация ИМЕЕТ СУЩЕСТВЕННЫЕ ОГРАНИЧЕНИЯ, так что это не рекомендуется к использованию для публичного API. Подробнее об ограничениях (и костылях) — тут.
А, и ещё RPIT в трейтах захватывает времена жизни иначе, чем RPIT в inherent методах и свободных функциях. Подробнее тут (осторожно, может вызвать головную боль). Этот способ планируют сделать для всех impl Trait типов в возвращаемых позициях в edition 2024.
▪️В const fn сейчас нельзя использовать &mut-ссылки. Проверка для этого в компиляторе была, однако, излишне строгой. Теперь её ослабили и в const fn можно манипулировать fn pointer-ами, у которых есть мутабельные ссылки в аргументах. Но вызывать их по прежнему нельзя.
▪️Ещё изменение касательно const fn: вычисления в них с нарушением выравнивания теперь приводят к ошибке компиляции. Раньше на это был deny default линт, который можно было явно отключить.
▪️И ещё касательно невыровненных ссылок: компилятор теперь корректно ловит создание ссылок на unsized поля в #[repr(packed)] структурах.
▪️В язык и std добавлено несколько новых гарантий, о которых я упоминал:
🔸char имеет одинаковый с u32 размер и выравнивание
🔸null всегда имеет нулевой адрес
🔸для некоторых типов Option<T> вызов transmute на памяти, забитой нулями, валиден и гарантированно даёт None
А также:
🔸задокументированно, когда атомарные load валидны на readonly памяти.
▪️match теперь может матчиться на usize/isize значениях с проверкой полноты покрытия без _, а также может матчиться по (частично) перемещённым значениям, если паттерны не смотрят на значение. Это поведение консистентно с поведением
let _ = expr;.
▪️Метод std::split_inclusive теперь возвращает итератор, который корректно реализует DoubleEndedIterator в том плане, что возвращает одни и те же кусочки строки при итерации как в прямом, так и в обратном порядке.
▪️Стабилизированы некоторые новые API, в частности:
🔸Конструкторы ссылок на Atomic-типы из сырых указателей (unsafe, разумеется)
🔸Пачку API (включая платформо-специфичные) для манипуляции временны́ми атрибутами файлов
🔸Битовые операции над IP-адресами
🔸Option::as{, _mut}_slice.
🔸Пачку методов для сырых указателей с указаниями смещений в байтах, а не в размерах указываемого типа.
Также в const контексте теперь можно вызывать:
🔸MaybeUninit::assume_init_read🔸
MaybeUninit::zeroed🔸
mem::discriminant🔸
mem::zeroedНасчёт
Option::as_slice у вас мог возникнуть резонный вопрос, чем этот метод лучше opt_value.map_or(&[], std::slice::from_ref). Дело в том, что такой прямолинейный метод будет использовать некий посторонний адрес для случая, когда значение является None, а новый метод старается по возможности вернуть ссылку на слайс с адресом, совпадающим с адресом исходного опционального значения.
▪️Некоторые улучшения rustdoc:
🔸Генерируется предупреждение, когда трейт не является object safe.
🔸Атрибут #[repr(transparent)] скрывается, если поле, над которым тип является transparent, является приватным (поскольку в этом случае repr наверняка является деталью реализации)
🔸Для C-like (с вариантами без полей) enum теперь показываются дискриминанты вариантов.
▪️Компилятор (конкретно librustc_driver) теперь оптимизируется при помощи BOLT — специального инструмента для оптимизации скомпилированных программ, который переставляет инструкции для лучшей утилизации кеша. Даёт прибавку в скорости.
▪️Маленькие функции теперь автоматически инлайнятся через границу крейтов. Дало большой выигрыш и по primary, и по secondary бенчмаркам — причём для времени компиляции даже лучше, чем для рантайм-бенчмарков.1 927
Repost from Лентач
ЯГОМИК не пошёл по стопам ВСЕГЕИ и решил остаться ЯГОМИКом.
Якутский государственный объединенный музей истории и культуры народов Севера им. Ярославского не планирует отказываться от своего названия, заявил директор музея Николай Бугаев в комментарии для «КП-Якутия».
«Что касается аббревиатуры — мы ведь ее уже лет 20 нигде не используем, а для сокращения пишем «Якутский музей». Просто кто-то вспомнил об этом в свете изменения аббревиатуры ВСЕГЕИ и счел это забавным. Нам же подобный интерес только на руку».
Напомним, что Всероссийский научно-исследовательский геологический институт имени А. П. Карпинского (ВСЕГЕИ) изменил логотип на своем сайте после принятия закона о запрете ЛГБТ*-пропаганды в России.
*Движение ЛГБТ признано экстремистским и запрещено в РФ.
1 927
Repost from Лентач
Рубль в этом году обвалился почти ко всем «экзотическим» валютам Почитайте, что будет с курсом в 2024 году: https://lentach.media/V0fQv
1 927
Repost from N/a
Вот определение Верховного суда, по которому Международное общественное движение ЛГБТ не является Международным общественным движением ЛГБТ и, вероятно, не является экстремистским. Правовая коллизия: чтобы доказать, что мы не экстремисты, нам сначала нужно оспорить это определение и доказать, что экстремисты — мы.
1 927
Repost from ☕️ Мерлин заваривает τσάι 🐌
Писать падающий тест, чтобы начать следовать методичке TDD 🙅
Писать падающий тест, чтобы завтра вспомнить на чём ты остановился 🙌
1 927
Repost from 💞Gay Mems🔥 | Гей мемы 💪
ЯГОМИК В С Ё
«Якутский государственный объединённый музей истории и культуры» переименовали и теперь он называется просто «Якутский музей».
Сначала мы потеряли ВСЕГЕИ, теперь ЯГОМИК, что дальше?
现已上线!2025 年 Telegram 研究 — 年度关键洞察 
