Каково текущее состояние предложения транзакционной памяти для 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.
Достаточно коротко: транзакционная память TS уже опубликована, а вторая версия разрабатывается. Однако комитет не планирует включать его в стандарт в ближайшем выпуске. Есть несколько причин для этого выбора:
Не хватает опыта внедрения. Только g ++ реализует это начиная с GCC6. Цель TS заключается в том, чтобы частично собрать реализацию и пользовательский опыт, поэтому такая большая функция все еще слишком «незрелая» в этом отношении.
Не каждая цель поддерживает транзакционную память, и имеет высокую стоимость реализации, в то время как не всем это нужно. По этим причинам комитет, по-видимому, не уверен, должен ли TS вообще быть частью основного стандарта C ++. С таким же успехом он может жить как TS.
Более того, не все считают, что каждая функция транзакционной памяти TS заслуживает включения в основной стандарт C ++. Некоторые считают, что synchronized
это главная особенность, в то время как другие полагают, что атомные блоки — реальное изменение игры. TS делает добавить еще одну когнитивную нагрузку, с которой придется столкнуться разработчикам библиотек (а также несколько новых ключевых слов, что обычно не считается хорошей вещью).
Других решений пока нет …