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

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

Фото Anastasia Kazakova
Hosted By
Anastasia K.
Метапрограммирование, щадящее компилятор

Сведения

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

Любой окунувшийся в мир 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, его проблемы, его боль. Надеюсь, смогу передать слушателям часть этого.

Photo of St. Petersburg C++ User Group group
St. Petersburg C++ User Group
Показать еще мероприятия