Да, некоторые из упомянутых вами проблем могут быть реальными, но вещи развиваются.
Как и у любой новой технологии, сначала возникает ажиотаж, затем новая технология показывает, что есть некоторые нерешенные проблемы, а затем некоторые из этих проблем решены, а другие нет. Это приводит к еще одной возможности решения ваших проблем, для которой эта технология является более адаптированной.
Я скажу, что вы можете использовать STM для части вашего приложения, которая может выходить за пределы ограничений, существующих на современном уровне техники. Например, часть приложения, которая не заботится о потере эффективности.
Связь между транзакцией и не транзакционными частями является большой проблемой. Существуют STM, которые поддерживают блокировку, поэтому они могут согласованно взаимодействовать с не транзакционными частями.
Ввод / вывод также возможен, но ваша транзакция становится безотзывной, то есть не может быть прервана. Это означает, что только одна транзакция может использовать ввод / вывод одновременно. Вы также можете использовать ввод-вывод после успешного завершения транзакции верхнего уровня в мире без транзакций, как сейчас.
Большинство базовых систем библиотеки STM вынуждают пользователя различать транзакционные и нетранзакционные данные. Так что да, вам нужно понять, что это значит. С другой стороны, компиляторы могут определить, какой доступ должен быть транзакционным или нет, проблема заключалась в том, что они могут быть слишком консервативными, снижая эффективность, которую мы можем получить, когда мы явно управляем переменными другого типа. Это то же самое, что иметь статические, локальные и динамические переменные. Вы должны знать ограничения, которые каждый должен создать для правильной программы.