en
Feedback
Блог*

Блог*

Open in Telegram

Блог со звёздочкой. Много репостов, немножко программирования. Небольшое прикольное комьюнити: @decltype_chat_ptr_t Автор: @insert_reference_here

Show more
1 962
Subscribers
+224 hours
+27 days
-430 days
Posts Archive
Repost from N/a
Tcp пакет
Tcp пакет

Кстати, это теперь канал биржевых новостей, отписывайтесь #vercheniye_news
Кстати, это теперь канал биржевых новостей, отписывайтесь #vercheniye_news

#ойти #хуи #трудовыебудни
#ойти #хуи #трудовыебудни

#prog #rust #rustreleasenotes Вышла версия Rust 1.86.0! Как всегда, тут только примечательное для меня, а остальное — в полных заметках о релизе. В этот раз релиз, по большому счёту, состоит из одной фичи (двух, если вы пишете код с SIMD). ▪️Как я уже писал, стабилизировали апкаст трейтов:
trait Super1 {}
trait Super2 {}

trait Combined: Super1 + Super2 {}

fn foo(x: &dyn Combined) {
    let _: &dyn Super1 = x;
    let _: &dyn Super2 = x;
}
Этот апкаст также работает и через сырые указатели, поэтому пока что — до тех пор, пока не определились с точными гарантиями — создавать сырые указатели на dyn Trait с невалидной vtable-частью запрещено и считается UB. В miri на этот счёт уже есть соответствующие проверки. ▪️По умолчанию компилятор Rust генерирует исполняемые файлы, которые могут работать на всех процессорах целевой платформы. Это означает, помимо всего прочего, невозможность использования процессорно-специфичных наборов инструкций (на практике важнее всего расширения для SIMD). Для того, чтобы обойти эти ограничения и заставить компилятор генерировать код с использованием дополнительного конкретного набора инструкций, в языке есть атрибут #[target_feature(enable = "...")]. Он позволяет компилятору генерировать код с использованием расширенного набора инструкций. Так как использование на процессоре инструкций, которые он не распознаёт — неопределённое поведение, вызов подобных функций должен быть только в unsafe блоке. Программист при вызове обещает, что этот код недостижим на платформах, на которых указанный набор инструкций не поддерживается. Это логичное поведение, но у начальной реализации был заметный эргономический недостаток: вызов функции с, скажем, #[target_feature(enable = "avx")] из другой функции с #[target_feature(enable = "avx")] также требовал unsafe-блока, даже не смотря на то, что требование на корректный вызов в этом случается удовлетворяется автоматически и это можно проверить статически. Начиная с этой версии подобные функции можно вызывать друг из друга без unsafe-блока при условии, что наборы включённых фич совпадают. ▪️Продолжая тему, начатую в Rust 1.70.0, компилятор теперь при компиляции в отладочном профиле (и с флагом -C debug-assertions) вставляет паникующие проверки на null при разыменовывании сырых указателей. К сожалению, так как std поставляется только в release-сборке, на коде из std это не сказывается. (Это можно обойти, но требует nightly). Эта проверка уже нашла ошибки в реальных проектах, как во время crater run, так и после мерджа. ▪️Ошибка FromBytesWithNulError, которая может быть возвращена из CStr::from_bytes_with_nul, теперь является enum и позволяет в случае nul внутри данных получить его позицию. ▪️Теперь можно получить мутабельные ссылки по нескольким индексам/ключам из слайса и хэшмапы одновременно с новыми методами <[_]>::get_disjoint_mut и HashMap::get_disjoint_mut, вместе с unsafe *_unchecked вариантами, дающими UB при пересечении. Версия для слайсов при этом также позволяет индексировать диапазонами, а не только единичными индексами. Что мне не очень нравится в этих методах — неконсистентность. Именно, версия для слайсов возвращает массив ссылок или ошибку, причём как в случае пересекающихся индексов, так и в случае индексов, выходящих за длину слайса. Версия же для мапы возвращает массив опциональных ссылок (с None для ключей без значений) и паникует на пересекающихся ключах. ▪️Once и OnceLock обзавелись методами для блокировки в ожидании инициализации. ▪️В const-контексте теперь можно, помимо всего прочего, разбивать строку по индексу (включая мутабельно и с опциональным возвратом) и проверять, что индекс лежит между отдельными char-ами. ▪️Компилятор для Linux на ARM теперь компилируется с ThinLTO и PGO, что ускоряет его на бенчмарках на 10-20%, в некоторых случаях — даже на 30%!.

photo content

Число подписчиков Блог*а превысило красивое число 1800... Опять Что ж... Спасибо, что продолжаете читать

photo content

КВАНТОВЫЙ ПСИХОЛОГ
КВАНТОВЫЙ ПСИХОЛОГ

If cmake is so good, why did they still not make cppmake?

photo content

Умному мальчику Антону было 27 лет, когда до него дошло, что "сантехника" — это сокращение от "санитарная техника".

#rust Add panic_unreachable_unchecked feature flag to the standard library
This is similar to panic_immediate_abort except that all panics are considered immediate UB and can therefore be optimized away as unreachable by the compiler. This has been tested on regalloc3 where it resulted in a 10% speedup compared to using a normal standard library, mainly due to the elimination of bounds checks. While it may seem that this feature merely to satisfy those with a reckless thirst for performance at any cost, it is also useful for saner heads as a profiling tool to investigate the impact of unnecessary safety check and find places where unsafe code could be used to avoid them.

#этотравля
#этотравля

В СМЫСЛЕ УЖЕ АПРЕЛЬ

Рисунок на скорую руку в баре Видимо, #моё?
Рисунок на скорую руку в баре Видимо, #моё?

Repost from N/a
Несколько недель назад на GitHub, наконец-то, появилась возможность отсоединить свои публичные форки без потери всех метаданн
Несколько недель назад на GitHub, наконец-то, появилась возможность отсоединить свои публичные форки без потери всех метаданных (issues, stars, releases, etc) репозитория. Работает примерно так же, как и на Gitlab — нажимаешь на кнопку "отсоединить" в настройках репозитория, и все готово. Единственное отличие, что если репозиторий форка слишком большой (1 GB+ или имеет другие дочерние форки), то для отсоединения все-таки нужно будет написать в саппорт и объяснить причину отсоединения. Я давно хотел преобразовать один из своих форков в самостоятельный репозиторий, поэтому не мог пройти мимо и не проверить перенос через саппорт лично. На удивление, мне довольно быстренько ответили и отсоединили форк без лишних вопросов. Теперь репозиторий отображается в поиске на GitHub, а в моем профиле стала показываться даже вся старая статистика коммитов из репозитория 🐈‍⬛

Админ @test_channel_grammers, не пересылай все посты Блог*а подряд, пожалуйста