1.93K subscribers
3.57K photos
136 videos
15 files
3.79K links
Блог со звёздочкой.

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

Небольшое прикольное комьюнити: @decltype_chat_ptr_t
Автор: @insert_reference_here
Download Telegram
#meme про ржавчину
10
#prog #rust #rustreleasenotes

Вышла версия Rust 1.93.0! Как обычно, тут только избранное, остальное только в детальных заметках о релизе.

(да, я выкладываю анонс с опозданием больше недели, и что ты мне сделаешь?)

В этот раз большинство изменений связаны со стандартной библиотекой.

▪️Немного печальное изменение: даже с установлением #[global_allocator] std всё ещё может вызывать System аллокатор. По крайней мере, на core это не распространяется.

▪️Компилятор теперь выдаёт предупреждение на #[repr(C)]-перечисления, у которых значения дискриминантов не умещаются в сишный int. Смешно, но до C23 у сишных enum нельзя было указать численный тип и нельзя было использовать значения больше int для дискриминантов.

▪️Компилятор теперь выдаёт предупреждение на попытку вызвать метод на const-значении, который эксплуатирует внутреннюю изменяемость. Так как константы инлайнятся по месту использования, эти изменения не будут видны. Обычно это является следствием ошибки — использования const вместо static (и я, кстати, такую ошибку уже делал).

▪️Метод append на BTreeSet и BTreeMap теперь сохраняет ключ из исходной коллекции, если ключи считаются равными через ==. До этого перезаписывались и ключ, и значение.

▪️Стабилизированы API:

🔸assume_init_drop, assume_init_ref и assume_init_mut на MaybeUninit<T>
🔸write_{copy, clone}_of_slice на [MaybeUninit<T>]
🔸into_raw_parts на String и на Vec. Странно, что только сейчас, потому что обратные from_raw_parts методы были стабилизированы ещё в версии 1.0.
🔸методы для непроверяемых (и потому потенциально дающих UB) битовых сдвигов в обе стороны на примитивных числах, а на знаковых — ещё и unchecked_neg
🔸методы для перевода ссылок на слайсы в (опциональные, разумеется) ссылки на массивы и сырых указателей на слайсы в сырые указатели на массивы, включая мутабельные варианты
🔸pop_front_if и pop_back_if на VecDeque
🔸std::fmt::from_fn для ad-hoc форматирования через переданную функцию. Позволяет избежать создания одноразовых типов, нужных только для форматирования

▪️Cargo теперь прокидывает значение конфигурации debug_assertions в билд-скрипты.

▪️Команда cargo tree теперь позволяет использовать для форматирования записей в дереве длинные имена для элементов шаблонов. Например, следующие два вызова эквивалентны:

cargo tree --format='{p} {f}'

cargo tree --format='{package} {features}'

▪️cargo clean теперь может удалять артефакты компиляции из всего workspace-а целиком.
👍7😁1
🤔7
🎉16
На экране выбора медиа для прикрепления к посту иконка места для снимка прокручивается над всем остальным
😁9🌚4
Надо брать

#game #meme
😁161
Gamers out of context
😁11
Forwarded from Немного туп(л,) (Пашечка)
#achievement unlocked: Чихнув прокусить язык до крови.
🥴14😱7👍2🎉2
Forwarded from Kedr to Earth | Земля, я Кедр ( Yuri Ammosov)
Коллеги! Прошу коллективный разум совета по дальнейшему prompt injection.
😁23😍4
#meme про почтальонов
😁54🤯2🤔1
#prog #suckassstory
So much for "plain text" API

PSA: Did you know that it’s unsafe to put code diffs into your commit messages?
Like https://github.com/i3/i3/pull/6564 for example
Such diffs will be applied by patch(1) (also git-am(1)) as part of the code change!
This is how a sleep(1) made it into i3 4.25-2 in Debian unstable


Source

(thanks @itpgchannel)
😁11🌚3
Какой симпатичный... Павел

(@PaRat07, накрасила @gothic_nerd)

Начать новую рубрику про папищеков? #прекрасныепапищеки, во
🥰33🤮26💩12🤡9❤‍🔥7😍6👎4🥴2
Discord: с марта все аккаунты в мире автоматически сделают «детскими», пока пользователи не подтвердят возраст
https://habr.com/ru/news/994528/

С начала марта 2026 года все аккаунты пользователей в мире автоматически сделают «детскими», пока их пользователи не подтвердят свой возраст. Без подтверждения нельзя заходить на сервера 18+, а если пользователь уже состоит в таких серверах, доступ к ним заблокируют. Личные сообщения для незнакомых пользователей также будут закрыты. Подтвердить свой возраст можно только паспортом и видеосканом лица, причём других способов получения доступа к информации 18+ не будет.

Без подтверждения возраста на платформе также нельзя будет смотреть большинство контента — он будет скрыт цензурой.

Что будет закрыто/ограничено на Discord для «детских» аккаунтов:

- фильтрация чувствительного контента: графические или «взрослые» материалы по умолчанию размываются, пока пользователь не подтвердит, что он взрослый;

- ограниченный доступ к возрастным чатам/сервером — доступ к серверам/командам, помеченным как для взрослых, возможен только после подтверждения возраста;

- личные сообщения в отдельный запрос‑ящик — сообщения от людей, которых вы не знаете, по умолчанию идут не в основной чат, а в отдельную папку;

- предупреждения при запросах дружбы — если кто‑то, кто вам не знаком, отправляет запрос, вы получите предупреждение;

- ограничения на «Stage» каналы — говорить в комнатах Stage могут пользователи, которые подтвердили, что они взрослые.


Оригинал
Discord Launches Teen-by-Default Settings Globally
https://discord.com/press-releases/discord-launches-teen-by-default-settings-globally

База паспортов и лиц точно никуда не утечёт.
🤬23🤡6🤔4👍1
#prog #моё

У метода Iterator::all — который возвращает, удовлетворяют ли все элементы в итераторе переданному предикату — есть вот такая строчка в документации:

An empty iterator returns true.


Более того, аналогичное утверждение есть и в документации метода allMatch на Java Stream API, и в документации встроенной функции all в Python, и в документации IEnumerable.All в C#. Некоторые странные люди утверждают, что all на пустой последовательности должен возвращать false — дескать, нет значений — не возможности определить значения.

Я здесь для того, чтобы сказать, что эти люди неправы.

Условный all(seq, pred), где seq — это последовательность a1, a2, ..., an, вычисляет значение pred(a1)∧ pred(a2) ∧ ... ∧ pred(an) (∧ — символ коньюкции, который в ЯП часто называют &&). Коньюкция — операция коммутативная и ассоциативная, поэтому если последовательность s является конкатенацией последовательностей a = a1, a2, ..., an и b = b1, b2, ..., bn, то мы можем переставить скобки и посчитать

all(s, pred) = pred(a1) ∧ ... pred(an) ∧ pred(b1) ∧ ... ∧ pred(bn)

как

(pred(a1) ∧ ... pred(an)) ∧ (pred(b1) ∧ ... ∧ pred(bn)) = all(a, pred) ∧ all(b, pred)

Или, иными словами и в синтаксисе Rust, если x и y — итераторы, то логично ожидать, что x.chain(y).all(p) вернёт тот же результат, что и x.all(p) && y.all(p).

Это свойство должно работать для любых последовательностей, включая пустые. С другой стороны, любую последовательность можно представить, как конкатенацию этой же последовательности с пустой. Или, в синтаксисе Rust, с поправкой на типы x и x.chain(iter::empty()) ведут себя одинаково. Подставив это в свойство выше, мы получаем, что x.all(p) && iter::empty().all(p), x.chain(iter::empty()).all(p) и x.all(p) должны возвращать один и тот же результат. Для произвольного итератора x это возможно только в том случае, если iter::empty().all(p) возвращает значений, нейтральное для коньюкции, то есть true. Иными словами, Iterator::all должен возвращать true на пустом итераторе, ч. и т. д.

Аналогичные соображения показывают, почему Iterator::any должен возвращать false.
💯26🤝10❤‍🔥3🤡2
Forwarded from шитпостинг.
Господи сколько же у людей свободного времени
😁345🤡5👍3🤮2💯1