Very true, there's no technical reason why STM would require a functional language. The main advantage some functional languages have is purity, which means the type system can guarantee that a particular block of code does not cause side effects or otherwise interact with shared, mutable state in ways that aren't allowed by STM. In an impure language, the programmer would need to be extra vigilant.