перейти к содержанию

Детали

Метапрограммирование, щадящее компилятор, Андрей Давыдов

Любой окунувшийся в мир C++ программист знает, что шаблоны тьюринг-полные, substitution failure is not an error, и в compile-time можно делать удивительные, а иногда даже полезные вещи. С другой стороны опытный С++ разработчик понимает, что можно не значит нужно, и что за злоупотребление метапрограммированием приходится платить. Один из основных сдерживающих факторов – время компиляции, и именно его оптимизации посвящен данный доклад.
Некоторое (не исчерпывающее) множество вопросов, которое будет рассмотрено:

  • какие операции наиболее дорогие с точки зрения времени компиляции, и как их можно избегать;
  • почему std::conditional_t определен неэффективно;
  • в чем разница между реализациями tuple в Microsoft STL и libc++;
  • когда стоит использовать std::{conjunction,disjunction}, а когда fold expressions;
  • почему не стоит использовать std::void_t (да-да, чтобы там не говорили эксперты на многочисленных конференциях!);
  • как появляющиеся в C++20 концепты могут помочь;
  • ...
    Если вы знаете ответы на все эти вопросы, доклад вряд ли будет вам полезен/интересен. Иначе – добро пожаловать. Никаких специальных знаний не требуется, но ожидается, что терминами SFINAE, template specialization, template arguments deduction, tag dispatching, variadic templates, fold expressions, ... вас не напугать.

О докладчике:
Несколько лет был прикладным C++ программистом – позволял себе издеваться над компиляторами, мучил их своими кривыми метапрограммами, не задумывался, как им тяжело при этом. Но последние 2.5 года, работая в команде ReSharper C++ (JetBrains), я начал понимать, что примерно делает compiler frontend, его проблемы, его боль. Надеюсь, смогу передать слушателям часть этого.

Связанные темы

Спонсоры

JetBrains

JetBrains

Meetup sponsor (location, licenses prizes)

SEMrush

SEMrush

Meetup sponsor (location)

PeterService

PeterService

Meetup sponsor (location)

Oracle

Oracle

Meetup sponsor (location)

Вам также может понравиться