мне не нравится реальность
504 subscribers
1.33K photos
57 videos
56 files
1.02K links
Мне не нравится реальность
N.B. waffle is unhinged

- кормить назад: @meowaffle
- кормить вперёд: github.com/sponsors/WaffleLapkin
- чят: https://xn--r1a.website/+5Dtuan4dVE5kYTcy
- блог: blog.ihatereality.space
Download Telegram
мне приснилось, что я проспал конференцию и всех подвёл... мне давно не было так морально хреново
Achievement unlocked: present a talk
Ставьте лайк если вас тоже зовут "спасибо за доклад"
Вафель: так, сегодня день отдыха. Никакой работы, никакого программирования, буду просто лежать и балдеть.

ТоЖе ВаФеЛь: И всё же почему CoerceUnsized нельзя реализовать для типов с несколькими полями которые упоминают дженерик параметр кторый ансайзится? Почему на этот мой вопрос так и не ответили? Как их вежливо пингануть? Так, ну а если я теоретически сделаю PR который убирает это ограничение, что я напишу в описании...

И вот как мне с такими мыслями отдыхать???
"но в нодах тоже есть указатели, которые тоже надо скоерсить и это увеличит их размер, так подажи"
с днём не очевидного UB в коде

Upd: я нашёл проблему. Я кое-где очепятался и написал Node<T> вместо OpaqueNode<M>... не пишите дети ансейф
Я всё никак не могу понять как атомики работают, может кто-то сможет мне объяснить.

Как swap (aka exchange) синхронизируется с самим собой, при ordering = Acquire?

Из документации AtomicBool::swap:
> Note that using Acquire makes the store part of this operation Relaxed

То есть swap(Acquire)load(Acquire) + store(Relaxed), верно?

Но тогда как store синхронизуется с load? Я так понимаю Release имеет "happens-before" отношение к Acquire, но Relaxed такого не имеет... Тогда почему два swap(Acquire) не могут вернуть одно и то же предыдущее значение? Я запутался 😞

Мой вопрос, может ли подобный код:

let a = AtomicBool::new(false);
let (x, y) = run_in_parallel(
|| a.swap(true, Acquire),
|| a.swap(true, Acquire),
);

При когда либо вернуть (x, y) что-то кроме (false, true) или (true, false)? И почему так?
Код в виде ёлочки который печатает ёлочку!

<twitter:m_ou_se>

Честно, я думал подобные извращения с Rust менее возможны, чем с условным C, но вот...
мне не нравится реальность
Я всё никак не могу понять как атомики работают, может кто-то сможет мне объяснить. Как swap (aka exchange) синхронизируется с самим собой, при ordering = Acquire? Из документации AtomicBool::swap: > Note that using Acquire makes the store part of this operation…
Короче я кажется разобрался (спросил в чатике tokio/loom, вхих).

1. Атомики всегда атомарны (ВНЕЗАПНО, ПРАВДА???). swap(true) всегда вернёт false ровно один раз, вне зависимости от ордеринга.

2. Ордеринг влияет не на атомик, который читается/пишется, а на остальную память после операции. Т.е. ордеринг нужен только если нужно поддерживать несколько атомиков сразу или если атомик защищает какую-то память.

3. Документация получается несколько запутывающей, но увы.

Так что ответ на мой вопрос: нет, x = y не может быть. Потому что это, блин, атомарные операции.

Более того, в моём конкретном случае, мне хватит даже Relaxed, т.к. мне не нужно синхронизовывать другую память с другими тредами.
Если вы не пьёте оливковое масло из горла, то даже не пишите мне
нет блин stay gay
— Why do you always have so much going on in front of you?
🎵 Cause every time I think I take 10 damage and every thought I have makes me wanna die 🎵
Меня немного утомляет поток информации, но всё же мне нравится почитывать zulip раста. Вот где ещё вы увидите тип Yeet<_> или Option<!>? 😄
Начни свой день с бана порноботов 👍