Стандартный C++ статус транзакционной памяти
Каково текущее состояние предложения транзакционной памяти для C++17. Будет ли он включен в стандарт, нацелен ли он на включение в какую-то будущую версию стандарта C++, или это всего лишь экспериментальная функция проверки концепции, статус стандартизации которой до сих пор не определен?
Я спрашиваю, потому что некоторые документы комитета по стандартизации, кажется, дают противоречивую информацию здесь. С одной стороны, у нас есть P0265R0 ( http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0265r0.pdf) о том, что транзакционная память не будет стандартизирована, с другой рука - есть статья N4492 от Страуструпа ( http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4492.pdf) с транзакционной памятью, перечисленной в списке функций C++17.
1 ответ
Достаточно коротко: транзакционная память TS уже опубликована, а вторая версия разрабатывается. Однако комитет не планирует включать его в стандарт в ближайшем выпуске. Есть несколько причин для этого выбора:
Не хватает опыта внедрения. Только g++ реализует это начиная с GCC6. Цель TS заключается в том, чтобы частично собрать реализацию и пользовательский опыт, поэтому такая большая функция все еще слишком "незрелая" в этом отношении.
Не каждая цель поддерживает транзакционную память, и имеет высокую стоимость реализации, в то время как не всем это нужно. По этим причинам комитет, по-видимому, не уверен, должен ли TS вообще быть частью основного стандарта C++. С таким же успехом он может жить как TS.
Более того, не все считают, что каждая функция транзакционной памяти TS заслуживает включения в основной стандарт C++. Некоторые считают, что
synchronized
это главная особенность, в то время как другие полагают, что атомные блоки - реальное изменение игры. TS добавляет еще одну когнитивную нагрузку, с которой придется столкнуться разработчикам библиотек (а также нескольким новым ключевым словам, что, как правило, не очень хорошо).