🦥Alex Fails
отлично!
Anonymous
Если забор это l/s/mfence, то это в доку по процу от интела, например. У gcc еще есть хорошая дока на этот счет
🐙 Antony
это не всегда тот забор, который нужен
Поэтому у атомиков можно указывать нужный забор
Vsevolod
я же кинул ссылку
🐙 Antony
я еще не дочитал до ссылки
Vsevolod
я про статью с картинками
🐙 Antony
@Artalus http://preshing.com/20120710/memory-barriers-are-like-source-control-operations/ - хорошая статья
Хорошая, но бессмысленная. Знания из этой статьи на практику смогут натянуть единицы,и то после прочтения чего-то дополнительного
Vitaliy ◀️TriΔng3l▶️
MemoryBarrier же (но это макрос, что логично), и MSVCшный volatile
Aidar
что значит "атомик сам забор"
Значит то что атомик ставит барьеры
Aidar
Vitaliy ◀️TriΔng3l▶️
Aidar
Зачем тогда макрос
Vitaliy ◀️TriΔng3l▶️
Зачем тогда макрос
Чтобы __ не писать
Vitaliy ◀️TriΔng3l▶️
Я уже не помню, какой там интринсик
Aidar
Ну дык вытащи наружу апи его
Vsevolod
(пожимая плечами) декларация std::atomic<int> foo; никаких барьеров не ставит, а вот операции ставят, об чем, собственно и весь разговор
Aidar
А кто что про определение ваще говорил?
Vitaliy ◀️TriΔng3l▶️
А я за __
Я за то, чтобы подобные вещи были в неймспейсах
Vitaliy ◀️TriΔng3l▶️
В C неймспейсы бы не помешали ещё
Aidar
Ой только давайте без c.net
Aidar
C/cli
Vitaliy ◀️TriΔng3l▶️
Aidar
Да просто это по определению выльется в неподдерживакмое расширение для вижака
Vitaliy ◀️TriΔng3l▶️
Berkus
MemoryBarrier же (но это макрос, что логично), и MSVCшный volatile
volatile никаких барьеров не делает же
Vitaliy ◀️TriΔng3l▶️
Vitaliy ◀️TriΔng3l▶️
Но можно выключить через /volatile:iso
Berkus
В Visual C++ — acquire/release
непортабельно => нахуй
Alexander "SonnySlave"
Vitaliy ◀️TriΔng3l▶️
Но на x86 и так всё acquire/release, это чисто барьер для компилятора
Vsevolod
это они из java наверняка подцепили
Vitaliy ◀️TriΔng3l▶️
это они из java наверняка подцепили
Задолго до появления атомиков в C++
Vitaliy ◀️TriΔng3l▶️
Не знаю, откуда они это подцепили, но вот такой вот костыль сделали
Berkus
в с++ полностью стандартизованная модель памяти сейчас, так что пользуйтесь
Vitaliy ◀️TriΔng3l▶️
Vitaliy ◀️TriΔng3l▶️
Или нет?
Vitaliy ◀️TriΔng3l▶️
Где-то в твиттере видел, но не помню, в каком компиляторе такое безобразие
Aidar
В дебаге relaxed это seq_cst, так что, нафиг надо
Звучит как шутка про то что дебаг режим мешает дебагу
🐙 Antony
Berkus
Atomic operations tagged memory_order_relaxed are not synchronization operations; they do not impose an order among concurrent memory accesses.
Berkus
jfyi
Vitaliy ◀️TriΔng3l▶️
А что вас не устраивает?
То, что это C++, а не PHP, а от C++ я ожидаю того, что он будет мне более-менее позволять управлять тем, как будет выполняться код?
Igor
все равно до конца не въехал, как работает забор 😂 надо покурить маны
https://channel9.msdn.com/Shows/Going+Deep/Cpp-and-Beyond-2012-Herb-Sutter-atomic-Weapons-1-of-2 вроде вот тут Саттер норм объяснял, правда оно в видеоформате)
Vasily
#book #books https://t.me/joinchat/AAAAAE1yUq2Kh6WdPCtjMA
Vasily
https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list
🐙 Antony
То, что это C++, а не PHP, а от C++ я ожидаю того, что он будет мне более-менее позволять управлять тем, как будет выполняться код?
Так дебаг же - включены те оптимизации, которые делать легко и которые при этом приносят максимальный профит. Вы разницу relaxed/seq_cst не почуствуете в дебаге, более суровый inlining на O2 намного сильнее ускорит код чем relaxed. А отлавливать ошибки руками при использовании relaxed - неправильное занятие, есть санитайзеры, они отловят намного лучше. И да, их обычно запускают с -O2, иначе есть шанс что внуки вырастут раньше чем тесты прогонятся :)
🐙 Antony
Но вот если санитайзер действительно запущен на -O0...
🐙 Antony
надо проверить, что даже в дебаге правильно размечаются барьеры и санитайзеры их правильно подхватывают, не смотря на то что инструкции seq_cst
🐙 Antony
У кого есть ARM под рукой и хороший пример, где с seq_cst/acq+rel всё верно работает, а вот с relaxed - плохо?
Nikita
В C неймспейсы бы не помешали ещё
В С ещё темплейты с классами не помешали бы
Ignat
Ставь класс, если обходишься структурами с полем vptr
Vitaliy ◀️TriΔng3l▶️
Идите вы в C++ со своими темплейтами и классами
Ignat
> pro.cxx 🤔🤔🤔
Vitaliy ◀️TriΔng3l▶️
Но вообще, если с виртуальными функциями реально красивее, то почему бы и нет
Vsevolod
и получится gobject
🐙 Antony
В С ещё темплейты с классами не помешали бы
ещё не хватает стандартной библиотеки и ссылок
Vsevolod
gobject - это ад, просто ад
Vitaliy ◀️TriΔng3l▶️
И лямбд
Вот их действительно не хватает
Vitaliy ◀️TriΔng3l▶️
Только замыкания не нужны
Vitaliy ◀️TriΔng3l▶️
Ну, не лямбд, а static функций внутри функций
Vsevolod
так это в gcc есть
Vitaliy ◀️TriΔng3l▶️
так это в gcc есть
Ого, не знал
Vsevolod
а в шланге есть blocks
Vsevolod
https://clang.llvm.org/docs/BlockLanguageSpec.html
Vitaliy ◀️TriΔng3l▶️
Блин, красота https://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.html
Vsevolod
я все размышляю, что проще - отрезать себе полжопы или перевести 200 тыщ строк с plain c на c++ :\
Vitaliy ◀️TriΔng3l▶️
А вот значок ссылки из C++/CLI не нужен
Igor
Про модель памяти и барьеры на пальцах - https://davmac.wordpress.com/2018/01/28/understanding-the-c-c-memory-model/
Ignat
https://clang.llvm.org/docs/BlockLanguageSpec.html
ГОСПОДИ ВОТ ЭТО ТЕХНОЛОГИИ
Stanislav
без картинок инвалид
не инвалид а disabled
🐙 Antony
я все размышляю, что проще - отрезать себе полжопы или перевести 200 тыщ строк с plain c на c++ :\
В зависимости от исходного материала, в итоге может получиться и 10к строчек :) Вот тут были примеры https://www.youtube.com/watch?v=tTexD26jIN4