Обновить
85
0
Николай Фёдоров @Unrul

Программист

Отправить сообщение
сигнал/слоты Qt без макросов

github.com/woboq/verdigris
У автора в блоге (https://woboq.com/blog/), кстати, много всего интересного написано про нестандартное использование C++.
Статья по ссылке, кстати, весьма интересная. Читал её ещё в том году. На Хабре даже нормальный перевод имеется: habr.com/post/409045 :)
Ага, добавил про gcc. Clang, как я заметил, испытывает некоторые трудности с оптимизацией хитрых манипуляций с регистрами.

Судя по всему, когда xmm регистров ещё не было, или в других ABI, va_arg функции были совместимы с обычными. То есть, можно было их вызывать через указатель на обычную функцию, или делать объявления с фиксированным количеством аргументов. Потом появился SSE и это стало UB.

Изначально была идея сохранить терминологию. Хотя сейчас, после множества изменений текста, она уже не особенно актуальна.

Если скомпилировать с оптимизацией (хотя бы -O1), то не делает:


accumulate3Function(int, int, int):
  add edi, esi
  lea eax, [rdi+rdx]
  ret

GCC, кстати, хитрый. Если в функции не вызывается va_arg(args, double);, то он даже не проверяет регистр al.

Иначе не получится в цикле считывать неизвестное количество аргументов. Если они все на стеке, то можно просто читать [rsp, rsp+sizeof(arg)).

Да, возможно надо было более явно указать для какой конфигурации проводился обзор. С другой стороны, для других x86_64 компиляторов выводы будут примерно такие же. ABI и стандарт С++ накладывают ограничения.
На 20 странице pdf описываются особенности при переменном числе аргументов. Суть в том, что в регистре `al` передаётся число используемых xmm регистров. Остальное то же самое. Внутри метода абсолютно все регистры, в которых могут быть аргументы, копируются на стек, после чего читаются из него по смещению.

Кстати, ` reinterpret_cast(accumulateFunction);` является UB:

The effect of calling a function through a pointer to a function type that is not the same as the type used in the definition of the function is undefined.


Если посмотреть на ассемблер, то видно, что регистр `al` не очищается при вызове через указатель, то приводит, собственно, к UB.
Ага, изменил формулировку. Я имел ввиду, что обычно нельзя изменить данные вообще не используя регистры. Тот же ADD не работает для двух memory операндов.
Ага, слово в слово тут сложно перевести.
using a number of booleans to indicate what state your program is in is often a state machine in disguise.

«если у вас есть нескольких булевых флагов, хранящих состояние программы, то, скорее всего, она является замаскированным конечным автоматом.»
Увы, в `станки ->… -> самосохранение`, за `...` кроется весьма сложная причинно-следственная цепочка. Для понимания которой требуется думать головой. Зачастую у нас она вообще пропускается, и образуются карго-культы вроде «демократии»: `выборы ->… -> демократия ->… -> процветание`.

что-то идет в пользу или во вред стране

К сожалению, как и в любой задаче с не бинарным пространством решений, какое-либо случайное действие с подавляющей вероятностью принесёт вред, нежели пользу. Чтобы решение было верным, необходимо целенаправленно прикладывать для этого усилия. Соответственно, сейчас все действия власти направлены на бездействие. Правда, как показывает практика, подобная стратегия в перспективе ведёт к не очень приятным результатам.
«Those who would give up essential Liberty, to purchase a little temporary Safety, deserve neither Liberty nor Safety.» B. Franklin.

Взамен получаете, например, безопасность.
А можете получить, например, что-то совершенно противоположное.
Увы, исследования показывают, что стало бы намного хуже. Чем больше риск, тем больше должна быть выгода. Если бы мошенников рвали на площадях, то они бы забирали у своих жертв всё и не оставляли живых свидетелей. Чтобы посмотреть, как такой подход работает на практике, можно сравнить зависимость строгости наказания за наркоторговлю с количеством связанных с ними преступлений.
Богатые люди не финансируют такие исследования потому, что они, в большинстве своём, так же глупы и недальновидны, как и остальные. Богатство мало коррелирует с интеллектом, даже в странах «первого мира». Чтобы просто дойти до мысли, что старение и смерть являются чем-то плохим, нужно пройти немалую дистанцию. Особенно в обществе, где все будут смотреть на тебя, как на идиота, или даже как на фрика, с такими мыслями. Сейчас только начинают вестись дебаты по на тему «whether or not aging can be classified as a disease» [1][2], без чего тестирование каких-либо перспективных лекарств сильно осложнено.
Тут проблема в наличии любопытства. Я вот представляю, чем занять себя на столетия, в предположении, что можно не отвлекаться на всякие низменные проблемы.
Да да, и это будет типичный приём манипуляции мнением. Подобная фотография впечатляет гораздо больше, чем сухая статистика, показывающая, что, к примеру, запреты FDA оказывают в 10 раз больше вреда, чем пользы.
Ну так и индийцев тоже больше миллиарда, и у них нет иероглифов.
Похоже на результат работы Floyd–Steinberg dithering на размытом псевдослучайном фоне, кстати.

image

В дискуссию нужно вступать не с фанатиками, а с их аудиторией.


  • О таких списках, в первую очередь, должна знать широкая аудитория. И должно быть желание ими пользоваться.
  • Так и представил, как рен-тв соглашается сделать ревью передачи про плоскую землю перед её показом.
    • И кто их будет штрафовать? Правительство? :-) Телекомпании? У них в приоритете не просветительство, а аудитория. А аудитория такое любит.
  • Большинству вообще без разницы, круглая она, квадратная, или ещё какой-то формы. На их повседневные заботы это никак не влияет. Если Земля окажется квадратной, у них ничего в жизни не поменяется.
  • "Пропагандировать критическое мышление и правильные энциклопедии" — у нас и так сплошная пропаганда и правильные книги.

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность