Past Meetup

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

This Meetup is past

113 people went

Details

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

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