Как стать автором
Обновить

Комментарии 4

Ничего не понятно, но очень интересно

Проблема останова решена, всё? ;-)

У меня, возможно, глупый вопрос. Здесь описан сам метод, но не описано его применение.

Если я правильно понял, этот код компилируется в отдельный бинарник и при запуске выводит название методов, которые были использованы в коде, чтобы потом распарсить эту информацию и как-то использовать её?

Есть множество функций. Есть те функции, которые программа использует, а есть те, которые нет. Использует - это вызывает хотя бы один раз. Смысл кода - получит сайд-эффект в рантайме на факт использования. Так же туда можно передавать любые компилтайм/статические данные, уникальный для каждой функции. Они нужны, в том числе, для идентификации той функици которая стриггерила эффект.

Что далее с ним делать - абсолютно неважно. В данном примере в качестве данных передаётся указатель на функцию. Используется только для идентификации. В качестве эффекта вызывается принтф.

push назван не очень удачно - лучше это назвать effect.

Есть говорить о юзкейсах. У нас есть vulkan, там есть расширения. Использование расширений добавляет в api дополнительные функции. Мы не знаем какие расширения поддерживает, условно, видяха.

Далее мы пишем код. Нам нужно составить список всех функций, которые используем в коде. Потом узнать какие расширения их предоставляют. А далее перед стартом программы проверить, условно, видяху на наличие этих расширений.

Очевидно, что с таким подходом мы можем что-то забыть. Наш код запуститься, а далее внезапно упадёт, потому как мы забыли запросить какое-то расширение.

Используя описанный в статье подход - мы можем повесть как сайд-эффект проверку наличие в, условно, видяхе этих расширений. Это сработает до старта программы. Таким образом мы никогда ничего не забудем и не упадём внезапно.

Попытка решения описанной выше задачи и родило эту статью. Применений масса и это лишь самый базовй вариант. Постараюсь в будущем сделать более подробную статью с описанием юзкейсов практических.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории