новый движок для своей STM. Интерфейс остался прежним: типы, операции, поведение, но внутри я заменил Free monad на Church-encoded Free monad. У первой есть серьезный недостаток: квадратичная сложность при связывании двух транзакций, так как каждый раз траверсится вся цепочка внутренних монадических операций, чтобы вставить еще одну в конец этой цепочки. Church-encoded фри монада этой проблемы лишена.
Ну и вот, на специально сконструированных длинных транзакциях время выполнения оных упало в 10 раз. Так, в одном сценарии это было 347.0ms, а стало 30.0ms. И если время с free монадой растет квадратично, то с church free монадой - линейно.
И это была первая запланированная оптимизация. Размышляю над следующими.
на ЛОР запости, в Development
Обсуждают сегодня