In the context of programming, how do idioms differ from patterns?
I use the terms interchangeably and normally follow the most popular way I’ve heard something called, or the way it was called most recently in the current conversation, e.g. “the copy-swap idiom” and “singleton pattern”.
The best difference I can come up with is code which is meant to be copied almost literally is more often called pattern while code meant to be taken less literally is more often called idiom, but such isn’t even always true. This doesn’t seem to be more than a stylistic or buzzword difference. Does that match your perception of how the terms are used? Is there a semantic difference?
Contrary to the idea that patterns are language agnostic, both Paul Graham and Peter Norvig have suggested that the need to use a pattern is a sign that your language is missing a feature. (Visitor Pattern is often singled out as the most glaring example of this.)
I generally think the main difference between “patterns” and “idioms” to be one of size. An idiom is something small, like “use an interface for the type of a variable that holds a collection” while Patterns tend to be larger. I think the smallness of idioms does mean that they’re more often language specific (the example I just gave was a Java idiom), but I don’t think of that as their defining characteristic.