Здравствуйте, Sinclair, Вы писали:
S>Пока что выглядит всё так, что даже пытаться делать commit стоит только при условии выхода из блока без исключений. При исключительном выходе нужно применять либо rollback, либо ignore.
S>Дальше начинаются нюансы — что, если у нас три файла, выходим успешно, один уже закоммитился, теперь коммитим второй — упс, ошибка. Очевидное решение (скорее всего неверное) — продолжать отмотку с учётом изменившейся ситуации. То есть для второго и третьего мы попробуем теперь вызвать "завершатель ошибки".
S>В таком подходе можно попытаться запретить (языком и верификацией) выброс исключений из fault completion handler, разрешая нетривиальную логику в success completion handler.
Да блин, мне _вообще_ непонятно, какова должна быть грамотная стратегия обработки ошибок при финализации.

Если у нас есть блок, внутри которого содержатся 10 автоматических переменных, то что должно произойти при выходе из блока, если при вызове первого деструктора вылетела ошибка?
Если бы был полный STM с учетом IO, то все было бы супер. Но его нету. Что делать? Выполнять остальные деструкторы или нет? Все ошибки из всех деструкторов склеить в одно исключение и кидануть его наверх?