I have been successfully experimenting with functional programming techniques, most importantly immutable data structures, in a sophisticated user interface application project. Admittedly, I often use imperative algorithms and data structures inside transient operations to reduce memory allocations and GC pressure while generally reserving immutability for the long-living data structures. Imperative algorithms are fine if they do not pierce the functional façade of the method call or class interface. The advantages of functional data structures are their versatility, which include persistence (version support), referential transparency, optimizations, and cheap copies and comparison tests. In yesterday’s PDC panel with language experts, Anders Hejlsberg...