Starting in the 1960s, programming language researchers identified and classfied patterns in programs via transformations. Some of them are local, that is, they affect a single occurrence of a construct (plus subexpressions); others are global, meaning they affect the entire program. Local patterns are also known as "syntactic sugar".
Starting in the late 1980s, software design researchers identified and classified patterns in programs. These patterns are repeated constructions that programmers use to address specific problems and for which they have names so that they can discuss large pieces of code with concise statements.
In my talk, I will argue that (1) the use of some design patterns suggest that programmers are missing constructs in programming languages; (2) that a language with a tree-based macro system can easily incorporate some of these patterns; and (3) that doing so is useful, if the programming environment reports synthesized information at the level of the new constructs. The suggestion implies that we need a theory of design patterns, similar to those of syntactic expressiveness, and that we need new language extension mechanisms for incorporating non-local design patterns.